diff --git a/src/alert/README.md b/src/alert/README.md index e69de29..2e34535 100644 --- a/src/alert/README.md +++ b/src/alert/README.md @@ -0,0 +1,13 @@ +# Alertmanager + +## 启动示例 + +```bash +docker run -d --name alertmanager \ + -p 9093:9093 \ + -v /opt/alertmanager/data:/alertmanager \ + argus-alert:latest +``` + +## 动态配置 +修改alertmanager.yml后,调用`/-/reload`接口可以重新加载配置 diff --git a/src/alert/alertmanager/build/Dockerfile b/src/alert/alertmanager/build/Dockerfile index a3db3ea..3fe711b 100644 --- a/src/alert/alertmanager/build/Dockerfile +++ b/src/alert/alertmanager/build/Dockerfile @@ -18,12 +18,13 @@ RUN wget https://github.com/prometheus/alertmanager/releases/download/v${ALERTMA mv alertmanager-${ALERTMANAGER_VERSION}.linux-amd64 /usr/local/alertmanager && \ rm alertmanager-${ALERTMANAGER_VERSION}.linux-amd64.tar.gz +ENV ALERTMANAGER_BASE_PATH=/private/argus/alert/alertmanager RUN mkdir -p /usr/share/alertmanager && \ - mkdir -p /private/argus/alert/alertmanager && \ + mkdir -p ${ALERTMANAGER_BASE_PATH} && \ mkdir -p /private/argus/etc && \ rm -rf /alertmanager && \ - ln -s /private/argus/alert/alertmanager /alertmanager + ln -s ${ALERTMANAGER_BASE_PATH} /alertmanager # 创建 alertmanager 用户(可自定义 UID/GID) # 创建 alertmanager 用户组 @@ -33,8 +34,10 @@ RUN groupadd -g 2015 alertmanager RUN useradd -M -s /usr/sbin/nologin -u 2133 -g 2015 alertmanager RUN chown -R alertmanager:alertmanager /usr/share/alertmanager && \ - chown -R alertmanager:alertmanager /private/argus/alert/alertmanager && \ - chown -R alertmanager:alertmanager /private/argus/etc + chown -R alertmanager:alertmanager /alertmanager && \ + chown -R alertmanager:alertmanager ${ALERTMANAGER_BASE_PATH} && \ + chown -R alertmanager:alertmanager /private/argus/etc && \ + chown -R alertmanager:alertmanager /usr/local/bin # 配置内网 apt 源 (如果指定了内网选项) RUN if [ "$USE_INTRANET" = "true" ]; then \ @@ -63,6 +66,8 @@ RUN chmod +x /usr/local/bin/start-am-supervised.sh # 复制 Alertmanager 配置文件 COPY src/alert/alertmanager/build/alertmanager.yml /etc/alertmanager/alertmanager.yml +RUN chmod +x /etc/alertmanager/alertmanager.yml +# COPY src/alert/alertmanager/build/alertmanager.yml ${ALERTMANAGER_BASE_PATH}/alertmanager.yml # 复制 DNS 监控脚本 COPY src/alert/alertmanager/build/dns-monitor.sh /usr/local/bin/dns-monitor.sh diff --git a/src/alert/alertmanager/build/alertmanager.yml b/src/alert/alertmanager/build/alertmanager.yml index bb80c0d..26060aa 100644 --- a/src/alert/alertmanager/build/alertmanager.yml +++ b/src/alert/alertmanager/build/alertmanager.yml @@ -6,12 +6,10 @@ route: group_wait: 30s # 第一个告警后,等 30s 看是否有同组告警一起发 group_interval: 5m # 同组告警变化后,至少 5 分钟再发一次 repeat_interval: 3h # 相同告警,3 小时重复提醒一次 - receiver: 'webhook' + receiver: 'null' receivers: - - name: 'webhook' - webhook_configs: - - url: 'http://127.0.0.1:5001/alert' # Webhook 接收地址 + - name: 'null' inhibit_rules: - source_match: diff --git a/src/alert/alertmanager/build/dns-monitor.sh b/src/alert/alertmanager/build/dns-monitor.sh index 910215c..2890b47 100644 --- a/src/alert/alertmanager/build/dns-monitor.sh +++ b/src/alert/alertmanager/build/dns-monitor.sh @@ -1 +1,68 @@ -../../../bind/build/dns-monitor.sh \ No newline at end of file +#!/bin/bash + +# DNS监控脚本 - 每10秒检查dns.conf是否有变化 +# 如果有变化则执行update-dns.sh脚本 + +DNS_CONF="/private/argus/etc/dns.conf" +DNS_BACKUP="/tmp/dns.conf.backup" +UPDATE_SCRIPT="/private/argus/etc/update-dns.sh" +LOG_FILE="/var/log/supervisor/dns-monitor.log" + +# 确保日志文件存在 +touch "$LOG_FILE" + +log_message() { + echo "$(date '+%Y-%m-%d %H:%M:%S') [DNS-Monitor] $1" >> "$LOG_FILE" +} + +log_message "DNS监控脚本启动" + +while true; do + if [ -f "$DNS_CONF" ]; then + if [ -f "$DNS_BACKUP" ]; then + # 比较文件内容 + if ! cmp -s "$DNS_CONF" "$DNS_BACKUP"; then + log_message "检测到DNS配置变化" + + # 更新备份文件 + cp "$DNS_CONF" "$DNS_BACKUP" + + # 执行更新脚本 + if [ -x "$UPDATE_SCRIPT" ]; then + log_message "执行DNS更新脚本: $UPDATE_SCRIPT" + "$UPDATE_SCRIPT" >> "$LOG_FILE" 2>&1 + if [ $? -eq 0 ]; then + log_message "DNS更新脚本执行成功" + else + log_message "DNS更新脚本执行失败" + fi + else + log_message "警告: 更新脚本不存在或不可执行: $UPDATE_SCRIPT" + fi + fi + else + + # 第一次检测到配置文件,执行更新脚本 + if [ -x "$UPDATE_SCRIPT" ]; then + log_message "执行DNS更新脚本: $UPDATE_SCRIPT" + "$UPDATE_SCRIPT" >> "$LOG_FILE" 2>&1 + if [ $? -eq 0 ]; then + log_message "DNS更新脚本执行成功" + + # 第一次运行,创建备份并执行更新 + cp "$DNS_CONF" "$DNS_BACKUP" + log_message "创建DNS配置备份文件" + + else + log_message "DNS更新脚本执行失败" + fi + else + log_message "警告: 更新脚本不存在或不可执行: $UPDATE_SCRIPT" + fi + fi + else + log_message "警告: DNS配置文件不存在: $DNS_CONF" + fi + + sleep 10 +done diff --git a/src/alert/alertmanager/build/start-am-supervised.sh b/src/alert/alertmanager/build/start-am-supervised.sh index effe495..467d7fe 100644 --- a/src/alert/alertmanager/build/start-am-supervised.sh +++ b/src/alert/alertmanager/build/start-am-supervised.sh @@ -23,4 +23,4 @@ echo "${IP}" > /private/argus/etc/${DOMAIN} echo "[INFO] Starting Alertmanager process..." # 启动 Alertmanager 主进程 -exec /usr/local/alertmanager/alertmanager --config.file=/etc/alertmanager/alertmanager.yml --storage.path=/alertmanager +exec /usr/local/alertmanager/alertmanager --config.file=/etc/alertmanager/alertmanager.yml --storage.path=/alertmanager --cluster.listen-address="" diff --git a/src/alert/alertmanager/build/supervisord.conf b/src/alert/alertmanager/build/supervisord.conf index 7aa335c..d284547 100644 --- a/src/alert/alertmanager/build/supervisord.conf +++ b/src/alert/alertmanager/build/supervisord.conf @@ -16,17 +16,17 @@ stopwaitsecs=20 killasgroup=true stopasgroup=true -# [program:dns-monitor] -# command=/usr/local/bin/dns-monitor.sh -# user=root -# stdout_logfile=/var/log/supervisor/dns-monitor.log -# stderr_logfile=/var/log/supervisor/dns-monitor_error.log -# autorestart=true -# startretries=3 -# startsecs=5 -# stopwaitsecs=10 -# killasgroup=true -# stopasgroup=true +[program:dns-monitor] +command=/usr/local/bin/dns-monitor.sh +user=root +stdout_logfile=/var/log/supervisor/dns-monitor.log +stderr_logfile=/var/log/supervisor/dns-monitor_error.log +autorestart=true +startretries=3 +startsecs=5 +stopwaitsecs=10 +killasgroup=true +stopasgroup=true [unix_http_server] file=/var/run/supervisor.sock diff --git a/src/alert/start.sh b/src/alert/start.sh deleted file mode 100644 index b8dff5b..0000000 --- a/src/alert/start.sh +++ /dev/null @@ -1,5 +0,0 @@ -docker run -d \ - -p 9093:9093 \ - --name alertmanager \ - -v $(pwd)/alertmanager.yml:/etc/alertmanager/alertmanager.yml \ - prom/alertmanager