「OBSERVING-SYSTEM」- Loki | 日志告警 | Alerting and Recording Rules

问题描述

在日志中,如果出现错误信息(ERROR),我们希望能够通过告警信息发送给对应的人员;

WIP ! Grafana Loki 的规则及告警的使用方法;
WIP ! Grafana Loki 配置告警规则,并在告警中显示日志;

该笔记将记录:在 Grafana Loki 中,启用日志告警的方法,以及相关问题的解决办法;

解决方案

通过 Loki 的 Ruler 组件,能够实现日志的告警及记录(统计)功能。

原理简述

Grafana Loki 将周期查询日志,当出现满足条件的日志时,创建告警信息并发送到 Alertmanager 服务;

参考 Alerting and recording rules 文档,以获取关于告警的详细说明;

开启 Ruler 组件

我们通过 Helm Chart(grafana/loki-distributed)部署 Loki 服务,所以相关配置将与该 Chart 相关;

1)配置 directories 参数,增加相关 Rule 配置;

2)配置 ruler.alertmanager_url 参数,以指定 Alertmanager 地址;

关于 Ruler 组件:
问题描述:msg=”error running loki” err=”mkdir /etc/loki/rules: read-only file system…
解决方案:需要配置 ruler.directories 参数
[loki] msg=”error running loki” err=”mkdir /rules: read-only file” · Issue #577
[loki-distributed] Ruler pod won’t start. err=”mkdir /etc/loki/rules…” · Issue #537
helm-charts/charts/loki-distributed at main · grafana/helm-charts

常用配置

interval,控制 expr 的执行周期

针对每条错误进行告警:count_over_time({service=”xxx”, level=”ERROR”}[1m]) > 0
Alert on every log entry – Grafana Loki – Grafana Labs Community Forums

错误日志告警
Add log message in alert · Issue #5844 · grafana/loki

  # -- Directories containing rules files
  directories:
    fake:
      rules_container.txt: |
        groups:
          - name: fire_all_error
            interval: 30s
            rules:
              - alert: ContainerErrorLogDetected
                expr: "count_over_time({container=\"java-log-generator\"} |= `ERROR` | pattern `<message>` [30s])"
                for: 0m
                labels:
                  severity: warning
                annotations:
                  summary: Container Error Log Detected
                  description: "{{ $labels.message }}"

常见问题处理

调试工具

# 11/07/2023 现在,官方暂未提供相关调试工具:Feature request: Loki alert rule tests · Issue #7655 · grafana/loki