部署alertmanager及配置钉钉告警(下)

一、安装Alertmanager
step 1.下载

wget https://github.com/prometheus/alertmanager/releases/download/v0.25.1/alertmanager-0.25.1.linux-amd64.tar.gz

step 2.安装

tar -xzf  alertmanager-0.25.1.linux-amd64.tar.gz     -C  /opt/
cd  /opt
mv   alertmanager-0.25.1.linux-amd64/   alertmanager
chown -R  prometheus:prometheus /opt/alertmanager/

step 3.创建服务脚本systemd管理
(/opt/alertmanager/data如果没有这个data就自己创建一个data目录)

vim /usr/lib/systemd/system/alertmanager.service

[Unit]
Description=Alertmanager for Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/opt/alertmanager/alertmanager \
  --config.file=/opt/alertmanager/alertmanager.yml \
  --storage.path=/opt/alertmanager/data
Restart=always

[Install]
WantedBy=multi-user.target

step 4.启动

systemctl daemon-reload
systemctl enable alertmanager
systemctl start  alertmanager
systemctl status alertmanager

手动启动命令(可做测试),这里不需要

./alertmanager --config.file=alertmanager.yml

在浏览器输入192.168.242.150::9093即可访问web页面
在这里插入图片描述

二、钉钉告警
1、在钉钉创建群聊,添加机器人–>自定义机器人
2、设置机器人名称,安全选择“加签”,记录Webhook地址和加签秘钥
3、修改prometheus配置文件

vim   /opt/prometheus/prometheus.yml
# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets: ['localhost:9093']
          # - alertmanager:9093
#指定规则文件          
rule_files:
 - "/opt/prometheus/rules/*.yml"

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
#rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"
    
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9090"]
  - job_name: 'node'
    static_configs:
      - targets: ['192.168.242.151:9101']

4 、创建目录编写规则yml文件

vim  /opt/prometheus/rules/node.yml

groups:
# 报警组组名称
- name: alters
  #报警组规则
  rules:
   #告警名称,需唯一
  - alert: cpu使用率大于75%
    #promQL表达式
    expr: sum(avg without (cpu)(irate(node_cpu_seconds_total{mode!='idle'}[5m]))) by (instance) > 0.75
    #满足此表达式持续时间超过for规定的时间才会触发此报警
    for: 1m
    labels:
      #严重级别
      severity: warning
    annotations:
     #发出的告警标题
      summary: "实例 {{ $labels.instance }} CPU 使用率过高"
      #发出的告警内容
      description: "实例{{ $labels.instance }} CPU 使用率超过 75% (当前值为: {{ $value }})"
  - alert: 内存使用率大于90%
    expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes)/node_memory_MemTotal_bytes > 0.90
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "实例 {{ $labels.instance }} 内存使用率过高"
      description: "实例 {{ $labels.instance }} 内存使用率 90% (当前值为: {{ $value }})"
vim /opt/prometheus/rules/node_alters.yml

groups:
- name: Alerthost
  rules:
  - alert: 服务器宕机
    expr: avg by (instance) (up{job="host"}) == 0
    for: 15s       #控制在触发告警之前,测试表达式的值必须为true的时长
    labels:
      severity: '突发事件'
    annotations:
      description: "实例 {{ $labels.instance }} 服务器已宕机,请进行检查."
      summary: "{{ $labels.instance }} 机器已经宕机超过15秒"
  - alert: 磁盘使用率大于80%
    expr: 100 - (node_filesystem_free_bytes{mountpoint="/",fstype=~"ext4|xfs"} / node_filesystem_size_bytes{fstype=~"ext4|xfs"} * 100) > 80
    for: 2m
    labels:
      severity: warning
    annotations:
      description: "{{ $labels.instance  }} : {{ $labels.job  }} :{{ $labels.mountpoint  }} 这个分区使用大于百分之80% (当前值:{{ $value }})"
      summary: "Instance {{ $labels.instance  }} :{{ $labels.mountpoint }} 分区使用率过高"

