LogQL入门教程

0 阅读2分钟

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