prometheus告警发送组件部署

本文详细介绍了如何在Prometheus中配置alertmanager发送告警到钉钉,包括alertmanager的部署、alertmanager.yml的配置以及prometheus-webhook-dingtalk的部署和配置示例。

一、前言

要实现Prometheus的告警发送需要通过alertmanager组件,当prometheus触发告警策略时,会将告警信息发送给alertmanager,然后alertmanager根据配置的策略发送到邮件或者钉钉中,发送到钉钉需要安装额外的prometheus-webhook-dingtalk组件,用于发送告警信息到钉钉中,如果是用邮件的话直接在alertmanager配置即可,不用安装额外组件

二、部署

这里就主要讲解发送告警信息到钉钉中的配置

2.1部署alertmanager

下载altermanager安装包,我这边下载的是0.25.0版本

下载路径:Releases · prometheus/alertmanager · GitHub

 mkdir /opt/alertmanager && cd /opt/alertmanager

tar -zxvf alertmanager-0.25.0.linux-amd64.tar.gz

mv alertmanager-0.25.0.linux-amd64 alertmanager

cd alertmanager && ls

配置系统管理启动alertmanager服务

vi /usr/lib/systemd/system/alertmanager.serivce

[Unit]
Description=alertmanager
After=network.target

[Service]
ExecStart=/opt/alertmanager/alertmanager/alertmanager --config.file=/opt/alertmanager/alertmanager/alertmanager.yml  #配置启动服务命令,指定配置文件
User=root

[Install]
WantedBy=multi-user.target

2.2部署prometheus-webhook-dingtalk

在部署前先配置好钉钉机器人,启用加签功能,复制webhook地址和加签密钥

下载prometheus-webhook-dingtalk安装包,我这边下载的是2.1.0版本

 下载路径:Releases · timonwong/prometheus-webhook-dingtalk · GitHub

mkdir /opt/dingtalk && cd /opt/dingtalk

tar -zxvf prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz

mv prometheus-webhook-dingtalk-2.1.0.linux-amd64 dingtalk

cd dingtalk && ls

复制重命名配置文件

cp  config.example.yml config.yml

编辑配置文件

vi config.yml

templates:
  - /opt/dingtalk/dingtalk/template.tmpl     #配置告警信息模板

targets:
  webhook1:
    url: https://oapi.dingtalk.com/robot/send?access_token=cfe1e0d1cfb457a31b20d6005785f5c7367542d5bd82725eb1b2f6738d0be418   #配置上面记录的钉钉机器人的webhook
    # secret for signature
    secret: SEC60b0e5076407b1d1d97c26afa2acb54edf7270b9e23826a65c3f085e48c5dcfd  #配置上面记录的钉钉机器人加签的密钥,下面的内容按照默认配置即可
  webhook2:
    url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx
  webhook_legacy:
    url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx
    # Customize template content
    message:
      # Use legacy template
      title: '{{ template "legacy.title" . }}'
      text: '{{ template "legacy.content" . }}'
  webhook_mention_all:
    url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx
    mention:
      all: true
  webhook_mention_users:
    url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx
    mention:
      mobiles: ['156xxxx8827', '189xxxx8325']

编辑告警模板

vi  /opt/dingtalk/dingtalk/template.tmpl

{{ define "__subject" }}
[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}]
{{ end }}
 
 
{{ define "__alert_list" }}{{ range . }}
---
{{ if .Labels.owner }}@{{ .Labels.owner }}{{ end }}
 
**告警主题**: {{ .Annotations.summary }}

**告警类型**: {{ .Labels.alertname }}
 
**告警级别**: {{ .Labels.severity }} 
 
**告警主机**: {{ .Labels.instance }} 
 
**告警信息**: {{ index .Annotations "description" }}
 
**告警时间**: {{ dateInZone "2006.01.02 15:04:05" (.StartsAt) "Asia/Shanghai" }}
{{ end }}{{ end }}
 
{{ define "__resolved_list" }}{{ range . }}
---
{{ if .Labels.owner }}@{{ .Labels.owner }}{{ end }}

**告警主题**: {{ .Annotations.summary }}

**告警类型**: {{ .Labels.alertname }} 
 
**告警级别**: {{ .Labels.severity }}
 
**告警主机**: {{ .Labels.instance }}
 
**告警信息**: {{ index .Annotations "description" }}
 
**告警时间**: {{ dateInZone "2006.01.02 15:04:05" (.StartsAt) "Asia/Shanghai" }}
 
**恢复时间**: {{ dateInZone "2006.01.02 15:04:05" (.EndsAt) "Asia/Shanghai" }}
{{ end }}{{ end }}
 
 
{{ define "default.title" }}
{{ template "__subject" . }}
{{ end }}
 
{{ define "default.content" }}
{{ if gt (len .Alerts.Firing) 0 }}
**====侦测到{{ .Alerts.Firing | len  }}个故障====**
{{ template "__alert_list" .Alerts.Firing }}
---
{{ end }}
 