5、访问普罗米页面,看是否添加成功
在这里插入图片描述

6、重启Prometheus

pkill prometheus
cd /usr/local/prometheus
nohup ./prometheus --config.file=prometheus.yml > prometheus.log 2>&1 &

7、安装钉钉告警插件

cd /opt
wget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v2.1.0/prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz
tar xvf prometheus-webhook-dingtalk-*.linux-amd64.tar.gz

mv prometheus-webhook-dingtalk-*.linux-amd64 /usr/local/prometheus-webhook-dingtalk

8、配置prometheus-webhook-dingtalk

cd /usr/local/prometheus-webhook-dingtalk

cp config.example.yml config.yml

url和secret填刚才记录的钉钉机器人的Webhook地址和加签秘钥

vim config.yml
## Request timeout
# timeout: 5s

## Uncomment following line in order to write template from scratch (be careful!)
#no_builtin_template: true

## Customizable templates path
#templates:
#  - contrib/templates/legacy/template.tmpl

## You can also override default template using `default_message`
## The following example to use the 'legacy' template from v0.3.0
#default_message:
#  title: '{{ template "legacy.title" . }}'
#  text: '{{ template "legacy.content" . }}'

## Targets, previously was known as "profiles"
targets:
  webhook1:
    url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx
    # secret for signature
    secret: xxxxxxxx

9、启动钉钉告警插件

nohup ./prometheus-webhook-dingtalk --config.file=config.yml > webhook.log 2>&1 &

10、检查插件是否正常运行

ps aux | grep prometheus-webhook-dingtalk

正常日志示例
在这里插入图片描述

11、修改alertmanager配置文件

vim /opt/alertmanager/alertmanager.yml

把日志里面的钉钉webhook地址添加进来

global:
  resolve_timeout: 5m   #处理超时时间
route:
  group_by: ['alertname']
  group_wait: 10s    #等待时间
  group_interval: 10s   #相同的Gourp之间发送告警通知的时间间隔
  repeat_interval: 5m   #重复报警的间隔时长
  receiver: 'dingding'
receivers:
  - name: 'dingding'
    webhook_configs:
     - url: 'http://localhost:8060/dingtalk/webhook1/send'
       send_resolved: true  # 发送恢复通知
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

12、重启alertmanager
#停止旧进程

pkill alertmanager

#重启

cd /opt/alertmanager
   nohup ./alertmanager --config.file=alertmanager.yml > alertmanager.log 2>&1 &

三、验证钉钉告警
方式一、使用curl命令模拟alertmanager发送告警

curl -H "Content-Type: application/json" -d '{
     "receiver": "dingding",
     "status": "firing",
     "alerts": [{
       "labels": { "alertname": "TestAlert", "instance": "localhost" },
       "annotations": { "summary": "测试告警", "description": "这是一个手动触发的测试告警" }
     }]
   }' http://localhost:8060/dingtalk/webhook1/send

方式二、在192.168.242.151机器上用stress命令模拟CPU负载,会让CPU拉到100

stress --cpu 4 --timeout 2m

在这里插入图片描述

