LogQL常见查询模式
LogQL是Grafana Loki专用的查询语言,它结合了PromQL的语法特性和日志处理能力。本指南将介绍最实用的查询模式,帮助您快速从日志中提取有价值的信息。
基础概念
LogQL查询由两个主要部分组成:
- 日志流选择器 - 使用标签过滤日志流(类似PromQL)
- 日志处理管道 - 对选中的日志进行转换和过滤
基本语法结构:
{label_selector} | log_pipeline
1. 基础过滤模式
精确字符串匹配
{app="frontend"} |= "error"
这会返回frontend
应用中所有包含"error"字符串的日志行。
正则表达式匹配
{namespace="production"} |~ "(?i)timeout"
使用|~
操作符进行正则匹配,(?i)
表示不区分大小写,查找所有包含"timeout"的日志。
多条件过滤
{job="api-server"} |= "error" != "connection refused"
组合多个过滤条件:包含"error"但不包含"connection refused"的日志。
2. 日志解析模式
提取结构化字段
{app="auth-service"} | logfmt | duration > 500ms
logfmt
解析器可以提取键值对格式的日志字段,然后我们可以基于字段值过滤(如响应时间>500ms)。
JSON日志解析
{cluster="us-west"} | json | latency_ms >= 1000
对于JSON格式的日志,使用json
解析器提取字段。
正则表达式提取
{service="payment"} | regexp `(?P<ip>\\d+\\.\\d+\\.\\d+\\.\\d+)` | ip = "192.168.1.1"
使用命名捕获组从非结构化日志中提取特定模式(如IP地址)。
3. 聚合分析模式
计数统计
sum by (level) (
count_over_time(
{app="backend"} | json | level=~"(error|warn)"
[5m]
)
)
统计5分钟内backend
应用的错误和警告数量,按日志级别分组。
速率分析
rate(
{job="nginx"} |~ "HTTP/1.1\" (4|5)[0-9]{2}" [1m]
)
计算Nginx服务每分钟的HTTP 4xx/5xx错误率。