Loki监控告警规则:基于LogQL的告警配置
在现代分布式系统中,日志监控和告警是保障系统稳定性的关键环节。Loki作为开源的日志聚合系统,通过LogQL(Log Query Language)提供了强大的日志查询能力,结合Prometheus的告警规则机制,可以实现灵活高效的监控告警配置。本文将详细介绍如何基于LogQL创建Loki告警规则,帮助运维和开发人员及时发现并解决系统问题。
告警规则基础
Loki的告警规则基于Prometheus的告警规则格式,通过YAML文件定义,包含告警组(groups)、规则名称(name)、查询表达式(expr)、持续时间(for)、标签(labels)和注释(annotations)等核心元素。官方提供的规则文件production/loki-mixin-compiled/rules.yaml和production/loki-mixin-compiled/alerts.yaml包含了丰富的预设规则,可作为配置参考。
告警规则文件结构
一个典型的Loki告警规则文件结构如下:
groups:
- name: loki_alerts # 告警组名称
rules:
- alert: LokiRequestErrors # 告警名称
expr: | # LogQL查询表达式
100 * sum(rate(loki_request_duration_seconds_count{status_code=~"5.."}[2m])) by (cluster, namespace, job, route)
/
sum(rate(loki_request_duration_seconds_count[2m])) by (cluster, namespace, job, route)
> 10
for: 15m # 持续时间
labels:
severity: critical # 告警级别
annotations:
summary: "Loki请求错误率过高" # 告警摘要
description: "{{ $labels.cluster }} {{ $labels.job }} {{ $labels.route }} 错误率为 {{ printf '%.2f' $value }}%" # 告警详情
LogQL查询表达式
LogQL是Loki的查询语言,支持两种查询模式:日志查询(Log queries)和指标查询(Metric queries)。告警规则主要使用指标查询,通过聚合日志数据生成时序指标,再基于指标阈值触发告警。
常用聚合函数
rate(metric[duration]):计算指标在指定时间窗口内的每秒增长率。sum(metric) by (label):按标签分组求和。histogram_quantile(quantile, metric):计算直方图的分位数。
例如,计算99%请求的延迟:
histogram_quantile(0.99, sum(rate(loki_request_duration_seconds_bucket[1m])) by (le, cluster, job))
状态码过滤
通过status_code标签过滤HTTP状态码,例如筛选5xx错误:
loki_request_duration_seconds_count{status_code=~"5.."}
实战告警规则配置
1. 请求错误率告警
当Loki请求错误率超过10%并持续15分钟时触发 critical 级别告警:
- alert: LokiRequestErrors
expr: |
100 * sum(rate(loki_request_duration_seconds_count{status_code=~"5.."}[2m])) by (cluster, namespace, job, route)
/
sum(rate(loki_request_duration_seconds_count[2m])) by (cluster, namespace, job, route)
> 10
for: 15m
labels:
severity: critical
annotations:
summary: "Loki请求错误率过高"
description: "{{ $labels.cluster }} {{ $labels.job }} {{ $labels.route }} 错误率为 {{ printf '%.2f' $value }}%,持续15分钟"
2. 请求延迟告警
当99%的请求延迟超过1秒时触发告警:
- alert: LokiRequestLatency
expr: |
cluster_namespace_job_route:loki_request_duration_seconds:99quantile{route!~"(?i).*tail.*|/schedulerpb.SchedulerForQuerier/QuerierLoop"} > 1
for: 15m
labels:
severity: warning
annotations:
summary: "Loki请求延迟过高"
description: "{{ $labels.cluster }} {{ $labels.job }} {{ $labels.route }} 99分位延迟为 {{ printf '%.2f' $value }}秒"
3. 服务崩溃告警
当Loki服务出现panic时立即触发 critical 级别告警:
- alert: LokiRequestPanics
expr: |
sum(increase(loki_panic_total[10m])) by (cluster, namespace, job) > 0
labels:
severity: critical
annotations:
summary: "Loki服务发生Panic"
description: "{{ $labels.cluster }} {{ $labels.job }} 在10分钟内发生了 {{ printf '%.0f' $value }} 次Panic"
告警规则管理
规则文件加载
Loki通过-rules-config.file参数指定告警规则文件路径,或通过-rules-config.directory指定规则目录。在Docker环境中,可通过挂载配置文件实现规则加载,例如:
# loki-local-config.yaml
limits_config:
retention_period: 72h
ruler:
storage:
type: local
local:
directory: /etc/loki/rules
rule_path: /tmp/loki/rules-temp
alertmanager_url: http://alertmanager:9093
规则验证
使用Loki提供的工具验证规则文件语法:
logcli rules check /path/to/rules.yaml
总结
基于LogQL的Loki告警规则配置是监控系统稳定性的重要手段。通过本文介绍的基础结构、查询表达式和实战案例,用户可以快速构建适合自身业务的告警体系。建议结合官方预设规则production/loki-mixin-compiled/alerts.yaml,并根据实际需求调整阈值和持续时间,以达到最佳监控效果。
未来,随着Loki的不断迭代,告警功能将更加完善,为分布式系统监控提供更强大的支持。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



