LogQL数值运算
LogQL是Grafana Loki的查询语言,它不仅支持日志过滤和搜索,还提供了强大的数值运算功能。通过数值运算,你可以对日志中的数字字段进行计算、聚合和分析,从而提取更有价值的信息。本文将详细介绍LogQL中的数值运算功能,帮助初学者掌握这一重要技能。
介绍
LogQL的数值运算允许你对日志中的数字字段进行各种计算,包括加减乘除、聚合函数(如求和、平均值)等。这些功能特别适用于监控和分析场景,例如计算请求延迟、错误率或吞吐量。
数值运算通常与范围向量(range vector)和聚合操作符结合使用。以下是LogQL数值运算的核心概念:
- 算术运算符:
+
,-
,*
,/
,%
,^
(幂运算) - 比较运算符:
==
,!=
,>
,<
,>=
,<=
- 聚合函数:
sum
,avg
,min
,max
,count
,stddev
,stdvar
- 逻辑运算符:
and
,or
,unless
基本算术运算
LogQL支持对数字字段进行基本的算术运算。假设你有一个日志字段 latency_ms
表示请求延迟(毫秒),以下是一些示例:
logql
# 将延迟从毫秒转换为秒
{app="myapp"} | json | latency_ms / 1000
输入日志示例:
json
{"app": "myapp", "latency_ms": 450, "status": 200}
输出结果:
0.45
提示
使用 | json
自动解析JSON格式的日志字段,然后直接引用字段名(如 latency_ms
)进行计算。
聚合函数
聚合函数用于对一组值进行计算。以下是一个计算每秒请求平均延迟的示例:
logql
sum(rate({app="myapp"} | json | latency_ms [1m])) by (service)
/
sum(rate({app="myapp"} | json [1m])) by (service)
备注
rate({...}[1m])
计算每秒的日志条目率。sum(...) by (service)
按服务名称分组求和。
实际案例:监控错误率
假设你需要监控某个服务的HTTP错误率(状态码≥500的比例),可以使用以下LogQL:
logql
# 计算错误率(错误请求数 / 总请求数)
sum(rate({app="myapp"} | json | status >= 500 [5m])) by (service)
/
sum(rate({app="myapp"} | json [5m])) by (service)
输出结果示例:
{service="auth"} 0.02 # 2%错误率
{service="api"} 0.01 # 1%错误率
使用比较运算符
LogQL支持比较运算符,用于过滤或标记特定条件的日志。例如,筛选延迟高于阈值的请求:
logql
{app="myapp"} | json | latency_ms > 1000
总结
LogQL的数值运算功能为日志分析提供了强大的灵活性,支持:
- 基本算术运算(加减乘除)
- 聚合计算(求和、平均值等)
- 比较和逻辑运算
- 结合范围向量实现时间序列分析
通过实际案例(如错误率计算、延迟监控),你可以将这些功能应用到真实的运维和监控场景中。
练习与资源
- 练习:尝试编写一个LogQL查询,计算某服务的P99延迟(提示:使用
quantile(0.99, ...)
)。 - 官方文档:Grafana Loki LogQL文档
- 延伸阅读:学习LogQL的模式匹配和标签过滤。