56 lines
1.6 KiB
Bash
Executable File
56 lines
1.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Node Exporter 健康检查脚本
|
|
# 输出 JSON 格式结果
|
|
|
|
set -e
|
|
|
|
# 检查 Node Exporter 健康状态
|
|
check_health() {
|
|
local url="http://localhost:9100"
|
|
local metrics_url="$url/metrics"
|
|
local name="node-exporter"
|
|
local status="unhealth"
|
|
local reason=""
|
|
|
|
# 检查 curl 是否可用
|
|
if ! command -v curl &> /dev/null; then
|
|
reason="curl 命令不可用,无法进行健康检查"
|
|
echo "{\"name\": \"$name\", \"status\": \"$status\", \"reason\": \"$reason\"}"
|
|
exit 1
|
|
fi
|
|
|
|
# 测试根路径连接
|
|
local http_code=$(curl -s -o /dev/null -w "%{http_code}" "$url" 2>/dev/null || echo "000")
|
|
|
|
if [[ "$http_code" == "200" ]]; then
|
|
# 测试 metrics 端点
|
|
local metrics_code=$(curl -s -o /dev/null -w "%{http_code}" "$metrics_url" 2>/dev/null || echo "000")
|
|
|
|
if [[ "$metrics_code" == "200" ]]; then
|
|
status="health"
|
|
reason="success"
|
|
echo "{\"name\": \"$name\", \"status\": \"$status\", \"reason\": \"$reason\"}"
|
|
exit 0
|
|
else
|
|
reason="Metrics 端点异常 (HTTP $metrics_code)"
|
|
echo "{\"name\": \"$name\", \"status\": \"$status\", \"reason\": \"$reason\"}"
|
|
exit 1
|
|
fi
|
|
else
|
|
reason="HTTP 服务异常 (HTTP $http_code),请检查 Node Exporter 是否正在运行在端口 9100"
|
|
echo "{\"name\": \"$name\", \"status\": \"$status\", \"reason\": \"$reason\"}"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# 主函数
|
|
main() {
|
|
check_health
|
|
}
|
|
|
|
# 脚本入口
|
|
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
|
main "$@"
|
|
fi
|