模拟验证 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的响应体,进一步检查是否有正确的接收确认。

浙公网安备 33010602011771号