#!/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 上一篇
【脚本】设置 Ubuntu IP 静态地址【脚本】设置 Ubuntu IP 静态地址
2025-09-22
下一篇
【教程】安装 MCSManager 面板【教程】安装 MCSManager 面板
2025-09-19