06.5、LogQL查询语言
LogQL 查询语言
LogQL 是 Loki 的查询语言,类似于 PromQL。本节将学习:基本查询语法、过滤条件、聚合操作、以及日志解析方法。
基本查询语法
LogQL 查询语法是什么? LogQL 查询语法:
{标签选择器} 操作符 过滤表达式LogQL 查询示例:
- : 查询所有 app job 的日志。
{job="app"} - : 查询 app job 的 error 级别日志。
{job="app", level="error"} - : 查询 app 或 api job 的日志。使用正则匹配。
{job=~"app|api"} - : 查询不是 web job 的日志。
{job!="web"}
标签选择器有什么操作符呢?
- = 精确匹配:
{job="app"} - != 不等于:
{job!="web"} - =~ 正则匹配:
{job=~"app|api"} - !~ 正则不匹配:
{job!~"web.*"}
LogQL 查询流程: LogQL 查询 → 标签选择器(
{job="app"}|="error"掌握这些操作符,可以灵活查询日志。
过滤条件
过滤条件有什么操作符呢?
- |= 包含(大小写敏感): 。查找包含 error 的日志。
{job="app"} |="error" - != 不包含: 。查找不包含 info 的日志。
{job="app"} !="info" - |~ 正则匹配: 。匹配 error 或 ERROR。
{job="app"} |~"error|ERROR" - !~ 正则不匹配: 。不匹配 debug 或 DEBUG。
{job="app"} !~"debug|DEBUG"
可以组合过滤吗? 当然可以。
- 同时包含多个词: 。同时包含 error 和 database。
{job="app"} |="error" |="database" - 包含但不包含: 。包含 error 但不包含 timeout。
{job="app"} |="error" !="timeout"
过滤条件示例: 标签查询 → 过滤条件(包含/不包含/正则匹配/正则不匹配)→ 返回结果。
过滤条件的注意事项:
- 大小写敏感: 是大小写敏感的。如果需要忽略大小写,使用正则
|=。|~ - 性能考虑: 先用标签过滤,再用内容过滤。标签过滤更高效。
合理使用过滤条件,可以快速找到需要的日志。
聚合操作
LogQL 支持哪些聚合操作呢?
- count_over_time: 统计时间范围内的日志数。例如 。
count_over_time({job="app"}[1m]) - rate: 计算速率。例如 。
rate({job="app"}[1m]) - sum: 求和。例如 。
sum(count_over_time({job="app"} |="error" [1m])) - avg: 平均值。例如 。
avg_over_time(...) - max: 最大值。例如 。
max_over_time(...) - min: 最小值。例如 。
min_over_time(...)
聚合示例:
第一个示例:统计每分钟的日志数。
count_over_time({job="app"}[1m])第二个示例:计算每秒的日志速率。
rate({job="app"}[1m])第三个示例:按 level 分组统计。
sum(count_over_time({job="app"} |="error" [1m])) by (level)第四个示例:计算平均日志长度。
avg_over_time({job="app"} | json | unwrap length(log) [5m])聚合流程: 日志查询 → 时间范围 → 聚合操作 → 分组 → 返回结果。
使用聚合操作,可以分析日志的趋势和模式。
日志解析
LogQL 支持哪些日志解析方法呢?
第一种方法:JSON 解析。
{job="app"} | json提取字段:
{job="app"} | json | level="error"使用字段值:
{job="app"} | json | unwrap latency [1m]第二种方法:正则表达式解析。
{job="app"} | regexp \使用提取的字段:
{job="app"} | regexp \第三种方法:模式解析(Pattern)。
{job="app"} | pattern \提取结构化字段:
{job="app"} | pattern \解析流程: 原始日志 → 解析方法(JSON/正则/模式)→ 提取字段 → 过滤/聚合。
日志解析的优势:
- 结构化查询: 可以基于字段查询。
- 精确过滤: 可以基于字段值过滤。
- 聚合分析: 可以基于字段值聚合。
使用日志解析,可以更好地分析日志。
本节小结
在本节中,我们学习了 LogQL 查询语言:
第一个是基本查询语法。 {标签选择器} 操作符 过滤表达式。掌握基本语法很重要。
第二个是过滤条件。 |=(包含)、!=(不包含)、|(正则匹配)、!(正则不匹配)。合理使用过滤条件,可以快速找到需要的日志。
第三个是聚合操作。 count_over_time、rate、sum、avg、max、min。使用聚合操作,可以分析日志的趋势和模式。
第四个是日志解析。 JSON、正则表达式、模式解析。使用日志解析,可以更好地分析日志。
LogQL 功能总结: LogQL 包括基本查询(标签选择器)、过滤条件(内容过滤)、聚合操作(统计分析)、日志解析(结构化查询)。这些功能组合在一起,构成了强大的日志查询能力。
这就是 LogQL 查询语言。掌握 LogQL,可以高效查询和分析日志。
在下一节,我们将学习在 Dashboard 中可视化日志。学习如何创建日志面板。