Grafana LOKI配置:Top客户端日志摄入告警创建与单应用推量统计
各应用向Loki推送日志总量的统计方案
按实现成本从低到高,有3种可直接落地的方案:
- 基于Loki内置Prometheus指标统计(日常使用优先选)
Loki的distributor日志接收入口组件,默认会暴露loki_distributor_bytes_received_total指标,记录入口接收到的所有日志字节总数,自带日志流公共标签(比如应用名、环境、租户ID等)。直接用PromQL查询即可得到各应用的日志推送总量:
要换算成GB单位,在查询末尾加# 统计近24小时各应用的日志总摄入量,单位为字节,把app替换为你环境中标识应用的标签名即可(常见的有service、application) sum by (app) (rate(loki_distributor_bytes_received_total[24h]) * 86400)/ 1024^3即可。这个方案查询速度最快,对集群压力最小,适合做日常监控大盘、常规统计。 - 基于LogQL原生查询统计(适合明细核对场景)
如果需要加自定义过滤条件(比如排除测试环境日志、只统计ERROR级别日志量),可以直接用LogQL的日志区间统计函数查询:
这个方案统计逻辑最灵活,但日志量过大时查询开销较高,适合临时核对数据、做精细化维度统计。# 统计近24小时所有应用的日志字节总量,按app标签聚合 sum by (app) (bytes_over_time({job=~".+"}[24h])) - 多租户场景的客户端统计
如果Loki开启了多租户模式,直接按指标里的tenant维度聚合即可,不需要依赖应用标签,就能得到每个租户(客户端)的总日志推送量。
日志发送量Top客户端每日摄入告警规则配置
直接基于上述统计逻辑配置告警规则即可,根据现有告警链路选对应配置方式:
- 基于Prometheus告警规则(可直接对接现有Alertmanager链路)
规则示例如下:
参数调整说明:groups: - name: loki_ingestion_alerts rules: - alert: TopClientHighLogIngestion expr: | # 取近24小时日志摄入量Top5、且单日摄入量超过10GB的应用 topk(5, sum by (app) (rate(loki_distributor_bytes_received_total[24h]) * 86400 / 1024^3)) > 10 for: 5m labels: severity: warning annotations: summary: "高日志量Top客户端告警" description: "应用 {{ $labels.app }} 近24小时日志摄入量为 {{ $value | humanize }}GB,进入全平台日志发送量Top5,超过10GB阈值,请排查是否存在异常刷日志、日志级别配置错误问题。"topk(5, ...)里的数字是要监控的Top排名范围,要监控Top10就改成10- 末尾的
>10是单日摄入量阈值,单位为GB,根据集群实际容量调整即可 - 如果需要做每日固定播报(不需要阈值,每天凌晨固定推送前一天Top N客户端的摄入量),去掉阈值判断,配合Alertmanager的定时路由规则,固定在每天凌晨0点10分触发即可。
- 基于Loki Ruler原生告警规则
如果不想依赖Prometheus,直接把统计逻辑换成LogQL版本的查询,写到Loki Ruler的规则文件里即可,告警触发逻辑、参数调整方式和上述规则完全一致。
注意:如果查询时发现指标里没有用来标识应用的标签,检查Loki的distributor_metrics_label_prefix配置项,把对应应用标签的前缀加入允许列表即可——默认配置下Loki不会把所有日志标签都挂到监控指标上,避免指标基数过高影响性能。
内容的提问来源于stack exchange,提问作者vyshak m
相关产品推荐
相关产品推荐

