Prometheus AlertManager - 根据路由向不同客户端发送警报
Prometheus AlertManager - Send Alerts to different clients based on routes
我有 2 个服务 A 和 B 我想监控。此外,我在 AlertManager 配置文件中以 receivers
的形式有 2 个不同的通知渠道 X 和 Y。
如果服务 A 出现故障,我想发送通知 X 并希望通知 Y 如果服务 B 出现故障。我怎样才能实现我的配置?
我的 AlertManager YAML 文件是:
route:
receiver: X
receivers:
- name: X
email_configs:
- name: Y
email_configs:
而alert.rule
个文件是:
groups:
- name: A
rules:
- alert: A_down
expr: expression
for: 1m
labels:
severity: critical
annotations:
summary: "A is down"
- name: B
rules:
- alert: B_down
expr: expression
for: 1m
labels:
severity: warning
annotations:
summary: "B is down"
配置大致如下所示(未测试):
route:
group_wait: 30s
group_interval: 5m
repeat_interval: 2h
receiver: 'default-receiver'
routes:
- match:
alertname: A_down
receiver: X
- match:
alertname: B_down
receiver: Y
想法是,每个 route
字段都可以有一个 routes
字段,您可以在其中放置不同的配置,如果 match
中的标签符合条件,该配置就会启用.
为了澄清 - 在 Prometheus(Alertmanager 和 Prometheus 集成)中处理警报的一般流程是这样的:
SomeErrorHappenInYourConfiguredRule(Rule) -> RouteToDestination(Route)
-> TriggeringAnEvent(Reciever)-> GetAMessageInSlack/PagerDuty/Mail/etc...
例如:
if my aws machine cluster production-a1 is down, I want to trigger an event sending "pagerDuty" and "Slack" to my team with the relevant error.
有 3 个文件对于在您的 prometheus 系统上配置警报很重要:
- alertmanager.yml - 你的配置 routes (获取触发
错误)和 receivers(如何处理这个错误)
- rules.yml - 此规则将包含所有阈值和规则
您将在系统中定义。
- prometheus.yml - 将您的规则集成到路由和接收器中的全局配置(以上两个)。
我附上了一个虚拟示例为了演示这个想法,在这个示例中我将在我的机器上观察过载(使用安装在它上面的节点导出器):
在 /var/data/prometheus-stack/alertmanager/alertmanager.yml
global:
# The smarthost and SMTP sender used for mail notifications.
smtp_smarthost: 'localhost:25'
smtp_from: 'JohnDoe@gmail.com'
route:
receiver: defaultTrigger
group_wait: 30s
group_interval: 5m
repeat_interval: 6h
routes:
- match_re:
service: service_overload
owner: ATeam
receiver: pagerDutyTrigger
receivers:
- name: 'pagerDutyTrigger'
pagerduty_configs:
- send_resolved: true
routing_key: <myPagerDutyToken>
在 /var/data/prometheus-stack/prometheus/yourRuleFile.yml
添加一些规则
groups:
- name: alerts
rules:
- alert: service_overload_more_than_5000
expr: (node_network_receive_bytes_total{job="someJobOrService"} / 1000) >= 5000
for: 10m
labels:
service: service_overload
severity: pager
dev_team: myteam
annotations:
dev_team: myteam
priority: Blocker
identifier: '{{ $labels.name }}'
description: 'service overflow'
value: '{{ humanize $value }}%'
在 /var/data/prometheus-stack/prometheus/prometheus.yml 添加此代码段以集成 alertmanager:
global:
...
alerting:
alertmanagers:
- scheme: http
static_configs:
- targets:
- "alertmanager:9093"
rule_files:
- "yourRuleFile.yml"
...
注意这个例子的关键点是service_overload,它将规则连接并绑定到正确的接收者中。
重新加载配置(重新启动服务或停止并启动您的 docker 容器)并测试它,如果配置正确,您可以在 http://your-prometheus-url:9090/alerts
我有 2 个服务 A 和 B 我想监控。此外,我在 AlertManager 配置文件中以 receivers
的形式有 2 个不同的通知渠道 X 和 Y。
如果服务 A 出现故障,我想发送通知 X 并希望通知 Y 如果服务 B 出现故障。我怎样才能实现我的配置?
我的 AlertManager YAML 文件是:
route:
receiver: X
receivers:
- name: X
email_configs:
- name: Y
email_configs:
而alert.rule
个文件是:
groups:
- name: A
rules:
- alert: A_down
expr: expression
for: 1m
labels:
severity: critical
annotations:
summary: "A is down"
- name: B
rules:
- alert: B_down
expr: expression
for: 1m
labels:
severity: warning
annotations:
summary: "B is down"
配置大致如下所示(未测试):
route:
group_wait: 30s
group_interval: 5m
repeat_interval: 2h
receiver: 'default-receiver'
routes:
- match:
alertname: A_down
receiver: X
- match:
alertname: B_down
receiver: Y
想法是,每个 route
字段都可以有一个 routes
字段,您可以在其中放置不同的配置,如果 match
中的标签符合条件,该配置就会启用.
为了澄清 - 在 Prometheus(Alertmanager 和 Prometheus 集成)中处理警报的一般流程是这样的:
SomeErrorHappenInYourConfiguredRule(Rule) -> RouteToDestination(Route) -> TriggeringAnEvent(Reciever)-> GetAMessageInSlack/PagerDuty/Mail/etc...
例如:
if my aws machine cluster production-a1 is down, I want to trigger an event sending "pagerDuty" and "Slack" to my team with the relevant error.
有 3 个文件对于在您的 prometheus 系统上配置警报很重要:
- alertmanager.yml - 你的配置 routes (获取触发 错误)和 receivers(如何处理这个错误)
- rules.yml - 此规则将包含所有阈值和规则 您将在系统中定义。
- prometheus.yml - 将您的规则集成到路由和接收器中的全局配置(以上两个)。
我附上了一个虚拟示例为了演示这个想法,在这个示例中我将在我的机器上观察过载(使用安装在它上面的节点导出器): 在 /var/data/prometheus-stack/alertmanager/alertmanager.yml
global:
# The smarthost and SMTP sender used for mail notifications.
smtp_smarthost: 'localhost:25'
smtp_from: 'JohnDoe@gmail.com'
route:
receiver: defaultTrigger
group_wait: 30s
group_interval: 5m
repeat_interval: 6h
routes:
- match_re:
service: service_overload
owner: ATeam
receiver: pagerDutyTrigger
receivers:
- name: 'pagerDutyTrigger'
pagerduty_configs:
- send_resolved: true
routing_key: <myPagerDutyToken>
在 /var/data/prometheus-stack/prometheus/yourRuleFile.yml
添加一些规则groups:
- name: alerts
rules:
- alert: service_overload_more_than_5000
expr: (node_network_receive_bytes_total{job="someJobOrService"} / 1000) >= 5000
for: 10m
labels:
service: service_overload
severity: pager
dev_team: myteam
annotations:
dev_team: myteam
priority: Blocker
identifier: '{{ $labels.name }}'
description: 'service overflow'
value: '{{ humanize $value }}%'
在 /var/data/prometheus-stack/prometheus/prometheus.yml 添加此代码段以集成 alertmanager:
global:
...
alerting:
alertmanagers:
- scheme: http
static_configs:
- targets:
- "alertmanager:9093"
rule_files:
- "yourRuleFile.yml"
...
注意这个例子的关键点是service_overload,它将规则连接并绑定到正确的接收者中。
重新加载配置(重新启动服务或停止并启动您的 docker 容器)并测试它,如果配置正确,您可以在 http://your-prometheus-url:9090/alerts