跳到主要内容

LogQL数值运算

LogQL是Grafana Loki的查询语言,它不仅支持日志过滤和搜索,还提供了强大的数值运算功能。通过数值运算,你可以对日志中的数字字段进行计算、聚合和分析,从而提取更有价值的信息。本文将详细介绍LogQL中的数值运算功能,帮助初学者掌握这一重要技能。

介绍

LogQL的数值运算允许你对日志中的数字字段进行各种计算,包括加减乘除、聚合函数(如求和、平均值)等。这些功能特别适用于监控和分析场景,例如计算请求延迟、错误率或吞吐量。

数值运算通常与范围向量(range vector)聚合操作符结合使用。以下是LogQL数值运算的核心概念:

  1. 算术运算符+, -, *, /, %, ^(幂运算)
  2. 比较运算符==, !=, >, <, >=, <=
  3. 聚合函数sum, avg, min, max, count, stddev, stdvar
  4. 逻辑运算符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的数值运算功能为日志分析提供了强大的灵活性,支持:

  • 基本算术运算(加减乘除)
  • 聚合计算(求和、平均值等)
  • 比较和逻辑运算
  • 结合范围向量实现时间序列分析

通过实际案例(如错误率计算、延迟监控),你可以将这些功能应用到真实的运维和监控场景中。


练习与资源

  1. 练习:尝试编写一个LogQL查询,计算某服务的P99延迟(提示:使用 quantile(0.99, ...))。
  2. 官方文档Grafana Loki LogQL文档
  3. 延伸阅读:学习LogQL的模式匹配标签过滤