Grafana+loki+promtail 收集logback微服务日志
Grafana+loki+promtail 收集logback微服务日志多行日志合并时间序列选择等配置记录
记录一下 PLG 收集运行日志的相关步骤和一些重点说明
目录
一、总体介绍
promtail : 读取、收集、传输日志信息
loki: 存储 promtail 传输过来的日志信息,当然loki也可以存储其他 的收集工具收集的日志,例如:Fluent logstash等
Grafana:日志展示层,读取loki接口日志信息展示在页面,提供动态查询
二、场景说明
- 服务器环境采用 windows搭建,其他环境无非就是启动方式不一样
- 收集多个项目系统日志
- 日志是logback产生的
- 采用直接安装方式,直接读取具体路径的log文件
三、下载安装
3.1 官方文档
https://grafana.com/docs/loki/latest/installation/
3.2 下载路径
3.2.1 loki
-
程序下载:
https://github.com/grafana/loki/releases/
选择下载文件是logcli-windows-amd64.exe.zip
-
配置下载:
wget https://raw.githubusercontent.com/grafana/loki/master/cmd/loki/loki-local-config.yaml
3.2.2 promtail
- 程序下载:
https://github.com/grafana/loki/releases/
点击更多按钮Show all 34 asserts
选择下载文件是 promtail-windows-amd64.exe.zip
- 配置下载:
wget https://raw.githubusercontent.com/grafana/loki/main/clients/cmd/promtail/promtail-local-config.yaml
3.2.3 Grafana
https://grafana.com/grafana/download?platform=windows
3.3 配置启动
3.3.1 loki
设置一下配置文件 loki-local-config.yaml
,loki用来存储日志,这里可以设置最大保存时间。
参考: https://grafana.com/docs/loki/latest/configuration/examples/
auth_enabled: false
# 对外端口
server:
http_listen_port: 3100
# 存储设置
ingester:
lifecycler:
address: 127.0.0.1
ring:
kvstore:
store: inmemory
replication_factor: 1
final_sleep: 0s
chunk_idle_period: 5m
chunk_retain_period: 30s
schema_config:
configs:
- from: 2020-05-15
store: boltdb
object_store: filesystem
schema: v11
index:
prefix: index_
period: 168h
# 数据存放地址 包含索引
storage_config:
boltdb:
directory: /tmp/loki/index
filesystem:
directory: /tmp/loki/chunks
limits_config:
enforce_metric_name: false
reject_old_samples: true
reject_old_samples_max_age: 168h
table_manager:
retention_deletes_enabled: true
# 注意和索引存储时间一致,按1周为单位
retention_period: 168h
启动命令:
.\loki-windows-amd64.exe --config.file=loki-local-config.yaml
3.3.2 promtail
这里是收集日志,涉及多个日志行
合并为一条日志信息传输给 loki,以及设置按照 logback里面的时间序列作为 loki的时间序列
等配置。
这个不得说下,需要多看官方文档,里面配置比较细内容分散,需要结合其他人博客和官方文档进行分析测试。
模拟两个 微服务Springboot的日志收集(wms_main 和 wms_tools),
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
# 配置你的 loki 地址和端口
clients:
- url: http://localhost:3100/loki/api/v1/push
scrape_configs:
- job_name: wms_main
static_configs:
- targets:
- localhost
labels:
job: wms_main
app: wms
name: jtwms
__path__: E:\IDEA_HOME\guohe\wms-main-api\logs\*.log
pipeline_stages:
- match:
selector: '{job="wms_main"}'
stages:
- regex:
expression: '^(?s)(?P<timestamp>\S+?) (?P<level>\S+?) (?P<content>.*)$'
- multiline:
firstline: '^\d{4}-\d{2}-\d{2}T\d{1,2}:\d{2}:\d{2}\.\d{3}'
max_wait_time: 3s
- labels:
level:
content:
- timestamp:
format: RFC3339Nano
source: timestamp
- job_name: wms_tools
static_configs:
- targets:
- localhost
labels:
job: wms_tools
__path__: E:\IDEA_HOME\guohe\wms-tools-api\logs\*.log
pipeline_stages:
- match:
selector: '{job="wms_tools"}'
stages:
- regex:
expression: '^(?s)(?P<timestamp>\S+?) (?P<level>\S+?) (?P<content>.*)$'
- multiline:
firstline: '^\d{4}-\d{2}-\d{2}T\d{1,2}:\d{2}:\d{2}\.\d{3}'
max_wait_time: 3s
- labels:
level:
- timestamp:
format: RFC3339Nano
source: timestamp
上面的配置说明:
-
job_name
是 promtail收集任务或者是线程,一般一个job对应一个微服务日志收集工作 -
labels
配置项目中__path__
是微服务logback 日志的生产路径,建议docker方式的springboot 日志地址映射到主机路径即可。 -
labels
的其他配置是可以自定义的,比如你可以增加一个host 主机地址 -
pipeline_stages
是重点,里面配置主要用于修改调整收集到的日志,通过go的正则表达式进行解析 logback的一行日志信息,来配置生成最终要传递给loki的日志是什么样子的。 -
expression
go语言正则表达式,对一行logback日志进行划分
这里说下logback xml的配置规则如下:.... 省略 <encoder> <Pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX} %-5level [%thread] %logger{36} L%line - %msg%n</Pattern> <charset>UTF-8</charset> </encoder> ... 省略
生成出来的logback日志信息如下:
... 2022-09-12T18:53:22.085+08:00 INFO [RMI TCP Connection(1)-192.168.50.1] o.s.web.servlet.DispatcherServlet L547 - Completed initialization in 19 ms 2022-09-12T18:54:55.641+08:00 DEBUG [http-nio-9903-exec-2] c.m.s.shirojwt.filter.JwtFilter L130 - JwtFilter isAccessAllowed url:/api/tools/test 2022-09-12T18:54:55.643+08:00 DEBUG [http-nio-9903-exec-2] c.s.w.m.f.s.ShiroJwtBussinessService L84 - 进入 认证 doGetAuthenticationInfo ...
可以看到表达式 前面两个是按照空格为分割符进行一行日志的拆解,主要目的是为了提取这一行日志的
级别 level
-
multiline
配置项是为了传输到loki里面时,合并必要的日志行,例如java程序发生异常是的异常堆栈信息,这里就希望所有的堆栈信息合并一个日志条目存储到loki里面,在granfa页面上查看时比较方便 -
firstline
是合并日志行配置,表示什么样的开头表示是一条新日志,这里设置的是符合一行的日志信息以时间序列为开始的表示是一个新的日志条目。 -
timestamp
设置存储到loki里面的时间序列使用默认的还是从上面解析出来的值作为时间序列值, 为什么要这样做? 就是为了方便排序查看,不然默认的收集时间序列可能不会按照logbak的时间序列排序。 -
level
这里指 pipeline_stages 配置项下的,这里主要是将 logbak的日志等级加入到 标签中,为了方便查询。
启动命令:
.\promtail-windows-amd64.exe --config.file=promtail-local-config.yaml
3.3.3 Grafana
可以修改配置文件 ./conf/defaults.ini 设置是否有访问前缀,或者是域名https方式访问这些。
[server]
protocol = http
...
http_port = 3000
...
domain = localhost
# 这里添加了一个访问前缀 /grafana 目的是为了后面配置 nginx 代理方便区分。
root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana/
# 这里一定配置 true 表示 root_url 可以配置为子级路径访问
serve_from_sub_path = true
....
启动命令: 或者双击运行
.\bin\grafana-server.exe
初始登录账户:admin/admin
启动成功之后,http://localhost:3000/grafana
/ 即可
添加数据源:
选择 Loki类型的数据源
然后 测试 和 发布这个配置:
设置查询条件:
查看日志信息: 观察看看 多行合并是否生效 , 时间序列是否生效。
例如上面的 打印 banner tools start ok !
如果没有配置多行合并,则每一行都会被当成单独的日志条目进行存储展示。
四、其他备注
go语言正则表达式:
http://c.biancheng.net/view/5124.html
https://www.goregex.cn/
promtail pipeline 中文翻译,不过建议和官方文档对照看
点击访问
更多推荐
所有评论(0)