温馨提示×

centos域名如何监控

小樊
43
2025-12-09 11:48:33
栏目: 云计算

CentOS 域名监控实操指南

一、监控目标与总体思路

  • 面向生产环境,建议同时覆盖以下维度:
    • DNS 解析可用性:指定域名与指定 DNS 服务器是否能解析到期望的 IP
    • HTTPS/SSL 证书有效期:提前发现证书即将过期,避免服务中断。
    • HTTP 可用性:域名可访问、返回码为 200,必要时校验 SNI/证书域名
  • 推荐在 Zabbix 6.x 上统一纳管,使用 UserParameter 自定义监控项,脚本放在 /etc/zabbix/scripts/,Agent 配置开启 UnsafeUserParameters=1 后重启生效。

二、DNS 解析监控脚本与配置

  • 安装依赖
    • CentOS 上安装工具:sudo yum install -y bind-utils(提供 dig/nslookup)。
  • 解析校验脚本(支持指定 DNS 与期望 IP)
    • 保存为:/etc/zabbix/scripts/check_dns.sh
    • 可执行:chmod +x /etc/zabbix/scripts/check_dns.sh
    • 脚本内容:
      • #!/usr/bin/env bash set -Eeuo pipefail DOMAIN=“${1:?missing domain}” DNS=“${2:?missing dns}” EXPECTED_IPS=“${3:-}” TIMEOUT=“${4:-5}”

        指定 +short +time +tries,超时控制更稳

        mapfile -t ANS < <(dig +short +time=“${TIMEOUT}” +tries=2 @“${DNS}” “${DOMAIN}” A 2>/dev/null) if (( ${#ANS[@]} == 0 )); then echo 0; exit 0 fi

        若未设置期望 IP,则只要能解析即 OK

        if [[ -z “${EXPECTED_IPS}” ]]; then echo 1; exit 0 fi

        期望 IP 以逗号分隔

        IFS=‘,’ read -ra WANT <<< “${EXPECTED_IPS}” for ip in “${ANS[@]}”; do for w in “${WANT[@]}”; do [[ “$ip” == “$w” ]] && { echo 1; exit 0; } done done echo 0

  • Zabbix Agent 配置
    • /etc/zabbix/zabbix_agentd.conf 增加:
      • UnsafeUserParameters=1
      • UserParameter=check_dns[*],/etc/zabbix/scripts/check_dns.sh “$1” “$2” “$3” “$4”
    • 重启:systemctl restart zabbix-agent
  • Zabbix 前端
    • 监控项:Key 填写 check_dns[example.com,8.8.8.8,93.184.216.34,5]
    • 触发器:{host:check_dns[example.com,8.8.8.8,93.184.216.34].last()} = 0
  • 命令行自检
    • /usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -p 10050 -k “check_dns[example.com,8.8.8.8,93.184.216.34,5]”
  • 说明
    • 使用 dig +short 获取简洁结果,结合 +time/+tries 控制超时与重试;通过对比期望 IP 判断解析是否正确。

三、HTTPS 证书到期监控脚本与配置

  • 证书剩余天数脚本
    • 保存为:/etc/zabbix/scripts/check_ssl.sh
    • 可执行:chmod +x /etc/zabbix/scripts/check_ssl.sh
    • 脚本内容:
      • #!/usr/bin/env bash set -Eeuo pipefail HOST=“${1:?missing host}” PORT=“${2:-443}”

        END_DATE=$(openssl s_client -servername “$HOST” -connect “${HOST}:${PORT}” -showcerts </dev/null 2>/dev/null
        | sed -n ‘/BEGIN CERTIFICATE/,/END CERT/p’
        | openssl x509 -text 2>/dev/null
        | sed -n ‘s/ *Not After *: *//p’)

        if [[ -z “$END_DATE” ]]; then echo 9999; exit 0 # 取不到证书时间视为异常大值,便于排障 fi

        END_TS=$(date -d “$END_DATE” +%s) NOW_TS=$(date +%s) DAYS_LEFT=$(( (END_TS - NOW_TS) / 86400 ))

        echo “$DAYS_LEFT”

  • Zabbix Agent 配置
    • UserParameter=check_ssl[*],/etc/zabbix/scripts/check_ssl.sh “$1” “$2”
    • 重启:systemctl restart zabbix-agent
  • Zabbix 前端
    • 监控项:Key 填写 check_ssl[www.example.com,443]
    • 触发器(示例:小于 30 天告警):{host:check_ssl[www.example.com,443].last()}<30
  • 说明
    • 使用 SNI 指定域名,兼容多域名证书;通过解析 Not After 计算剩余天数,便于提前更换证书。

四、HTTP 可用性监控建议

  • 方式一(Zabbix Agent 主动检查)
    • 使用 curl 自定义监控项,校验返回码与可选关键字:
      • UserParameter=check_http_code[*],curl -o /dev/null -s -w “%{http_code}” --resolve “$1:443:$2” “https://$1$3”
      • 触发器示例:{host:check_http_code[www.example.com,1.2.3.4,/health]}=200
  • 方式二(Zabbix Web 场景)
    • 创建 Web 场景,配置 SNISSL 证书校验与状态码断言,统一做可用性、响应时间与证书校验。
  • 方式三(外部拨测)
    • 结合云厂商或第三方 拨测(多地域探测、证书到期、可用性),与 Zabbix 告警联动,降低单点盲区。

五、排障与最佳实践

  • 命令行快速验证
    • DNS:dig example.com A @8.8.8.8 +short;如需跟踪链路:dig +trace example.com
    • SSL:echo | openssl s_client -servername www.example.com -connect www.example.com:443 2>/dev/null | openssl x509 -noout -dates
  • 日志与定位
    • 若自建 BIND9 作为解析器异常,可用:journalctl -u named -f 查看实时日志,关注关键词 REFUSED/SERVFAIL/NXDOMAIN 等,便于快速定位解析失败根因。
  • 监控项与阈值建议
    • DNS:解析成功=1,失败=0;连续 2 次失败触发告警。
    • SSL:剩余天数阈值建议 30/7/1 天分级告警。
    • HTTP:状态码 200 为成功;可叠加响应时间阈值与关键字匹配(如登录页特征字符串)。

0