云原生监控告警实战
Posted xingoo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云原生监控告警实战相关的知识,希望对你有一定的参考价值。
继昨天的监控之后,就需要针对特殊指标定义告警。在云原生生态中,可以直接基于Prometheus的另一个组件alertmanager来实现告警机制。
alertmanager原理
原理上,prometheus会根据告警规则判断并检测告警信息,然后发送到alertmanager;alertmanager根据配置决定如何处理告警。
1 API组件:负责接收prometheus发送的请求信息
2 Alert Provider组件:负责把告警信息存储起来
3 Dispatcher组件:通过订阅的方式从provider获取告警,根据yaml配置分发到不同分组
4 Notifier Pipeline组件:基于责任链模式维护抑制、静默、去重等逻辑
5 Silence Provider组件:存储告警并去重
6 Noify Provider组件:记录日志并广播给其他的alertmanager避免重复告警
prometheus配置
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets: [ 'localhost:9093' ]
rule_files:
- "job_rules.yml"
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: [ 'localhost:9090' ]
- job_name: 'flink'
static_configs:
- targets: [ 'jobmanager:9999', 'taskmanager:9999']
配置job_rules.yml文件,设置告警规则:
groups:
- name: test-rules
rules:
- alert: JobDown # 告警名称
expr: data_operator_session > 0 # 告警的判定条件,参考Prometheus高级查询来设定
for: 30s # 满足告警条件持续时间多久后,才会发送告警
labels: #标签项
team: node
annotations: # 解析项,详细解释告警信息
summary: "{{$labels.xxx}}"
description: "{{$labels.xxx}}"
注意,$labels
是prometheus中指标的引用,比如触发告警的指标如下:test{a=1,b=2,} 3
,那么就可以使用$labels.a来使用变量a。
然后使用docker命令启动prometheus:
docker run -p 9090:9090
-v prometheus.yml:/etc/prometheus/prometheus.yml
-v job_rules.yml:/etc/prometheus/job_rules.yml
prom/prometheus:v2.25.0
alertmanager配置
alertmanager.yaml配置如下:
global:
resolve_timeout: 5m
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'web.hook'
receivers:
- name: 'web.hook'
webhook_configs:
- url: 'http://xxxx:9091/'
启动命令如下:
docker run -p 9093:9093
-v alertmanager.yml:/etc/alertmanager/alertmanager.yml
prom/alertmanager:v0.21.0
--config.file=/etc/alertmanager/alertmanager.yaml
--cluster.advertise-address=0.0.0.0:9093
启动prometheus后可以看到alert页面有告警规则:
当触发告警后alertmanager页面会出现相应的内容消息:
以上是关于云原生监控告警实战的主要内容,如果未能解决你的问题,请参考以下文章
云原生架构-监控告警从openfalcon到Prometheus
云原生之Docker实战使用docker部署nightingale运维监控平台