0%

Loki日志统计

Metrics Queries

Metrics Queries 可以用来计算日志错误率或最近一段时间日志最多的前 N 个日志源.

LogQL 范围聚合查询函数

函数 说明
rate(log-range) 计​​算每秒的条目数
count_over_time(log-range) 计算给定范围内每个日志流的条目
bytes_rate(log-range) 计算每个流每秒的字节数
bytes_over_time(log-range) 计算给定范围内每个日志流使用的字节数
absent_over_time(log-range) 如果传递给它的范围向量有任何元素,则返回一个空向量;如果传递给它的范围向量没有元素,则返回一个值为 1 的 1 元素向量。(absent_over_time对于在一段时间内不存在标签组合的时间序列和日志流时发出警报很有用。)

示例

# 计算 MySQL 作业最后五分钟内的所有日志行。
count_over_time({job="mysql"}[5m])
# MySQL 作业在每台主机的最后几分钟内所有非超时错误的每秒速率,并且仅包括持续时间超过 10 秒的错误
sum by (host) (rate({job="mysql"} |= "error" != "timeout" | json | duration > 10s [1m]))

内置聚合运算符

函数 说明
sum 计​​算标签的总和
avg 计算标签的平均值
min 在标签上选择最小值
max 选择最大标签
stddev 计算标签的总体标准差
stdvar 计算标签的总体标准方差
count 计​​算向量中的元素个数
topk 通过样本值选择最大的 k 个元素
bottomk 通过样本值选择最小的 k 个元素

示例

# 获取日志吞吐量最高的前 10 个应用程序
topk(10,sum(rate({region="us-east1"}[5m])) by (name))

# 获取 k8s ns1 命名空间下日志输出量前 10 的 Pod
topk(10,sum(rate({namespace="ns1"}[5m])) by (pod))

# 获取指定作业的最后五分钟的日志行数,按级别分组
sum(count_over_time({job="mysql"}[5m])) by (level)

# /home按区域获取对 NGINX 日志端点的 HTTP GET 请求速率
avg(rate(({job="nginx"} |= "GET" | json | path="/home")[10s])) by (region)

参考链接