Loki在2.0 版本以后就提供了报警功能,其包含了一个Ruler组件,可以持续查询一个 rules规则,并将超过阈值的事件推送给 AlertManager 或者其他 Webhook 服务。这是 Loki 自带的报警功能,且完全兼容AlertManager。
启用Ruler组件需要在配置文件中加入如下配置:
ruler:
alertmanager_url: http://alertmanager:9093 # alertmanager地址
enable_alertmanager_v2: true
enable_api: true # 启用loki rules API
enable_sharding: true # 对rules分片,支持ruler多实例
ring: # ruler服务的一致性哈希环配置,用于支持多实例和分片
kvstore:
store: inmemory
rule_path: /data/loki/tmp_rules # rules规则文件临时存储路径
storage: # rules规则存储,主要支持本地存储和对象存储
type: local
local:
directory: /data/loki/rules # rules规则文件存储路径
flush_period: 1m # rules规则加载时间
上述配置文件中,通过loki.config.ruler对Ruler组件进行配置,其中,ruler.rule_path这个路径用于Loki临时存储ruler规则,需要用户提前创建好。ruler.storage.local.directory这个路径用于存储用户配置的rules规则,同样需要用户提前创建好,且需要在这个路径下继续创建一个“fake”名称的文件夹,这个“fake”是Loki以单租户模式运行时默认的租户Id。所以,根据上述配置文件,rulers规则文件需要放在/data/loki/rules/fake下。
Loki的rulers规则文件与Prometheus完全兼容,唯一的区别在于查询语句不同,在Loki中使用LogQL来查询日志,一个典型的 rules 配置文件如下所示:
groups:
- name: <string> # 组名称
rules:
- alert: <string> # Alert名称
expr: <string> # LogQL查询语句
[ for: <duration> | default = 0s ] # 产生告警的持续时间
labels: # 自定义告警事件的label
[ <labelname>: <tmpl_string> ]
annotations: # 告警时间的注释
[ <labelname>: <tmpl_string> ]
根据上述rules配置文件规则,可以配置一个如下所示的规则实例:表示对于app="uav"业务,日志的错误率大于5%会触发告警。
groups:
- name: should_fire
rules:
- alert: HighPercentageError
expr: |
sum(rate({app="uav"} |= "error" [5m])) by (job) / sum(rate({app="uav"}[5m])) by (job) > 0.05
for: 10m
labels:
severity: warning
annotations:
summary: High request latency
上述rules规则文件配置好以后,放入/data/loki/rules/fake文件夹下,Loki就可以读取到rules规则,在下面Loki日志中可以看到配置的告警规则信息触发:
当触发告警时,会根据配置好的Alertmanager地址将告警信息发送到Alertmanager中,Alertmanager再根据配置的邮箱地址发送到指定邮箱中,如下图所示:
链接:移动云开发者社区
来源:移动云官网开发者社区