模拟验证 Prometheus 到 Alertmanager 联通性:Bash 脚本实战指南

模拟验证 Prometheus 到 Alertmanager 联通性:Bash 脚本实战指南

#!/bin/bash

# Alertmanager 的地址
ALERTMANAGER_URL="http://10.10.10.10:9093/api/v2/alerts"

# 创建时间戳
CURRENT_TIME=$(date --utc +%Y-%m-%dT%H:%M:%SZ)

# 创建测试告警的 JSON 数据
ALERTS_JSON=$(cat <<EOF
[
  {
    "labels": {
      "alertname": "【abc-tidb-dev-v4】NODE_memory_1_test_by_zuoyang",
      "bi": "abc-tidb-dev-v4",
      "cluster": "abc-tidb-dev-v4",
      "instance": "10.10.10.01:9600",
      "job": "overwritten-nodes",
      "severity": "critical",
      "monitor": "prometheus",
      "current_time": "$CURRENT_TIME"
    },
    "generatorURL": "http://prometheus:9090/graph?g0.expr=%28%28%28node_memory_MemTotal_bytes-node_memory_MemFree_bytes-node_memory_Cached_bytes%29%2F%28node_memory_MemTotal_bytes%29*100%29%29+%3E%3D+1\u0026g0.tab=1",
    "startsAt": "$CURRENT_TIME",
    "endsAt": "$(date --utc -d '+1 hour' +%Y-%m-%dT%H:%M:%SZ)"
  }
]
EOF
)

# 发送告警到 Alertmanager
send_alerts() {
    response=$(curl -s -w "%{http_code}" -o response.txt -X POST "$ALERTMANAGER_URL" \
    -H "Content-Type: application/json" \
    -H "User-Agent: Prometheus-Test-Client/1.0" \
    -d "$ALERTS_JSON")

    # 检查响应状态码
    if [[ "$response" -ge 200 && "$response" -lt 300 ]]; then
        echo "警报已成功发送到 Alertmanager"
    else
        echo "发送警报失败,状态码: $response"
        cat response.txt
        exit 1
    fi
}

# 执行发送警报的函数
send_alerts

一、解释

1、创建时间戳:使用`date`命令创建符合 RFC3339 格式的当前时间和结束时间。

2、创建 JSON 数据:在 Bash 脚本中,使用`cat`和 here-doc(`<<EOF`)来构建告警的 JSON 数据。你可以在 JSON 数据中插入动态变量,例如当前时间`CURRENT_TIME`,用于验证告警的实时性。

3、发送告警:使用`curl`命令来发送 HTTP POST 请求,内容类型为`application/json`,并携带构建好的告警数据。响应的状态码被检查,确保HTTP请求成功。如果请求失败,输出错误信息和响应内容。

4、错误处理:如果请求失败,`curl`的响应码将会显示,并打印出响应体以便故障排查。

二、使用方法

1、将脚本保存为 `prometheus_alert_test.sh`。
2、给脚本添加执行权限:

chmod +x prometheus_alert_test.sh

3、执行脚本:

./prometheus_alert_test.sh

三、进一步改进

1、认证支持:如果Alertmanager启用了认证,可以在`curl`命令中添加认证信息,例如Basic Auth或Bearer Token:

# Basic Auth 示例
curl -u "username:password" ...

# Bearer Token 示例
curl -H "Authorization: Bearer YOUR_TOKEN" ...

2、批量告警:你可以修改`ALERTS_JSON`变量,构建多个告警并发送。

3、日志记录:如果需要更详细的日志记录,可以将`curl`的输出重定向到日志文件:

curl -s -w "%{http_code}" -o response.txt -X POST "$ALERTMANAGER_URL" -H "Content-Type: application/json" -d "$ALERTS_JSON" >> alertmanager_log.txt 2>&1

4、告警接收确认:可以根据Alertmanager的响应体,进一步检查是否有正确的接收确认。

posted @ 2025-05-01 14:04  左扬  阅读(30)  评论(0)    收藏  举报