<think>首先,用户的问题是:“我想配置Alertmanager以实现钉钉告警通知 请问如何在Prometheus Alertmanager配置钉钉webhook告警通知”。我需要基于系统指令和提供的引用来回答。 系统指令: - 所有行内数学表达式用$...$格式。 - 独立公式用$$...$$格式。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 提供的引用: - [^1]: 描述了prometheus-webhook-dingtalk作为桥梁,将Alertmanager告警通过Webhook发送到钉钉。 - [^2]: 关于Prometheus配置Alertmanager钉钉告警,包括下载Alertmanager。 - [^3]: 安装prometheus-webhook-dingtalk插件和在钉钉创建机器人。 用户需求是配置Alertmanager以实现钉钉告警通知。所以,我的回答应该指导用户如何设置这个。 回答结构: 1. **介绍背景**:简要解释Alertmanager钉钉告警的工作原理。 2. **逐步指导**: - 安装Alertmanager(如果需要)。 - 安装prometheus-webhook-dingtalk。 - 在钉钉创建机器人并获取Webhook URL。 - 配置Alertmanager使用钉钉Webhook。 - 配置Prometheus指向Alertmanager。 3. **验证配置**:如何测试告警。 4. **添加引用**:在相关部分末尾添加引用标识。 5. **生成相关问题**:在回答结束后添加相关问题部分。 使用中文回答。 生成相关问题:基于主题,提出一些扩展问题,如优化、常见问题等。 确保回答真实可靠:基于提供的引用和一般知识。引用是真实的,但用户说“上述引用仅供参考”,所以我应该基于它们但保持准确性。 步骤详解: - **步骤1:安装Alertmanager** 引用[^2]提到下载Alertmanager二进制文件。 - **步骤2:安装prometheus-webhook-dingtalk** 引用[^3]提到下载和安装这个插件。 - **步骤3:在钉钉创建机器人** 引用[^3]提到创建机器人并获取token。 - **步骤4:配置Alertmanager** 设置Alertmanager配置文件,添加钉钉Webhook接收器。 - **步骤5:配置Prometheus** 确保Prometheus指向Alertmanager。 - **步骤6:测试告警** 添加引用标识:例如,在提到prometheus-webhook-dingtalk时添加[^1]。 最终回答格式: - 开头:直接回答问题。 - 主体:分步骤解释。 - 结尾:相关问题。 相关问题例子: 1. 如何自定义钉钉告警消息格式? 2. 如何处理告警分组和抑制? 3. 如何添加其他通知渠道如微信或邮件?</think>### 如何在Prometheus Alertmanager配置钉钉Webhook告警通知 配置Prometheus Alertmanager实现钉钉告警通知,需要通过一个中间工具(如prometheus-webhook-dingtalk)将Alertmanager告警转发到钉钉机器人Webhook。以下是详细的分步指南,确保配置过程清晰可靠。整个过程包括安装必要组件、配置钉钉机器人、修改Alertmanager配置文件,并测试告警。 #### 步骤1: 安装和启动Alertmanager AlertmanagerPrometheus告警管理组件。如果尚未安装,请先下载部署它。 - 从官方GitHub仓库下载最新版本的Alertmanager二进制文件: ```bash wget https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz tar -xzf alertmanager-0.25.0.linux-amd64.tar.gz cd alertmanager-0.25.0.linux-amd64 ./alertmanager --config.file=alertmanager.yml # 启动Alertmanager ``` 默认配置文件`alertmanager.yml`将在下一步修改。确保Alertmanager在后台运行(例如使用systemd或nohup)[^2]。 #### 步骤2: 安装prometheus-webhook-dingtalk工具 由于Alertmanager不直接支持钉钉,需要使用`prometheus-webhook-dingtalk`作为桥梁。这个工具将Alertmanager的Webhook告警转换为钉钉兼容的格式。 - 下载并安装`prometheus-webhook-dingtalk`: ```bash wget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v2.1.0/prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz tar -xzf prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz -C /opt/ cd /opt/prometheus-webhook-dingtalk-2.1.0.linux-amd64 ./prometheus-webhook-dingtalk & # 启动工具,默认监听端口8060 ``` 该工具启动后,会监听HTTP请求(如`http://localhost:8060/dingtalk/webhook1/send`),用于接收Alertmanager告警[^1][^3]。 #### 步骤3: 在钉钉创建机器人并获取Webhook URL 在钉钉群聊中添加自定义机器人,以生成Webhook URL。 1. 打开钉钉群聊 -> 群设置 -> 智能群助手 -> 添加机器人 -> 选择“自定义”机器人。 2. 设置机器人名称(如“Prometheus告警”),并添加安全设置: - 选择“加签”或“自定义关键词”,例如设置关键词为“Prometheus”(告警消息中必须包含此词)。 3. 复制生成的Webhook URL,格式为:`https://oapi.dingtalk.com/robot/send?access_token=XXXXXX`(其中`XXXXXX`是您的token)[^3]。 #### 步骤4: 配置Alertmanager使用钉钉Webhook 修改Alertmanager配置文件`alertmanager.yml`,定义钉钉作为接收器(receiver)。 - 编辑`alertmanager.yml`文件: ```yaml global: resolve_timeout: 5m # 告警超时时间 route: group_by: ['alertname'] # 按告警名称分组 group_wait: 30s group_interval: 5m repeat_interval: 1h receiver: 'dingding' # 默认接收器指向钉钉 receivers: - name: 'dingding' webhook_configs: - url: 'http://localhost:8060/dingtalk/webhook1/send' # prometheus-webhook-dingtalk的监听地址 send_resolved: true # 发送告警恢复通知 templates: - '/etc/alertmanager/template/*.tmpl' # 可选:自定义消息模板路径 ``` **关键点说明:** - `url`字段指向`prometheus-webhook-dingtalk`的地址(步骤2中启动的服务)。 - 如果需要自定义告警消息格式,可以添加模板文件(见步骤5)。 - 重启Alertmanager使配置生效:`pkill alertmanager && ./alertmanager --config.file=alertmanager.yml`[^1][^3]。 #### 步骤5: (可选)自定义钉钉告警消息格式 通过模板文件优化告警消息的可读性。创建模板文件`/etc/alertmanager/template/dingding.tmpl`: ```text {{ define "dingding.message" }} ## [Prometheus告警] {{ .Status | toUpper }} **告警名称**: {{ .Labels.alertname }} **严重级别**: {{ .Labels.severity }} **实例**: {{ .Labels.instance }} **摘要**: {{ .Annotations.summary }} **详情**: {{ .Annotations.description }} **触发时间**: {{ .StartsAt }} {{ end }} ``` 在`alertmanager.yml`的`templates`部分引用此模板。钉钉消息将显示为Markdown格式,包含关键词“Prometheus”以匹配钉钉机器人的安全设置[^3]。 #### 步骤6: 配置Prometheus指向Alertmanager 确保Prometheus配置文件`prometheus.yml`中设置了Alertmanager地址: ```yaml alerting: alertmanagers: - static_configs: - targets: ['localhost:9093'] # Alertmanager默认端口9093 rule_files: - 'rules.yml' # 告警规则文件路径 ``` 重启Prometheus:`systemctl restart prometheus`。然后,触发测试告警(如模拟一个高CPU告警),检查钉钉群聊是否收到通知[^2]。 #### 验证和测试 - **测试告警**:使用`curl`模拟Alertmanager发送告警到`prometheus-webhook-dingtalk`: ```bash curl -H "Content-Type: application/json" -d '{"alerts":[{"status":"firing","labels":{"alertname":"TestAlert","severity":"critical"},"annotations":{"summary":"测试告警","description":"这是一个配置测试"}}]}' http://localhost:8060/dingtalk/webhook1/send ``` 如果钉钉机器人收到消息(包含关键词“Prometheus”),则配置成功。 - **常见问题排查**: - 钉钉未收到消息?检查关键词匹配、网络连通性,以及`prometheus-webhook-dingtalk`日志(`/var/log/prometheus-webhook-dingtalk.log`)。 - 告警延迟?调整Alertmanager的`group_wait`和`repeat_interval`参数[^1][^2]。 通过以上步骤,您即可实现Prometheus告警通过钉钉实时通知。Alertmanager告警转发到`prometheus-webhook-dingtalk`,后者格式化并推送消息到钉钉机器人Webhook[^1][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值