From 16bdf67c9ccf69e6519b53950f0ef9b0b28301a2 Mon Sep 17 00:00:00 2001 From: "sundapeng.sdp" Date: Fri, 10 Oct 2025 15:01:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=88=9B=E5=BB=BAGrafana=20Dashboard?= =?UTF-8?q?=E5=9F=BA=E7=A1=80=E9=85=8D=E7=BD=AE=EF=BC=9B=E5=90=84=E9=95=9C?= =?UTF-8?q?=E5=83=8F=E6=9E=84=E5=BB=BA=E6=96=B0=E5=A2=9Edns-monitor.sh?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E5=8F=8A=E7=9B=B8=E5=85=B3=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/metric/ftp/{ => build}/Dockerfile | 3 + src/metric/ftp/{ => build}/README.md | 0 .../deps/vsftpd_3.0.5-0ubuntu1.1_amd64.deb | Bin src/metric/ftp/build/dns-monitor.sh | 68 ++++++++++++++++++ .../ftp/{ => build}/start-ftp-supervised.sh | 0 src/metric/ftp/{ => build}/supervisord.conf | 12 ++++ .../ftp/{ => build}/vsftpd-config-README.md | 0 .../ftp/{ => build}/vsftpd-offline-install.sh | 0 src/metric/ftp/{ => build}/vsftpd.conf | 0 src/metric/grafana/build/Dockerfile | 5 +- .../default_dashboard_by_hostname.json | 4 +- .../default_dashboard_by_instance.json | 4 +- src/metric/grafana/build/dns-monitor.sh | 68 ++++++++++++++++++ src/metric/grafana/build/supervisord.conf | 12 ++++ src/metric/prometheus/build/Dockerfile | 3 + src/metric/prometheus/build/dns-monitor.sh | 68 ++++++++++++++++++ src/metric/prometheus/build/supervisord.conf | 12 ++++ 17 files changed, 254 insertions(+), 5 deletions(-) rename src/metric/ftp/{ => build}/Dockerfile (95%) rename src/metric/ftp/{ => build}/README.md (100%) rename src/metric/ftp/{ => build}/deps/vsftpd_3.0.5-0ubuntu1.1_amd64.deb (100%) create mode 100644 src/metric/ftp/build/dns-monitor.sh rename src/metric/ftp/{ => build}/start-ftp-supervised.sh (100%) rename src/metric/ftp/{ => build}/supervisord.conf (69%) rename src/metric/ftp/{ => build}/vsftpd-config-README.md (100%) rename src/metric/ftp/{ => build}/vsftpd-offline-install.sh (100%) rename src/metric/ftp/{ => build}/vsftpd.conf (100%) create mode 100644 src/metric/grafana/build/dns-monitor.sh create mode 100644 src/metric/prometheus/build/dns-monitor.sh diff --git a/src/metric/ftp/Dockerfile b/src/metric/ftp/build/Dockerfile similarity index 95% rename from src/metric/ftp/Dockerfile rename to src/metric/ftp/build/Dockerfile index 6b79188..b691843 100644 --- a/src/metric/ftp/Dockerfile +++ b/src/metric/ftp/build/Dockerfile @@ -65,6 +65,9 @@ RUN chmod +x /usr/local/bin/start-ftp-supervised.sh # vsftpd 配置文件 COPY vsftpd.conf /etc/vsftpd/vsftpd.conf +COPY dns-monitor.sh /usr/local/bin/dns-monitor.sh +RUN chmod +x /usr/local/bin/dns-monitor.sh + USER root EXPOSE 21 20 21100-21110 diff --git a/src/metric/ftp/README.md b/src/metric/ftp/build/README.md similarity index 100% rename from src/metric/ftp/README.md rename to src/metric/ftp/build/README.md diff --git a/src/metric/ftp/deps/vsftpd_3.0.5-0ubuntu1.1_amd64.deb b/src/metric/ftp/build/deps/vsftpd_3.0.5-0ubuntu1.1_amd64.deb similarity index 100% rename from src/metric/ftp/deps/vsftpd_3.0.5-0ubuntu1.1_amd64.deb rename to src/metric/ftp/build/deps/vsftpd_3.0.5-0ubuntu1.1_amd64.deb diff --git a/src/metric/ftp/build/dns-monitor.sh b/src/metric/ftp/build/dns-monitor.sh new file mode 100644 index 0000000..2890b47 --- /dev/null +++ b/src/metric/ftp/build/dns-monitor.sh @@ -0,0 +1,68 @@ +#!/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/metric/ftp/start-ftp-supervised.sh b/src/metric/ftp/build/start-ftp-supervised.sh similarity index 100% rename from src/metric/ftp/start-ftp-supervised.sh rename to src/metric/ftp/build/start-ftp-supervised.sh diff --git a/src/metric/ftp/supervisord.conf b/src/metric/ftp/build/supervisord.conf similarity index 69% rename from src/metric/ftp/supervisord.conf rename to src/metric/ftp/build/supervisord.conf index 29c4b32..4d76417 100644 --- a/src/metric/ftp/supervisord.conf +++ b/src/metric/ftp/build/supervisord.conf @@ -16,6 +16,18 @@ stopwaitsecs=30 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 chmod=0700 diff --git a/src/metric/ftp/vsftpd-config-README.md b/src/metric/ftp/build/vsftpd-config-README.md similarity index 100% rename from src/metric/ftp/vsftpd-config-README.md rename to src/metric/ftp/build/vsftpd-config-README.md diff --git a/src/metric/ftp/vsftpd-offline-install.sh b/src/metric/ftp/build/vsftpd-offline-install.sh similarity index 100% rename from src/metric/ftp/vsftpd-offline-install.sh rename to src/metric/ftp/build/vsftpd-offline-install.sh diff --git a/src/metric/ftp/vsftpd.conf b/src/metric/ftp/build/vsftpd.conf similarity index 100% rename from src/metric/ftp/vsftpd.conf rename to src/metric/ftp/build/vsftpd.conf diff --git a/src/metric/grafana/build/Dockerfile b/src/metric/grafana/build/Dockerfile index 640d40c..82ba4fa 100644 --- a/src/metric/grafana/build/Dockerfile +++ b/src/metric/grafana/build/Dockerfile @@ -46,7 +46,7 @@ RUN deluser grafana && \ COPY grafana.ini /tmp/grafana.ini COPY datasources/datasources.yml /tmp/datasources.yml COPY dashboards/dashboards.yml /tmp/dashboards.yml -COPY dashboards/default_dashboard.json /tmp/default_dashboard.json +COPY dashboards/default_dashboard_by_hostname.json /tmp/default_dashboard.json # supervisor 配置 COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf @@ -58,6 +58,9 @@ RUN chmod +x /usr/local/bin/start-grafana-supervised.sh # 确保配置文件权限正确 RUN chown -R grafana:grafana /etc/grafana +COPY dns-monitor.sh /usr/local/bin/dns-monitor.sh +RUN chmod +x /usr/local/bin/dns-monitor.sh + USER root EXPOSE 3000 diff --git a/src/metric/grafana/build/dashboards/default_dashboard_by_hostname.json b/src/metric/grafana/build/dashboards/default_dashboard_by_hostname.json index f91d807..4a09e80 100644 --- a/src/metric/grafana/build/dashboards/default_dashboard_by_hostname.json +++ b/src/metric/grafana/build/dashboards/default_dashboard_by_hostname.json @@ -618,8 +618,8 @@ ] }, "time": { - "from": "2025-09-30T02:47:28.390Z", - "to": "2025-09-30T07:33:49.405Z" + "from": "now-12h", + "to": "now" }, "timepicker": {}, "timezone": "", diff --git a/src/metric/grafana/build/dashboards/default_dashboard_by_instance.json b/src/metric/grafana/build/dashboards/default_dashboard_by_instance.json index 416e8f8..78f0c43 100644 --- a/src/metric/grafana/build/dashboards/default_dashboard_by_instance.json +++ b/src/metric/grafana/build/dashboards/default_dashboard_by_instance.json @@ -617,8 +617,8 @@ ] }, "time": { - "from": "2025-09-30T02:47:28.390Z", - "to": "2025-09-30T07:33:49.405Z" + "from": "now-12h", + "to": "now" }, "timepicker": {}, "timezone": "", diff --git a/src/metric/grafana/build/dns-monitor.sh b/src/metric/grafana/build/dns-monitor.sh new file mode 100644 index 0000000..2890b47 --- /dev/null +++ b/src/metric/grafana/build/dns-monitor.sh @@ -0,0 +1,68 @@ +#!/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/metric/grafana/build/supervisord.conf b/src/metric/grafana/build/supervisord.conf index 6b39c1d..b331284 100644 --- a/src/metric/grafana/build/supervisord.conf +++ b/src/metric/grafana/build/supervisord.conf @@ -17,6 +17,18 @@ stopwaitsecs=30 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 chmod=0700 diff --git a/src/metric/prometheus/build/Dockerfile b/src/metric/prometheus/build/Dockerfile index ab0a096..e2195a8 100755 --- a/src/metric/prometheus/build/Dockerfile +++ b/src/metric/prometheus/build/Dockerfile @@ -92,6 +92,9 @@ COPY prometheus.yml /etc/prometheus/prometheus.yml RUN chown nobody:nogroup /usr/local/bin/exporter_config.json /etc/prometheus/prometheus.yml +COPY dns-monitor.sh /usr/local/bin/dns-monitor.sh +RUN chmod +x /usr/local/bin/dns-monitor.sh + USER root EXPOSE 9090 diff --git a/src/metric/prometheus/build/dns-monitor.sh b/src/metric/prometheus/build/dns-monitor.sh new file mode 100644 index 0000000..2890b47 --- /dev/null +++ b/src/metric/prometheus/build/dns-monitor.sh @@ -0,0 +1,68 @@ +#!/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/metric/prometheus/build/supervisord.conf b/src/metric/prometheus/build/supervisord.conf index 7a5f530..5359989 100755 --- a/src/metric/prometheus/build/supervisord.conf +++ b/src/metric/prometheus/build/supervisord.conf @@ -28,6 +28,18 @@ stopwaitsecs=30 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 chmod=0700