From 43640b47b5dd4191e49d48b104dfee340dec238a Mon Sep 17 00:00:00 2001 From: Lsmoisu <114275920+Lsmoisu@users.noreply.github.com> Date: Thu, 24 Apr 2025 15:55:35 +0800 Subject: [PATCH] Update Monitoring_Tools.sh --- Monitoring_Tools.sh | 300 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 297 insertions(+), 3 deletions(-) diff --git a/Monitoring_Tools.sh b/Monitoring_Tools.sh index 9675675..1c0022d 100644 --- a/Monitoring_Tools.sh +++ b/Monitoring_Tools.sh @@ -1,6 +1,6 @@ #!/bin/bash -# 功能:自动安装或卸载 Prometheus、Node Exporter 和 Grafana,支持用户选择安装或卸载组件及指定版本或默认安装最新版本,适配系统架构 +# 功能:自动安装或卸载 Prometheus、Node Exporter、Grafana、Blackbox Exporter 和 Alertmanager,支持用户选择安装或卸载组件及指定版本或默认安装最新版本,适配系统架构 # 作者:Grok3 # 使用方法:chmod +x install_prometheus.sh && ./install_prometheus.sh [uninstall] @@ -24,6 +24,12 @@ NODE_EXPORTER_INSTALL_DIR="/opt/node_exporter" NODE_EXPORTER_SERVICE_FILE="/etc/systemd/system/node-exporter.service" GRAFANA_CONFIG_DIR="/etc/grafana" GRAFANA_SERVICE_FILE="/etc/systemd/system/grafana-server.service" +BLACKBOX_INSTALL_DIR="/opt/blackbox_exporter" +BLACKBOX_DATA_DIR="/opt/blackbox_exporter/data" +BLACKBOX_SERVICE_FILE="/etc/systemd/system/blackbox-exporter.service" +ALERTMANAGER_INSTALL_DIR="/opt/alertmanager" +ALERTMANAGER_DATA_DIR="/opt/alertmanager/data" +ALERTMANAGER_SERVICE_FILE="/etc/systemd/system/alertmanager.service" # 卸载函数 uninstall_components() { @@ -31,6 +37,8 @@ uninstall_components() { echo -e "${YELLOW}1. Grafana${NC}" echo -e "${YELLOW}2. Prometheus${NC}" echo -e "${YELLOW}3. Node Exporter${NC}" + echo -e "${YELLOW}4. Blackbox Exporter${NC}" + echo -e "${YELLOW}5. Alertmanager${NC}" echo -e "${YELLOW}请输入要卸载的组件编号(用空格分隔多个选项,例如:1 3):${NC}" read -r UNINSTALL_SELECTION @@ -38,6 +46,8 @@ uninstall_components() { UNINSTALL_GRAFANA="n" UNINSTALL_PROMETHEUS="n" UNINSTALL_NODE_EXPORTER="n" + UNINSTALL_BLACKBOX="n" + UNINSTALL_ALERTMANAGER="n" # 解析用户输入的选择 for SELECTED in $UNINSTALL_SELECTION; do @@ -54,6 +64,14 @@ uninstall_components() { UNINSTALL_NODE_EXPORTER="y" echo -e "${GREEN}将卸载 Node Exporter。${NC}" ;; + 4) + UNINSTALL_BLACKBOX="y" + echo -e "${GREEN}将卸载 Blackbox Exporter。${NC}" + ;; + 5) + UNINSTALL_ALERTMANAGER="y" + echo -e "${GREEN}将卸载 Alertmanager。${NC}" + ;; *) echo -e "${RED}警告:无效选项 $SELECTED,已忽略。${NC}" ;; @@ -61,7 +79,7 @@ uninstall_components() { done # 如果没有选择卸载任何组件,则退出 - if [ "$UNINSTALL_PROMETHEUS" != "y" ] && [ "$UNINSTALL_NODE_EXPORTER" != "y" ] && [ "$UNINSTALL_GRAFANA" != "y" ]; then + if [ "$UNINSTALL_PROMETHEUS" != "y" ] && [ "$UNINSTALL_NODE_EXPORTER" != "y" ] && [ "$UNINSTALL_GRAFANA" != "y" ] && [ "$UNINSTALL_BLACKBOX" != "y" ] && [ "$UNINSTALL_ALERTMANAGER" != "y" ]; then echo -e "${RED}错误:未选择卸载任何组件,脚本退出!${NC}" exit 1 fi @@ -181,6 +199,88 @@ uninstall_components() { echo -e "${GREEN}Grafana 已成功卸载!${NC}" fi + # 卸载 Blackbox Exporter + if [ "$UNINSTALL_BLACKBOX" == "y" ]; then + # 检查服务是否存在并执行操作 + if systemctl list-units --full -all | grep -q "blackbox-exporter.service"; then + if systemctl is-active --quiet blackbox-exporter; then + echo -e "${YELLOW}正在停止 Blackbox Exporter 服务...${NC}" + systemctl stop blackbox-exporter + fi + if systemctl is-enabled --quiet blackbox-exporter; then + echo -e "${YELLOW}正在禁用 Blackbox Exporter 服务...${NC}" + systemctl disable blackbox-exporter + fi + fi + if [ -f "$BLACKBOX_SERVICE_FILE" ]; then + echo -e "${YELLOW}正在删除 Blackbox Exporter systemd 服务文件...${NC}" + rm -f "$BLACKBOX_SERVICE_FILE" + systemctl daemon-reload + systemctl reset-failed + fi + + # 删除安装目录和数据目录 + if [ -d "$BLACKBOX_INSTALL_DIR" ]; then + echo -e "${YELLOW}正在删除 Blackbox Exporter 安装目录 ($BLACKBOX_INSTALL_DIR)...${NC}" + rm -rf "$BLACKBOX_INSTALL_DIR" + fi + if [ -d "$BLACKBOX_DATA_DIR" ]; then + echo -e "${YELLOW}正在删除 Blackbox Exporter 数据目录 ($BLACKBOX_DATA_DIR)...${NC}" + rm -rf "$BLACKBOX_DATA_DIR" + fi + + # 删除用户和组 + if id blackbox &> /dev/null; then + echo -e "${YELLOW}正在删除 Blackbox Exporter 用户和组...${NC}" + userdel blackbox || true + fi + if getent group blackbox &> /dev/null; then + groupdel blackbox || true + fi + echo -e "${GREEN}Blackbox Exporter 已成功卸载!${NC}" + fi + + # 卸载 Alertmanager + if [ "$UNINSTALL_ALERTMANAGER" == "y" ]; then + # 检查服务是否存在并执行操作 + if systemctl list-units --full -all | grep -q "alertmanager.service"; then + if systemctl is-active --quiet alertmanager; then + echo -e "${YELLOW}正在停止 Alertmanager 服务...${NC}" + systemctl stop alertmanager + fi + if systemctl is-enabled --quiet alertmanager; then + echo -e "${YELLOW}正在禁用 Alertmanager 服务...${NC}" + systemctl disable alertmanager + fi + fi + if [ -f "$ALERTMANAGER_SERVICE_FILE" ]; then + echo -e "${YELLOW}正在删除 Alertmanager systemd 服务文件...${NC}" + rm -f "$ALERTMANAGER_SERVICE_FILE" + systemctl daemon-reload + systemctl reset-failed + fi + + # 删除安装目录和数据目录 + if [ -d "$ALERTMANAGER_INSTALL_DIR" ]; then + echo -e "${YELLOW}正在删除 Alertmanager 安装目录 ($ALERTMANAGER_INSTALL_DIR)...${NC}" + rm -rf "$ALERTMANAGER_INSTALL_DIR" + fi + if [ -d "$ALERTMANAGER_DATA_DIR" ]; then + echo -e "${YELLOW}正在删除 Alertmanager 数据目录 ($ALERTMANAGER_DATA_DIR)...${NC}" + rm -rf "$ALERTMANAGER_DATA_DIR" + fi + + # 删除用户和组 + if id alertmanager &> /dev/null; then + echo -e "${YELLOW}正在删除 Alertmanager 用户和组...${NC}" + userdel alertmanager || true + fi + if getent group alertmanager &> /dev/null; then + groupdel alertmanager || true + fi + echo -e "${GREEN}Alertmanager 已成功卸载!${NC}" + fi + echo -e "${GREEN}所选组件卸载完成!${NC}" exit 0 } @@ -224,6 +324,8 @@ echo -e "${YELLOW}请选择要安装的组件:${NC}" echo -e "${YELLOW}1. Grafana${NC}" echo -e "${YELLOW}2. Prometheus${NC}" echo -e "${YELLOW}3. Node Exporter${NC}" +echo -e "${YELLOW}4. Blackbox Exporter${NC}" +echo -e "${YELLOW}5. Alertmanager${NC}" echo -e "${YELLOW}请输入要安装的组件编号(用空格分隔多个选项,例如:1 3):${NC}" read -r SELECTION @@ -231,6 +333,8 @@ read -r SELECTION INSTALL_GRAFANA="n" INSTALL_PROMETHEUS="n" INSTALL_NODE_EXPORTER="n" +INSTALL_BLACKBOX="n" +INSTALL_ALERTMANAGER="n" # 解析用户输入的选择 for SELECTED in $SELECTION; do @@ -247,6 +351,14 @@ for SELECTED in $SELECTION; do INSTALL_NODE_EXPORTER="y" echo -e "${GREEN}将安装 Node Exporter。${NC}" ;; + 4) + INSTALL_BLACKBOX="y" + echo -e "${GREEN}将安装 Blackbox Exporter。${NC}" + ;; + 5) + INSTALL_ALERTMANAGER="y" + echo -e "${GREEN}将安装 Alertmanager。${NC}" + ;; *) echo -e "${RED}警告:无效选项 $SELECTED,已忽略。${NC}" ;; @@ -254,7 +366,7 @@ for SELECTED in $SELECTION; do done # 如果没有选择安装任何组件,则退出 -if [ "$INSTALL_PROMETHEUS" != "y" ] && [ "$INSTALL_NODE_EXPORTER" != "y" ] && [ "$INSTALL_GRAFANA" != "y" ]; then +if [ "$INSTALL_PROMETHEUS" != "y" ] && [ "$INSTALL_NODE_EXPORTER" != "y" ] && [ "$INSTALL_GRAFANA" != "y" ] && [ "$INSTALL_BLACKBOX" != "y" ] && [ "$INSTALL_ALERTMANAGER" != "y" ]; then echo -e "${RED}错误:未选择安装任何组件,脚本退出!${NC}" exit 1 fi @@ -443,6 +555,156 @@ EOF echo -e "${GREEN}Grafana 安装完成!${NC}" fi +# 安装 Blackbox Exporter 的逻辑 +if [ "$INSTALL_BLACKBOX" == "y" ]; then + echo -e "${YELLOW}正在获取 Blackbox Exporter 最新版本...${NC}" + BLACKBOX_VERSION=$(curl -s https://api.github.com/repos/prometheus/blackbox_exporter/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/') + if [ -z "$BLACKBOX_VERSION" ]; then + echo -e "${RED}错误:无法获取 Blackbox Exporter 最新版本,请检查网络!${NC}" + exit 1 + fi + echo -e "${GREEN}Blackbox Exporter 最新版本为:$BLACKBOX_VERSION${NC}" + BLACKBOX_DOWNLOAD_URL="https://github.com/prometheus/blackbox_exporter/releases/download/v${BLACKBOX_VERSION}/blackbox_exporter-${BLACKBOX_VERSION}.${PROM_ARCH}.tar.gz" + + # 检查 Blackbox Exporter 下载链接是否有效 + echo -e "${YELLOW}正在验证 Blackbox Exporter 下载链接...${NC}" + HTTP_STATUS=$(curl -s -I "$BLACKBOX_DOWNLOAD_URL" | grep -i "HTTP/" | awk '{print $2}' | head -1) + if [[ "$HTTP_STATUS" != "200" && "$HTTP_STATUS" != "302" ]]; then + echo -e "${RED}错误:无效的 Blackbox Exporter 下载链接 ($BLACKBOX_DOWNLOAD_URL)!${NC}" + echo -e "${YELLOW}HTTP 状态码:$HTTP_STATUS${NC}" + exit 1 + fi + echo -e "${GREEN}Blackbox Exporter 下载链接有效,HTTP 状态码:$HTTP_STATUS${NC}" + + echo -e "${YELLOW}正在创建 Blackbox Exporter 安装目录和数据目录...${NC}" + mkdir -p "$BLACKBOX_INSTALL_DIR" "$BLACKBOX_DATA_DIR" + if [ $? -ne 0 ]; then + echo -e "${RED}错误:创建 Blackbox Exporter 目录失败!${NC}" + exit 1 + fi + + echo -e "${YELLOW}正在下载 Blackbox Exporter v${BLACKBOX_VERSION}...${NC}" + wget -O /tmp/blackbox_exporter.tar.gz "$BLACKBOX_DOWNLOAD_URL" + if [ $? -ne 0 ]; then + echo -e "${RED}错误:下载 Blackbox Exporter 失败,请检查网络!${NC}" + exit 1 + fi + + echo -e "${YELLOW}正在解压并安装 Blackbox Exporter...${NC}" + tar -xzf /tmp/blackbox_exporter.tar.gz -C /tmp + mv /tmp/blackbox_exporter-${BLACKBOX_VERSION}.${PROM_ARCH}/* "$BLACKBOX_INSTALL_DIR" + if [ $? -ne 0 ]; then + echo -e "${RED}错误:解压或移动 Blackbox Exporter 文件失败!${NC}" + exit 1 + fi + + # 清理临时文件 + rm -rf /tmp/blackbox_exporter.tar.gz /tmp/blackbox_exporter-${BLACKBOX_VERSION}.${PROM_ARCH} + + # 创建 Blackbox Exporter 用户和组 + echo -e "${YELLOW}正在创建 Blackbox Exporter 用户和组...${NC}" + useradd -M -s /bin/false blackbox || true + chown -R blackbox:blackbox "$BLACKBOX_INSTALL_DIR" "$BLACKBOX_DATA_DIR" + + # 创建 Blackbox Exporter systemd 服务文件 + echo -e "${YELLOW}正在创建 Blackbox Exporter systemd 服务文件...${NC}" + cat > "$BLACKBOX_SERVICE_FILE" < "$ALERTMANAGER_SERVICE_FILE" <