1 LogQL前置配置
1.1 增加数据源
在grafana里操作,Connections选择DataSource。点击Add data source,选择Loki(已是默认选项)
1.2 HTTP配置
URL:http://loki:3100 使用Docker的情况 或者是当前搭建Loki服务器的内网地址
1.3 导出域名(可选,推荐使用)
在Loki配置界面,配置Derived Fields,将类似traceId的事物转变为可点击的链接,配合你使用Tempo这类追踪器或者其他仪表盘
1.4 保存与测试
点击Save & Test。如果变绿了,就可以准备查询了。
2 LogQL基础语法(选择与筛选)
2.1 选择符(在哪里)
Loki编号了一些数据,以此来命中特别的数据集。
{app="gateway"} 查找当前app label为gateway的数据
{job="varlogs", instance="server-01"} 标签合并
2.2 筛选(要什么)
当拥有数据流后,可以筛选日志中的文本。
|= 包含
!= 不包含
|~ 正则匹配
!~ 正则不匹配
eg: {container="nginx"} |="GET" !=200
在Nginx日志中包含GET且不含200状态码的数据
2.3 解析日志(结构化数据)
大部分log是字符串,如果想对他们做一些数学计算,需要解析为结构化数据。
2.3.1 JSON Parser
当log是JSON格式的时候,{app="api"} | json
这样即可获得字段 | line_format "{{.messgae}}"
2.3.2 Logfmt Parser
用于标准关键字是数值的日志
{app="ingress}" | logfmt
2.3.3 Pattern Parser
对于自定义文本日志,举例Apache/Nginx的日志
{job="syslog"} | pattern "<ip> - - <_> "<method> <path> <_>" <status> <size>
即可创造ip method status这样的字段
2.4 测量参数(将日志化作图标)
这是使LogQL强有力的根源。可以将日志转化为Grafana图表可计算的数据。
2.4.1 日志速率
每秒钟多少日志
rate({app="mysql"}[5m])
2.4.2 计算特殊报错
sum(count_over_time({app="order-service"} |= "timeout" [1m]))
2.4.2 解析参数的计算
如果解析出一个JSON参数叫做latency_ms
avg_over_time({app="api"} | json | unwrap latency_ms [5m]
2.5 示例
| 目的 | 参数 |
|---|---|
| 根据关键词查询 | {job="system"} |
| 根据服务计算错误 | sum by (app) (count_over_time({evn="prod"} |
| 前十IP地址 | topk(10, sum by (client_ip) (count_over_time({app="nginx"} | json [1h]))) |
| 以状态码筛选 | {app="gateway"} | json |status >= 500 |