中小项目用ELK做日志?我准备玩点新花样

开发 项目管理
项目做正规了,日志系统是少不了的。目前大部分日志平台推荐基于ELK构建,不过ELK算是比较重了,架构太大,中小项目不太好Hold住,希望找一款简单一些的,如果实在找不到再上ELK。

[[399208]]

项目做正规了,日志系统是少不了的。目前大部分日志平台推荐基于ELK构建,不过ELK算是比较重了,架构太大,中小项目不太好Hold住,希望找一款简单一些的,如果实在找不到再上ELK。之前储备了一些技术候选库,翻了翻果然有一款名叫Loki的日志系统,可百度大部分都是电影里的这货,不靠谱?

Loki

事实上日志系统的开发团队靠谱的很,就是监控领域大名鼎鼎的Grafana Labs,为人所熟知的有开源数据可视化工具Grafana、监控系统Prometheus等等。

Loki是他们受 Prometheus 启发打造的开源项目,是一款可扩展,高可用,支持多租户的日志聚合系统。设计的理念就是为了让日志聚合更简单,它被设计为非常经济高效且易于操作。它不索引日志的内容,而是为每个日志流设置一组标签。它主要由三部分组成:

  • Promtail是日志收集器,负责收集应用的日志并发送给Loki。
  • Loki用于日志的存储和解析,并提供查询API给下游展示。
  • Grafana负责将Loki的日志可视化。

Loki流程图

看上去挺不错的,我要试一试。

简单上手

遇到新东西先跑个小DEMO,说实话目前国内介绍这个的都没有详细的上手DEMO,尤其是和Spring Boot对接这一块。我照着原版文档,花了小半天终于跑成功了。

Loki安装

首先是安装,现在跑DEMO我优先选择快捷方便的Docker。下面是我修改过的Docker Compose脚本,根据你自己的需要改改就能一键启动Loki。

  1. version: "3" 
  2.  
  3. networks: 
  4.   loki: 
  5.  
  6. services: 
  7.   loki: 
  8.     image: grafana/loki:2.2.1 
  9.     container_name: loki-service 
  10.     volumes: 
  11. #    将loki的配置文件挂载到本地 c:/docker/loki 目录 
  12.       - c:/docker/loki:/etc/loki/ 
  13.     ports: 
  14.       - "3100:3100" 
  15.     command: -config.file=/etc/loki/loki.yml 
  16.     networks: 
  17.       - loki 
  18.  
  19.   promtail: 
  20.     image: grafana/promtail:2.2.1 
  21.     container_name: promtail-service 
  22.     volumes:   
  23.     #  为了读取本地的日志目录,这个是个默认配置目的就是为跑起来,生产肯定不是这样的。    
  24.       - c:/docker/log:/var/log/ 
  25.     #  promtail  的配置文件也挂载到本地 c:/docker/promtail目录   
  26.       - c:/docker/promtail:/etc/promtail/ 
  27.     command: -config.file=/etc/promtail/promtail.yml 
  28.     networks: 
  29.       - loki 
  30.  
  31.   grafana: 
  32.     image: grafana/grafana:latest 
  33.     container_name: grafana-service 
  34.     ports: 
  35.       - "3000:3000" 
  36.     networks: 
  37.       - loki 

上面的挂载目录c:/docker/loki和c:/docker/promtail你根据自己的情况调整位置。

Loki的配置

上面文件中的-config.file=/etc/loki/loki.yml是Loki的配置文件,我们需要将配置文件loki.yml提前放在c:/docker/loki下,我使用默认配置:

  1. auth_enabled: false 
  2.  
  3. server: 
  4.   http_listen_port: 3100 
  5.  
  6. ingester: 
  7.   lifecycler: 
  8.     address: 127.0.0.1 
  9.     ring: 
  10.       kvstore: 
  11.         store: inmemory 
  12.       replication_factor: 1 
  13.     final_sleep: 0s 
  14.   chunk_idle_period: 1h       # Any chunk not receiving new logs in this time will be flushed 
  15.   max_chunk_age: 1h           # All chunks will be flushed when they hit this age, default is 1h 
  16.   chunk_target_size: 1048576  # Loki will attempt to build chunks up to 1.5MB, flushing first if chunk_idle_period or max_chunk_age is reached first 
  17.   chunk_retain_period: 30s    # Must be greater than index read cache TTL if using an index cache (Default index read cache TTL is 5m) 
  18.   max_transfer_retries: 0     # Chunk transfers disabled 
  19.  
  20. schema_config: 
  21.   configs: 
  22.     - from: 2020-10-24 
  23.       store: boltdb-shipper 
  24.       object_store: filesystem 
  25.       schema: v11 
  26.       index
  27.         prefix: index_ 
  28.         period: 24h 
  29.  
  30. storage_config: 
  31.   boltdb_shipper: 
  32.     active_index_directory: /loki/boltdb-shipper-active 
  33.     cache_location: /loki/boltdb-shipper-cache 
  34.     cache_ttl: 24h         # Can be increased for faster performance over longer query periods, uses more disk space 
  35.     shared_store: filesystem 
  36.   filesystem: 
  37.     directory: /loki/chunks 
  38.  
  39. compactor: 
  40.   working_directory: /loki/boltdb-shipper-compactor 
  41.   shared_store: filesystem 
  42.  
  43. limits_config: 
  44.   reject_old_samples: true 
  45.   reject_old_samples_max_age: 168h 
  46.  
  47. chunk_store_config: 
  48.   max_look_back_period: 0s 
  49.  
  50. table_manager: 
  51.   retention_deletes_enabled: false 
  52.   retention_period: 0s 
  53.  
  54. ruler: 
  55.   storage: 
  56.     type: local 
  57.     local
  58.       directory: /loki/rules 
  59.   rule_path: /loki/rules-temp 
  60.   alertmanager_url: http://localhost:9093 
  61.   ring: 
  62.     kvstore: 
  63.       store: inmemory 
  64.   enable_api: true 

