之前一直使用的日志收集方案是ELK,动辄占用几个G的内存,有些配置不好的服务器有点顶不住!最近发现一套轻量级日志收集方案: Loki+Promtail+Grafana(简称LPG), 几百M内存就够了,而且界面也挺不错的,推荐给大家!

SpringBoot实战电商项目mall(50k+star)地址:https://github.com/macrozheng/mall

简介

LPG日志收集方案内存占用很少,经济且高效!它不像ELK日志系统那样为日志建立索引,而是为每个日志流设置一组标签。下面分别介绍下它的核心组件:

  • Promtail:日志收集器,有点像Filebeat,可以收集日志文件中的日志,并把收集到的数据推送到Loki中去。
  • Loki:聚合并存储日志数据,可以作为Grafana的数据源,为Grafana提供可视化数据。
  • Grafana:从Loki中获取日志信息,进行可视化展示。

安装

实现这套日志收集方案需要安装Loki、Promtail、Grafana这些服务,直接使用docker-compose来安装非常方便。

  • 使用的docker-compose.yml脚本如下,直接使用docker-compose命令运行即可;
version: "3"services:# 日志存储和解析loki:image: grafana/lokicontainer_name: lpg-lokivolumes:- /mydata/loki/:/etc/loki/# 修改loki默认配置文件路径command: -config.file=/etc/loki/loki.ymlports:- 3100:3100# 日志收集器promtail:image: grafana/promtailcontainer_name: lpg-promtailvolumes:# 将需要收集的日志所在目录挂载到promtail容器中- /mydata/app/mall-tiny-loki/logs/:/var/log/- /mydata/promtail:/etc/promtail/# 修改promtail默认配置文件路径command: -config.file=/etc/promtail/promtail.yml# 日志可视化grafana:image: grafana/grafanacontainer_name: lpg-grafanaports:- 3000:3000
  • 由于我们把Loki和Promtail的配置文件挂载到了宿主机上,在运行之前,需要先准备好这两个配置文件;

  • Loki的配置文件/mydata/loki/loki.yml内容如下,使用的是默认配置(可以先不挂载配置文件运行Loki的Docker容器,然后从容器中拷贝出来即可);

auth_enabled: falseserver:http_listen_port: 3100ingester:lifecycler:address: 127.0.0.1ring:kvstore:store: inmemoryreplication_factor: 1final_sleep: 0schunk_idle_period: 1h       # Any chunk not receiving new logs in this time will be flushedmax_chunk_age: 1h           # All chunks will be flushed when they hit this age, default is 1hchunk_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 firstchunk_retain_period: 30s    # Must be greater than index read cache TTL if using an index cache (Default index read cache TTL is 5m)max_transfer_retries: 0     # Chunk transfers disabledschema_config:configs:- from: 2020-10-24store: boltdb-shipperobject_store: filesystemschema: v11index:prefix: index_period: 24hstorage_config:boltdb_shipper:active_index_directory: /loki/boltdb-shipper-activecache_location: /loki/boltdb-shipper-cachecache_ttl: 24h         # Can be increased for faster performance over longer query periods, uses more disk spaceshared_store: filesystemfilesystem:directory: /loki/chunkscompactor:working_directory: /loki/boltdb-shipper-compactorshared_store: filesystemlimits_config:reject_old_samples: truereject_old_samples_max_age: 168hchunk_store_config:max_look_back_period: 0stable_manager:retention_deletes_enabled: falseretention_period: 0sruler:storage:type: locallocal:directory: /loki/rulesrule_path: /loki/rules-tempalertmanager_url: http://localhost:9093ring:kvstore:store: inmemoryenable_api: true
  • Promtail的配置文件/mydata/loki/promtail.yml内容如下,使用的也是默认配置,这里的clients.url需要注意下,由于我们使用的是docker-compose部署,所以可以将服务名称loki作为域名来访问Loki服务;
