LogQL 常用日志查询速查
基础查询
{app="api"}
{app="api"} |= "error"
{app="api"} != "healthcheck"
{app="api"} |~ "error|fatal"
{app="api"} !~ "debug|trace"
{namespace="prod"} |= "timeout" | json
{app="api"} | json | status >= 500
{app="api"} | logfmt | level="error"
{app="api"} | pattern `<_> <level> <msg>`
{app="api"} | line_format "{{.level}} {{.msg}}"
sum(rate({app="api"} |= "error" [5m])) by (level)
topk(5, sum by (path) (count_over_time({app="api"} | json [5m])))
常用操作
| 操作 |
含义 |
| ` |
=` |
!= |
不包含 |
| ` |
/!` |
| ` |
json` |
| ` |
logfmt` |
| ` |
pattern` |
| ` |
line_format` |
| ` |
label_format` |
unwrap |
提取数值 |
count_over_time |
计数 |
场景速查
| 目的 |
写法 |
| 错误日志 |
`{app="api"} |
| 5xx 请求 |
`{app="api"} |
| 按级别统计 |
`sum by (level) (count_over_time({app="api"} |
| 慢请求 |
`{app="api"} |
| 排除健康检查 |
{app="api"} != "healthz" |
| 多标签筛选 |
`{namespace="prod", app=~"api |
易错点
- 流选择器必须至少有一个非空标签匹配;
{} 不是有效查询。
- 标签基数过高会拖慢查询;请求 ID 不要做标签。
| json 后字段名大小写和嵌套路径要确认。
- 正则默认区分大小写;需要时用
(?i)。
- 大时间范围会扫描大量日志;先用标签和时间缩小。
unwrap 只能用于数值字段;类型不匹配会报错。
- 指标查询和日志查询的窗口语义不同;注意
[5m] 的位置。
相关命令
logcli — Loki 查询客户端
loki — 日志存储
grafana — 可视化