{{ if gt (len .Alerts.Resolved) 0 }}
**====恢复{{ .Alerts.Resolved | len  }}个故障====**
{{ template "__resolved_list" .Alerts.Resolved }}
{{ end }}
{{ end }}
 
 
{{ define "ding.link.title" }}{{ template "default.title" . }}{{ end }}
{{ define "ding.link.content" }}{{ template "default.content" . }}{{ end }}
{{ template "default.title" . }}
{{ template "default.content" . }}

 配置系统管理启动prometheus-webhook-dingtalk服务

vi /usr/lib/systemd/system/dingtalk.service

[Unit]
Description=prometheus-webhook-dingtalk
After=network.target

[Service]
ExecStart=/opt/dingtalk/dingtalk/prometheus-webhook-dingtalk --config.file=/opt/dingtalk/dingtalk/config.yml
User=root

[Install]
WantedBy=multi-user.target

配置开机启动dingtalk服务

systemctl enable dingtalk && systemctl start dingtalk

查看钉钉服务端口

 netstat -tlpn

前面还没有配置和启动alertmanager服务,现在来编辑alertmanager配置文件

vi /opt/alertmanager/alertmanager/alertmanager.yml

route:
  group_by: ['dingding']   #配置告警分组的标签
  group_wait: 30s          #配置项定义分组等待时间,当一组告警被触发后,在这个时间段内,其他属于同一组的告警也会被等待。这可以用于在一定时间内收集同一组告警,以便一次性发送通知
  group_interval: 5m       #配置项定义分组间隔时间,一旦一个告警组的首个告警触发了通知,等待指定的间隔时间后,即使组内有其他告警,也会重新触发通知。这可以避免过于频繁地发送通知
  repeat_interval: 1h       #配置项定义重复通知的间隔时间,在一组告警已经触发过一次通知后,过了指定的间隔时间,如果该组内的告警仍然处于触发状态,会再次触发通知。这可以用于周期性地提醒用户
  receiver: 'web.hook'   #配置默认的接收者名称,用于定义接收告警通知的目标
  routes:
  - receiver: 'web.hook'  #定义一个路由规则,将告警发送到名为 'web.hook' 的接收者
    match_re:              #使用正则表达式来匹配告警标签,该配置是匹配所有告警
      alertname: ".*"
receivers:
  - name: 'web.hook'   #定义名为 'web.hook' 的接收者
    webhook_configs:    #指定接收者的配置
      - url: 'http://10.1.60.118:8060/dingtalk/webhook1/send'  #指定启用的钉钉组件服务为接收者,webhook1也是刚刚dingtalk配置文件的指定项
        send_resolved: true     #表示也会发送已解决的告警通知
inhibit_rules:     #- source_match: 和 - target_match: 定义了一条抑制规则,这条规则表示当源告警的标签中 severity 是 'critical' 时,会抑制目标告警中 severity 是 'warning' 的告警
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']  #指定了需要相等的标签列表,只有这些标签相同的告警才会进行抑制

alertmanager服务开机启动

systemctl enable alertmanager && systemctl start alertmanager

查看altermanager服务

netstat -tlpn

9094是alertmanager集群服务的通信端口,9093是alertmanager的服务端口

 访问alertmanager服务

http://10.1.60.118:9093

 在Prometheus的配置文件中配置alertmanager服务地址并配置告警规则就可以使用alertmanager服务实现钉钉告警了

### 配置 Prometheus 发送告警通知 为了使 Prometheus 能够发送告警通知,需配置告警规则并集成 Alertmanager 来负责实际的通知分发。 #### 创建告警规则文件 创建一个 YAML 文件用于定义告警规则。此文件应放置在 Prometheus 可访问的位置,并且路径应在 Prometheus 的配置文件中指定。告警规则通常包含如下结构: ```yaml groups: - name: example rules: - alert: HighRequestLatency expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.1 for: 10m labels: severity: page annotations: summary: "High request latency on {{ $labels.instance }}" description: "{{ $labels.instance }} has a median request latency above 0.1s (current value: {{ $value }})" ``` 上述代码片段展示了如何编写一条简单的告警规则[^4]。 #### 安装与配置 Alertmanager Alertmanager 是用来处理由 Prometheus 发出的告警并将这些告警路由至不同的接收端的服务组件。按照官方文档指导完成 Alertmanager 的部署之后,在 `alerting` 模块下更新 Prometheus 主配置文件 (`prometheus.yml`) ,加入指向 Alertmanager 实例的信息: ```yaml alerting: alertmanagers: - static_configs: - targets: - 'localhost:9093' # 替换成实际地址 ``` 接着还需编辑 Alertmanager 的配置文件(`alertmanager.yml`)来设定具体的告警通知方式,比如电子邮件、Webhook 或者即时通讯工具等。如果希望向钉钉群组发送消息,则可以参照特定指南进行相应设置[^3]。 #### 加载新规则并验证效果 每当更改了告警规则或其他配置项后,记得重启或让 Prometheus 进行热重载以便应用最新的变更。确认无误后,可以通过触发一次测试性的事件来看看是否能正常接收到预期形式的通知[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值