server:http_listen_port: 9080grpc_listen_port: 0positions:filename: /tmp/positions.yamlclients:- url: http://loki:3100/loki/api/v1/pushscrape_configs:
- job_name: systemstatic_configs:- targets:- localhostlabels:job: varlogs__path__: /var/log/*log
  • 运行docker-compose.yml脚本安装所有服务,使用如下命令即可;
docker-compose up -d
  • 运行成功后,可以使用docker ps |grep lpg命令查看服务状态。
[root@local-linux lpg]# docker ps |grep lpg
64761b407423        grafana/loki                            "/usr/bin/loki -conf…"   3 minutes ago       Up 3 minutes        0.0.0.0:3100->3100/tcp                           lpg-loki
67f0f0912971        grafana/grafana                         "/run.sh"                3 minutes ago       Up 3 minutes        0.0.0.0:3000->3000/tcp                           lpg-grafana
f2d78eb188d1        grafana/promtail                        "/usr/bin/promtail -…"   3 minutes ago       Up 3 minutes                                                         lpg-promtail

使用

接下来我们将使用LPG日志收集系统来收集SpringBoot应用的日志,SpringBoot应用基本不用做特殊配置。

  • 首先创建一个SpringBoot应用,修改配置文件application.yml,将日志输出到/var/logs目录下;
spring:application:name: mall-tiny-lokilogging:path: /var/logslevel:com.macro.mall.tiny: debug
  • 使用如下命令运行SpringBoot应用,并把日志目录挂载到宿主机上,这样Promtail就可以收集到日志了;
docker run -p 8088:8088 --name mall-tiny-loki \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/mall-tiny-loki/logs:/var/logs \
-e TZ="Asia/Shanghai" \
-d mall-tiny/mall-tiny-loki:1.0-SNAPSHOT
  • 运行成功后登录Grafana,账号密码为admin:admin,登录成功后需要添加Loki为数据源,访问地址:http://192.168.7.149:3000/

  • 在数据源选择界面中直接选择Loki,我们可以看到Grafana也支持使用Elasticsearch作为数据源;

  • 之后设置下你的Loki访问地址,点击Save&test保存并测试,显示绿色提示信息表示设置成功,Loki访问地址:http://192.168.7.149:3100

  • 接下来在Explore选择Loki,并输入查询表达式(Loki query)为{filename="/var/log/spring.log"},就可以查看我们的SpringBoot应用输出的日志了。

总结

本文主要介绍了LPG日志系统的搭建及使用它收集SpringBoot应用的日志,LPG日志收集方案确实非常轻量级,性能也不错!不过如果你有对日志进行全文搜索的需求的话,还是得使用ELK系统。如果你对Grafana还不熟悉的话,可以参考下这篇文章《号称下一代可视化监控系统,结合SpringBoot使用,贼爽!》。

参考资料

  • Loki官方文档:https://grafana.com/docs/loki/latest/overview/
  • Promtail官方文档:https://grafana.com/docs/loki/latest/clients/promtail/

项目源码地址

https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-loki

本文 GitHub https://github.com/macrozheng/mall-learning 已经收录,欢迎大家Star!

再见笨重的ELK!这套轻量级日志收集方案要火!相关推荐

  1. 你还在用笨重的 ELK?这个轻量级日志新贵了解一下

    点击关注公众号,回复"1024"获取2TB学习资源! 最近,在对公司容器云的日志方案进行设计的时候,发现主流的ELK或者EFK比较重,再加上现阶段对于ES复杂的搜索功能很多都用不上 ...

  2. 再见笨重的ELK,轻量化日志 Loki 牛逼,奉上全攻略教程!

    大家好,我是宝哥! 1.前言 在对公司容器云的日志方案进行设计的时候,发现主流的 ELK(Elasticsearch,Logstash,Kibana)或者 EFK(Elasticsearch,File ...

  3. 容器内应用日志收集方案

    容器化应用日志收集挑战 应用日志的收集.分析和监控是日常运维工作重要的部分,妥善地处理应用日志收集往往是应用容器化重要的一个课题. Docker处理日志的方法是通过docker engine捕捉每一个 ...

  4. Nginx容器日志收集方案fluentd+elasticsearch+kilbana

    容器技术在发展到今天已经是相当的成熟,但容器不同于虚拟机,我们在使用容器的同时也有很多相关的技术问题需要解决,比如:容器性能监控,数据持久化,日志监控与分析等.我们不能像平时使用虚拟机一样来管理容器, ...

  5. EKS日志收集方案-PLG(Promtail+Loki+Grafana)

    组件概述(什么是PLG?) Promtail:日志收集代理,它通常被部署到需要监视应用程序的每台机器/容器上.Promtail主要是用来发现目标.将标签附加到日志流以及将日志推送到Loki.截止到目前 ...

  6. 基于filebeat + logstash的日志收集方案

    日志收集是一个很普遍的需求,各个服务的log日志,打点日志都需要收集起来做离线etl或实时分析.日志收集工具也有很多开源的可供选择,flume,  logstash, filebeat等等.  目前3 ...

  7. 前端错误日志收集方案

    前言 公司的项目上线出现问题后难以定位错误,研究过现存的错误监控方案,受限于特殊条件只能定制自己的错误收集方案. 基于以上背景我撸出来一个错误日志收集方案 - Ohbug. 欢迎各位大佬 star ~ ...

  8. 搭建elk+logstash+kafka+filebeat日志收集平台

    文章目录 前言 组件介绍 原理图 环境介绍 安装 日志收集与展示 前言 在日常的运维过程中,对系统日志和业务日志的处理比较重要,对于以后的数据分析.排查异常问题有很重的作用.今天就分享一个自己基于ka ...

  9. 基于ELK打造强大的日志收集分析系统(springboot2+logback+logstash+elasticsearch+kibana)

    前言 上一代的日志分析系统springboot+log4j+flume+kafka仿佛还是昨天,现在已经流行起了新一代的springboot2+logback+logstash+elasticsear ...

最新文章

  1. httpd默认配置文件详解
  2. 精算模型1 一元生存分析3 条件概率与截尾分布
  3. ubuntu9.10上安装jdk5
  4. java中文件选择对话框
  5. BlackArch Linux安装VMware Tools教程
  6. oracle查表占的物理空间,查询Oracle表实际物理使用大小
  7. Android系统(116)---APP启动过程
  8. mysql和sqlserver读写分离_C#简单构架之EF进行读写分离+多数据库Mysql/SqlServer
  9. linux安装vnc4server,Ubuntu 18.04安装vnc4server
  10. php如何上传txt文件,并且读取txt文件
  11. 15年3月c语言试卷,2015年3月计算机二级C语言试卷及答案..doc
  12. DeprecationWarning:current URL string parser is deprecated, and will be removed in a future version.
  13. 基于VisualStudio11开发Windows8的Metro sample讲解(1)MessageBox
  14. 土壤数据库一些参数解释和补充说明
  15. 视频光端机怎么连接 视频光端机接法图解
  16. android 相机自动延时拍照软件,延时摄影大师app下载-延时摄影大师 安卓版v3.0-PC6安卓网...
  17. Files and Directories
  18. 手机信号不好?真不是套餐原因!4招教你搞定!
  19. 无法访问yunlong.wj0920wjx.net指向的web服务器(或虚拟主机)的目录,请检查网络设置
  20. vulnhub靶场之HA: Joker

热门文章

  1. PDF转图片怎么转?分享两种转换小技巧
  2. Java Web——基于Jsp+Servlet的大学生社团管理系统
  3. java游泳馆浴池管理系统-小程序
  4. 重置计算机网络配置后上不了网,路由器重置后上不了网怎么办 怎么重新设置路由器...
  5. office在线word、excel预览
  6. 在深圳办理计划生育服务证的过程
  7. CMDN CLUB#27期:移动教育主题沙龙PPT分享
  8. 图片大小/像素/分辨率之间有什么关系
  9. 微服务如何实现各个模块之间相互调用
  10. 数据分析三剑客之特征值提取(七)