Node_exporter部署脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
| #!/bin/bash
set -euo pipefail VERSION="1.9.0" GREEN='\e[32m' RED='\e[31m' RESET='\e[0m'
echo -e "${GREEN}[INFO] 系统初始化检测...${RESET}" ARCH=$(uname -m) case $ARCH in x86_64) ARCH="amd64";; aarch64) ARCH="arm64";; *) echo -e "${RED}[ERROR] 不支持的架构: $ARCH${RESET}"; exit 1 ;; esac
if grep -q "CentOS" /etc/os-release; then echo -e "${GREEN}[INFO] 修复yum源...${RESET}" sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo || { echo -e "${RED}[ERROR] yum源更新失败${RESET}"; exit 1; } sudo yum clean all sudo yum makecache fi
declare -a DEPS=("wget" "tar" "openssl") for pkg in "${DEPS[@]}"; do if ! command -v $pkg &> /dev/null; then echo -e "${GREEN}[INFO] 安装依赖: $pkg...${RESET}" sudo yum install -y $pkg || { echo -e "${RED}[ERROR] $pkg 安装失败${RESET}"; exit 1; } fi done
DOWNLOAD_URL="https://github.com/prometheus/node_exporter/releases/download/v${VERSION}/node_exporter-${VERSION}.linux-${ARCH}.tar.gz" echo -e "${GREEN}[INFO] 下载 Node Exporter...${RESET}" if ! wget -q -O node_exporter.tar.gz "$DOWNLOAD_URL"; then echo -e "${RED}[ERROR] 下载失败,请检查版本或网络${RESET}" exit 1 fi tar zxf node_exporter.tar.gz || { echo -e "${RED}[ERROR] 解压失败${RESET}"; exit 1; }
echo -e "${GREEN}[INFO] 安全部署配置...${RESET}" [ -d /opt/prometheus/ ] || sudo mkdir -p /opt/prometheus/ sudo mv "node_exporter-${VERSION}.linux-${ARCH}/" "/opt/prometheus/node_exporter/" sudo mkdir -p "/opt/prometheus/node_exporter/data"
if ! id "prometheus" &>/dev/null; then echo -e "${GREEN}[INFO] 创建 prometheus 用户...${RESET}" sudo useradd -r -s /sbin/nologin prometheus || { echo -e "${RED}[ERROR] 用户创建失败${RESET}"; exit 1; } fi sudo chown -R prometheus:prometheus "/opt/prometheus/node_exporter"
cat <<EOF | sudo tee /etc/systemd/system/node_exporter.service > /dev/null [Unit] Description=Node Exporter Documentation=https://prometheus.io/docs/guides/node-exporter/ After=network.target
[Service] User=prometheus Group=prometheus ExecStart=/opt/prometheus/node_exporter/node_exporter \ --web.listen-address=0.0.0.0:9100 \ --collector.systemd \ --collector.systemd.unit-whitelist="(ssh|docker|prometheus).service" Restart=on-failure RestartSec=30s LimitNOFILE=65536 StandardOutput=journal StandardError=journal
[Install] WantedBy=multi-user.target EOF
configure_firewall() { if systemctl is-active --quiet firewalld; then sudo firewall-cmd --permanent --add-port=9100/tcp && \ sudo firewall-cmd --reload elif command -v iptables &> /dev/null; then sudo iptables -A INPUT -p tcp --dport 9100 -j ACCEPT sudo service iptables save else echo -e "${RED}[WARN] 未检测到防火墙服务,请手动开放端口 9100${RESET}" fi } configure_firewall
sudo systemctl daemon-reload sudo systemctl enable --now node_exporter
check_service() { if ! systemctl is-active --quiet node_exporter; then echo -e "${RED}[ERROR] 服务启动失败,查看日志:journalctl -u node_exporter -n 50${RESET}" exit 1 fi echo -e "${GREEN}[SUCCESS] 服务已启动,监听端口:${RESET}" ss -tunlp | grep 9100 curl -s http://localhost:9100/metrics | grep 'node_' | head -5 } check_service
|
添加配置
vim prometheus/prometheus.yml
1 2 3 4 5 6 7 8 9 10 11 12 13
| # 定义一个名为 node-exporter 的采集任务 - job_name: 'node-exporter' # 采集间隔为15秒 scrape_interval: 15s static_configs: # 采集本地 Node Exporter 数据 - targets: ['node_exporter:9100'] labels: instance: Prometheus服务器 # 采集 IP 为 192.168.56.102 的 Node Exporter 数据 - targets: ['192.168.56.102:9100'] labels: instance: 102服务器
|
常用监控指标
http://192.168.56.101:9090/graph
CPU 监控指标
指标名称 | 含义 | 备注 |
---|
node_cpu_seconds_total{mode="idle"} | CPU在空闲模式下花费的总秒数 | 计算使用率:(1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance) |
node_cpu_seconds_total{mode="user"} | CPU在用户模式下花费的总秒数 | |
node_cpu_seconds_total{mode="system"} | CPU在系统模式下花费的总秒数 | |
node_load1 | 1分钟内的系统平均负载 | 建议结合CPU核心数评估,当值 > CPU核心数说明负载过高 |
node_load5 | 5分钟内的系统平均负载 | 长期负载指标,反映系统持续压力 |
node_load15 | 15分钟内的系统平均负载 | 趋势分析参考值 |
内存监控指标
指标名称 | 含义 | 备注 |
---|
node_memory_MemTotal_bytes | 系统总内存大小(字节) | 单位转换:/ (1024^3) 转换为GB |
node_memory_MemFree_bytes | 空闲内存量(字节) | |
node_memory_MemAvailable_bytes | 可用内存量(字节) | 更准确的内存可用指标(>=3.14内核版本) |
node_memory_Buffers_bytes | 缓冲区内存量(字节) | |
node_memory_Cached_bytes | 缓存内存量(字节) | |
node_memory_SwapTotal_bytes | 总交换空间大小(字节) | |
node_memory_SwapFree_bytes | 空闲交换空间大小(字节) | |
磁盘监控指标
指标名称 | 含义 | 备注 |
---|
node_disk_read_bytes_total | 磁盘读取总字节数 | 配合rate()函数计算IO吞吐量:rate(node_disk_read_bytes_total[5m]) |
node_disk_written_bytes_total | 磁盘写入总字节数 | 配合rate()函数计算IO吞吐量:rate(node_disk_written_bytes_total[5m]) |
node_disk_reads_completed_total | 完成的磁盘读操作总数 | |
node_disk_writes_completed_total | 完成的磁盘写操作总数 | |
node_disk_io_time_seconds_total | 磁盘I/O操作所花费的总时间(秒) | |
文件系统监控指标
指标名称 | 含义 | 备注 |
---|
node_filesystem_free_bytes{mount="/"} | 根分区剩余空间(字节) | 预测空间耗尽:predict_linear(node_filesystem_free_bytes[6h], 6*3600) |
node_filesystem_size_bytes | 文件系统总大小(字节) | |
node_filesystem_avail_bytes | 文件系统可用空间(字节) | |
node_filesystem_files | 文件系统中文件总数 | |
node_filesystem_files_free | 文件系统中可用文件数 | |
node_filesystem_size_bytes | 文件系统总大小(字节) | 查询总磁盘大小: node_filesystem_size_bytes{fstype!="", mountpoint="/"} |
node_filesystem_avail_bytes | 文件系统可用空间(字节) | 查询空闲磁盘大小: node_filesystem_avail_bytes{fstype!="", mountpoint="/"} |
网络监控指标
指标名称 | 含义 | 备注 |
---|
node_network_receive_bytes_total | 网络接收总字节数 | 按设备筛选:{device="eth0"} |
node_network_transmit_bytes_total | 网络发送总字节数 | 按设备筛选:{device="eth0"} |
node_network_receive_errs_total | 网络接收错误总数 | |
node_network_transmit_errs_total | 网络发送错误总数 | |
node_network_receive_drop_total | 网络接收丢弃总数 | |
node_network_transmit_drop_total | 网络发送丢弃总数 | |
常用应用监控报警
请查看:Prometheus 监控常用应用配置指南| 墨颜丶

