#!/bin/bash set -euo pipefail # 全局变量 LOG_FILE="/var/log/node_exporter_$(date +%Y%m%d%H%M%S).log" NODE_EXPORTER_VERSION="1.8.2" PRIMARY_DOWNLOAD_URL="http://10.101.0.51:5588/node-exporter/node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64.tar.gz" BACKUP_DOWNLOAD_URL="https://github.com/prometheus/node_exporter/releases/download/v${NODE_EXPORTER_VERSION}/node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64.tar.gz" LOCAL_PACKAGE_PATH="/opt/node_exporter.tar.gz" # 颜色定义 GREEN='\033[1;32m' RED='\033[1;31m' NC='\033[0m' # 重置颜色 # 日志函数 - 记录所有操作到日志 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" >> "$LOG_FILE" } # 步骤提示 - 绿色输出到控制台并记录日志 step() { local msg="==> $1" echo -e "${GREEN}$msg${NC}" log "$msg" } # 错误提示 - 红色输出到控制台并记录日志 error() { local msg="错误: $1" echo -e "${RED}$msg${NC}" log "$msg" exit 1 } # 执行命令并屏蔽输出 run_cmd() { step "执行: $1" eval "$1" &>> "$LOG_FILE" || { error "命令执行失败: $1" } } # 测试网络连通性 test_network_connectivity() { local url=$1 step "测试网络连通性: $url" if curl -fsSLI --connect-timeout 10 "$url" &>> "$LOG_FILE"; then return 0 else return 1 fi } # 下载文件 download_file() { local url=$1 local dest=$2 step "下载文件: $url 到 $dest" if wget -qO "$dest" "$url" &>> "$LOG_FILE"; then return 0 else return 1 fi } # 安装 node_exporter install_node_exporter() { step "开始安装 node_exporter ${NODE_EXPORTER_VERSION}" # 切换到 /opt 目录 run_cmd "cd /opt" # 检查本地是否存在安装包 if [[ -f "$LOCAL_PACKAGE_PATH" ]]; then step "发现本地安装包: $LOCAL_PACKAGE_PATH" DOWNLOAD_URL="$LOCAL_PACKAGE_PATH" else # 测试主要下载地址的连通性 if test_network_connectivity "$PRIMARY_DOWNLOAD_URL"; then DOWNLOAD_URL="$PRIMARY_DOWNLOAD_URL" elif test_network_connectivity "$BACKUP_DOWNLOAD_URL"; then DOWNLOAD_URL="$BACKUP_DOWNLOAD_URL" else error "无法连接到任何下载地址" fi # 下载 node_exporter download_file "$DOWNLOAD_URL" "node_exporter.tar.gz" fi # 解压 tar 包 run_cmd "tar -zxvf node_exporter.tar.gz" # 移动文件夹 run_cmd "mv node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64/ ./node_exporter" # 进入 node_exporter 目录 run_cmd "cd node_exporter/" # 创建 bin 目录并移动二进制文件 run_cmd "mkdir bin" run_cmd "mv node_exporter bin/" # 配置 systemd 服务 cat > /lib/systemd/system/node_exporter.service <