【教程】安装 Node-Exporter


#!/bin/bash

echo "=== 开始配置 Node Exporter ==="

# 生成随机端口的函数
generate_random_port() {
    while true; do
        port=$((RANDOM % 55535 + 10000))
        if ! netstat -tuln 2>/dev/null | grep -q ":$port" ; then
            echo $port
            break
        fi
    done
}

# 检查已存在的配置文件
if [ -f "docker-compose-node-exporter.yml" ]; then
    echo "发现现有的 docker-compose-node-exporter.yml"
    read -p "是否覆盖现有的 docker-compose-node-exporter.yml?(y/N) " answer
    if [ "$answer" != "y" ] && [ "$answer" != "Y" ]; then
        echo "保留现有 docker-compose-node-exporter.yml,退出脚本"
        exit 0
    fi
fi

echo -e "\n1. 生成随机端口..."
NODE_EXPORTER_PORT=$(generate_random_port)
echo "Node Exporter 端口: $NODE_EXPORTER_PORT"

echo -e "\n2. 创建环境变量文件..."
cat > .env <<EOL
NODE_EXPORTER_PORT=$NODE_EXPORTER_PORT
EOL
echo "环境变量文件创建完成"

echo -e "\n3. 创建 docker-compose-node-exporter.yml..."
cat > docker-compose-node-exporter.yml <<EOL
version: "3.8"

services:
  node-exporter:
    image: prom/node-exporter:latest
    container_name: node-exporter
    restart: unless-stopped
    ports:
      - "\${NODE_EXPORTER_PORT}:9100"
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - '--path.procfs=/host/proc'
      - '--path.sysfs=/host/sys'
      - '--path.rootfs=/rootfs'
      - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
      - '--web.listen-address=:9100'
    networks:
      - monitoring

networks:
  monitoring:
    external: true
EOL
echo "配置文件创建完成"

echo -e "\n4. 创建管理脚本..."
cat > manage-node-exporter.sh <<EOL
#!/bin/bash
source .env

case \$1 in
    start)
        echo "启动 Node Exporter..."
        docker compose -f docker-compose-node-exporter.yml up -d
        echo "Node Exporter 已启动!"
        echo "访问地址: http://localhost:\$NODE_EXPORTER_PORT/metrics"
        ;;
    stop)
        echo "停止 Node Exporter..."
        docker compose -f docker-compose-node-exporter.yml down
        ;;
    restart)
        echo "重启 Node Exporter..."
        docker compose -f docker-compose-node-exporter.yml restart
        ;;
    status)
        docker compose -f docker-compose-node-exporter.yml ps
        ;;
    logs)
        docker compose -f docker-compose-node-exporter.yml logs -f
        ;;
    info)
        echo "Node Exporter 信息:"
        echo "访问地址: http://localhost:\$NODE_EXPORTER_PORT/metrics"
        echo "Docker Compose 配置: ./docker-compose-node-exporter.yml"
        echo "提示: 在 Prometheus 中使用 'node-exporter:9100' 作为目标地址"
        ;;
    *)
        echo "用法: \$0 {start|stop|restart|status|logs|info}"
        ;;
esac
EOL
chmod +x manage-node-exporter.sh
echo "管理脚本创建完成"

echo -e "\n=== Node Exporter 配置完成! ==="
echo "随机分配的端口: $NODE_EXPORTER_PORT"
echo -e "\n你可以:"
echo "1. 编辑 docker-compose-node-exporter.yml 修改配置"
echo "2. 使用 './manage-node-exporter.sh start' 启动服务"
echo "3. 使用 './manage-node-exporter.sh info' 查看信息"
echo "4. 访问 http://localhost:$NODE_EXPORTER_PORT/metrics 查看监控指标"

echo -e "\nPrometheus 配置提示:"
echo "在 prometheus.yml 的 scrape_configs 中添加:"
echo "  - job_name: 'node-exporter'"
echo "    static_configs:"
echo "      - targets: ['node-exporter:9100']"

echo -e "\n管理命令:"
echo "- ./manage-node-exporter.sh start    # 启动服务"
echo "- ./manage-node-exporter.sh stop     # 停止服务"
echo "- ./manage-node-exporter.sh restart  # 重启服务"
echo "- ./manage-node-exporter.sh status   # 查看状态"
echo "- ./manage-node-exporter.sh logs     # 查看日志"
echo "- ./manage-node-exporter.sh info     # 查看信息"

# 询问是否立即启动服务
read -p "是否立即启动 Node Exporter?(y/N) " answer
if [ "$answer" = "y" ] || [ "$answer" = "Y" ]; then
    echo "启动 Node Exporter..."
    docker compose -f docker-compose-node-exporter.yml up -d
    echo -e "\nNode Exporter 已启动!"
    echo "访问地址: http://localhost:$NODE_EXPORTER_PORT/metrics"
    echo -e "\n等待服务完全启动后再访问..."
    echo -e "\n提示: 确保已创建 monitoring 网络 (docker network create monitoring)"
fi

如果本文帮助到了你,帮我点个广告可以咩(o′┏▽┓`o)


评论
  目录