不要纠结这些配置项是干什么的,先跑起来再说,用到了去查文档,要有的放矢。

Promtail的配置

和Loki类似,Promtail也要在本地挂载的c:/docker/promtail目录下配置promtail.yml,这里也使用默认配置:

  1. server: 
  2.   http_listen_port: 9080 
  3.   grpc_listen_port: 0 
  4.  
  5. positions: 
  6.   filename: /tmp/positions.yaml 
  7.  
  8. clients: 
  9.   - url: http://loki:3100/loki/api/v1/push 
  10.  
  11. scrape_configs: 
  12.   - job_name: system 
  13.     static_configs: 
  14.       - targets: 
  15.           - localhost 
  16.         labels: 
  17.           job: varlogs 
  18.           # 这个跟挂载的位置有点关系,你可以猜猜 
  19.           __path__: /var/log/*log 

我猜测/var/log/*log就是读取日志的位置,所以我把它挂载到本地c:/docker/log,等下弄点日志到本地这个目录下,看看能读取出来不。

启动Loki

配置完毕后执行docker-compose -f up命令,会先下载镜像然后启动三个Docker容器。成功后打开http://localhost:3000/登录Grafana,默认账号密码是admin/admin。然后在侧边栏添加数据源为Loki:

点击图中的Add data source

然后配置Loki的URL为http://loki:3100,然后点确定和测试,有绿色提示就表示成功了。

我们使用的是Docker Compose,因此hostname是服务名称loki。

然后点击侧边栏一个指南针形状的图标Explore,就进入日志的UI了,这时候啥也没有。

得造点日志,搞一个Spring Boot应用,然后在application.yml中配置日志选项,然后启动应用生成一些日志。

  1. logging: 
  2.   file: 
  3.   # 弄到疑似Promtail的日志读取路径试试 
  4.     path: c:/docker/log 
  5.   level
  6.     org: debug 

然后我输入了一个从文档中找到的查询日志的表达式(Loki query){filename="/var/log/spring.log"}, 文件名称去c:/docker/log下看,有了有了!Nice!

Loki中查询展示Spring Boot日志

总结 

今天从零演示了Spring Boot对接日志新贵Loki,看上去还真不错。学习新东西,要清楚它的场景,要清楚自己每一步的目标,先跑起来DEMO,再去研究定制化,最后才是底层原理。你学得越多就越熟练,你学得越多就越知道自己的短板,才能有目标和方向,不要盲目学,更不要过于追求底层原理。

本文转载自微信公众号「码农小胖哥」,可以通过以下二维码关注。转载本文请联系码农小胖哥公众号。

 

责任编辑:武晓燕 来源: 码农小胖哥
相关推荐

2022-05-30 08:01:25

Windows 11操作系统桌面贴纸

2012-11-20 16:23:19

飞轮UPS数据中心电源

2022-05-09 08:01:23

countdistinctMySQL

2013-10-22 09:37:14

网络配置管理网络性能监控

2022-06-15 12:35:24

数据泄露勒索软件网络攻击

2013-01-22 11:22:02

联想Yoga

2009-05-13 20:12:15

杀毒设计师H1N1

2010-09-01 13:47:42

钓鱼网站

2017-05-22 15:50:38

ICT华为生态之行

2021-01-04 11:14:09

品牌营销UGC

2017-02-27 21:37:49

2019-05-09 15:53:27

PythonR数据科学

2024-06-11 09:52:39

2020-09-03 14:45:09

C语言开源项目

2020-11-19 15:18:19

无人机技术工业

2017-02-27 15:21:39

2016-05-27 17:56:35

互联网

2016-10-09 13:09:46

点赞
收藏

51CTO技术栈公众号