Prometheus 采集节点指标: blackbox_exporter、node_exporter 与 vmagent

Grafana 版本探针

blackbox_exporter

blackbox_exporter 是 Prometheus 官方提供的黑盒监控组件, 用于通过 HTTP / HTTPS / TCP / ICMP / DNS 等方式, 对外部服务和网络连通性进行探测。常用于 API 接口可用性检测、端口连通性测试以及三网 (电信 / 联通 / 移动) 延迟监测。

创建普通用户

使用独立普通用户运行 blackbox_exporter

useradd -M -s /sbin/nologin blackbox

建立专属文件夹

创建安装目录

mkdir -p /opt/blackbox

下载安装 blackbox

blackbox_exporter 0.28.0 版本存在严重缺陷: 无论探测结果是否符合预期, 都会以 ERROR 级别记录探测失败日志, 且无法关闭该错误日志, 从而产生大量无效日志, 不仅占用磁盘空间, 还会对告警判断造成干扰。

相关问题说明: Version 0.28.0 always logs probe failures (as ‘ERROR’ level failures) with no way to turn it off

不建议在生产环境中使用 0.28.0 版本, 建议选择 0.27.0 或官方已明确修复该问题的后续版本。

# 下载
wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.27.0/blackbox_exporter-0.27.0.linux-amd64.tar.gz

# 解压文件
tar zxvf blackbox_exporter-0.27.0.linux-amd64.tar.gz

# 拷贝文件到安装目录
cd blackbox_exporter-0.27.0.linux-amd64
cp blackbox_exporter /opt/blackbox/
cp blackbox.yml /opt/blackbox/

设置文件权限

chown -R blackbox:blackbox /opt/blackbox
chmod 550 /opt/blackbox/blackbox_exporter
chmod 440 /opt/blackbox/blackbox.yml

如果系统启用了 SELinux, 需额外设置上下文

semanage fcontext -a -t bin_t "/opt/blackbox/blackbox_exporter"
semanage fcontext -a -t etc_t "/opt/blackbox/blackbox.yml"
restorecon -Rv /opt/blackbox

创建 systemd 服务

编辑服务文件

vim /etc/systemd/system/blackbox.service

写入以下内容

[Unit]
Description=Blackbox Exporter Service
After=network.target

[Service]
User=blackbox
Group=blackbox
WorkingDirectory=/opt/blackbox
ExecStart=/opt/blackbox/blackbox_exporter \
  --config.file=blackbox.yml \
  --web.listen-address=127.0.0.1:59115

Restart=always
RestartSec=5

# Privileges
NoNewPrivileges=true
AmbientCapabilities=CAP_NET_RAW
CapabilityBoundingSet=CAP_NET_RAW

# Filesystem
ProtectSystem=strict
ProtectHome=true
ReadOnlyPaths=/opt/blackbox

# Kernel & devices
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectKernelLogs=true
ProtectControlGroups=true
PrivateDevices=true
PrivateTmp=true

# Memory & process hardening
MemoryDenyWriteExecute=true
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX

[Install]
WantedBy=multi-user.target

启动与管理服务

systemctl daemon-reload

systemctl start blackbox
systemctl enable blackbox
systemctl status blackbox

# 重启与日志查看
systemctl restart blackbox
journalctl -f --output cat -u blackbox

手动启动 (调试用)

在调试或排错时, 可直接前台启动

./blackbox_exporter --config.file=blackbox.yml --web.listen-address=127.0.0.1:59115

功能测试

通过 ICMP 探测验证 blackbox_exporter 是否正常工作

curl "http://127.0.0.1:59115/probe?module=icmp&target=1.1.1.1"

返回结果中 probe_success 1, 说明探测正常

node_exporter

node_exporter 用于采集主机的运行指标, 如 CPU、内存、磁盘、网络等, 是 Prometheus 监控体系中最基础、最常用的节点指标采集组件。

创建普通用户

使用独立普通用户运行 node_exporter

useradd -M -s /sbin/nologin promnode

建立专属文件夹

创建安装目录及 textfile collector 使用的目录

mkdir -p /opt/promnode/textfile

下载安装 node_exporter

# 下载
wget https://github.com/prometheus/node_exporter/releases/download/v1.10.2/node_exporter-1.10.2.linux-amd64.tar.gz

# 解压文件
tar zxvf node_exporter-1.10.2.linux-amd64.tar.gz

# 拷贝文件到安装目录
cd node_exporter-1.10.2.linux-amd64
cp node_exporter /opt/promnode/

生成 textfile collector 指标, 用于记录主机的默认出口网卡名称, 以便在 Prometheus 中筛选和统计默认网卡的流量相关指标

echo "default_interface{device=\"$(ip route | grep default | awk '{print $5}')\"} 1" > /opt/promnode/textfile/default_interface.prom

设置文件权限

chown -R promnode:promnode /opt/promnode
chmod 750 /opt/promnode/node_exporter

如果系统启用了 SELinux, 需额外设置上下文

semanage fcontext -a -t bin_t "/opt/promnode/node_exporter"
restorecon -Rv /opt/promnode

创建 systemd 服务

编辑服务文件

vim /etc/systemd/system/node.service

写入以下内容

[Unit]
Description=Node Exporter Service
After=network.target

[Service]
User=promnode
Group=promnode
WorkingDirectory=/opt/promnode
ExecStart=/opt/promnode/node_exporter \
  --web.disable-exporter-metrics \
  --web.listen-address=127.0.0.1:59100 \
  --collector.disable-defaults \
  --collector.stat \
  --collector.cpu \
  --collector.filesystem \
  --collector.filesystem.fs-types-exclude='^(tmpfs)$' \
  --collector.netdev \
  --collector.netdev.device-exclude='lo' \
  --collector.textfile \
  --collector.textfile.directory=textfile

Restart=always
RestartSec=5

# Privileges
NoNewPrivileges=true

# Filesystem
ProtectHome=true
ReadWritePaths=/opt/promnode/textfile
ReadOnlyPaths=/opt/promnode

# Kernel & devices
ProtectKernelTunables=true
ProtectControlGroups=true
PrivateDevices=true

# Memory & process hardening
MemoryDenyWriteExecute=true
RestrictAddressFamilies=AF_INET AF_NETLINK AF_PACKET

[Install]
WantedBy=multi-user.target

启动与管理服务

systemctl daemon-reload

systemctl start node
systemctl enable node
systemctl status node

# 重启与日志查看
systemctl restart node
journalctl -f --output cat -u node

手动启动 (调试用)

在调试或排错时, 可直接前台启动

./node_exporter --web.disable-exporter-metrics --web.listen-address=127.0.0.1:59100 --collector.disable-defaults --collector.stat --collector.cpu --collector.filesystem --collector.filesystem.fs-types-exclude='^(tmpfs)$' --collector.netdev --collector.netdev.device-exclude='lo' --collector.textfile --collector.textfile.directory=textfile

vmagent

vmagent 是 VictoriaMetrics 提供的轻量级指标采集与转发组件, 功能上类似于 Prometheus 的 scrape + remote_write 组合, 但在资源占用、可靠性和高并发场景下表现更优。

本部署方案中, vmagent 采用 主动上报 (remote_write) 模式:

  • 本地定期抓取 node_exporterblackbox_exporter 等指标
  • 将数据主动推送到远端 Prometheus 接口
  • 当网络短暂中断时, 数据会先缓存在本地磁盘, 网络恢复后自动补传, 避免因网络抖动导致指标丢失

该模式非常适合服务器分布在不同地域、网络质量不稳定或跨公网部署的监控场景。

创建普通用户

使用独立普通用户运行 vmagent

useradd -M -s /sbin/nologin vmagent

建立专属文件夹

创建安装目录及缓存目录

mkdir -p /opt/vmagent/cache

下载安装 vmagent

# 下载
wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.133.0/vmutils-linux-amd64-v1.133.0.tar.gz

# 创建临时文件夹
mkdir /tmp/vm_temp

# 解压文件
tar -C /tmp/vm_temp -zxvf vmutils-linux-amd64-v1.133.0.tar.gz

# 拷贝文件到安装目录
cp /tmp/vm_temp/vmagent-prod /opt/vmagent/vmagent

# 清理临时文件夹
rm -rf /tmp/vm_temp

编辑 scrape.yml 配置文件

配置 vmagent 的指标采集规则, 用于定义需要抓取的目标和采集方式。

vim /opt/vmagent/scrape.yml

写入以下内容, 用于采集主机的运行指标, 数据来源为 node_exporter。如有需要, 也可以在此基础上添加 blackbox_exporter 的三网 TCP 或 ICMP 延迟监测采集任务。

scrape_configs:
  - job_name: "linux_servers"
    scrape_interval: 10s
    scrape_timeout: 5s
    static_configs:
      - targets: ["127.0.0.1:59100"]

(可选) remote_write 安全配置

配置 vmagent 向远端 Prometheus / VictoriaMetrics 接口进行 remote_write 时的安全认证方式。可根据实际环境选择 mTLS、用户名密码 (Basic Auth), 也可以同时启用。

设置 mTLS

启用 mTLS (双向 TLS) 后, vmagent 将使用客户端证书与远端服务器进行双向身份验证, 适用于对通信安全性要求较高的场景。

在启用前需注意以下事项

  • 需提前准备好客户端证书 (vmagent.crt / vmagent.key), 可使用自签证书, 并放置在 /opt/vmagent/ 目录下
  • 远端服务器需已正确配置, 并信任用于签发客户端证书的自签 Root CA, 否则连接将无法建立
chmod 440 /opt/vmagent/vmagent.crt
chmod 440 /opt/vmagent/vmagent.key

启用 mTLS 后, vmagent 启动时需额外指定客户端证书参数 (见下文说明)

设置用户名密码验证 (Basic Auth)

当远端写入接口启用了 HTTP Basic Authentication 时, 可通过文件方式为 vmagent 提供认证信息, 避免在命令行或 systemd 文件中明文暴露密码。

用户名可直接写在启动参数中, 密码推荐通过 passwordFile 方式读取

echo 'your_password_here' > /opt/vmagent/remote_pass
chmod 640 /opt/vmagent/remote_pass
chown root:vmagent /opt/vmagent/remote_pass

设置文件权限

创建空环境变量文件

touch /opt/vmagent/env

设置权限

chown -R vmagent:vmagent /opt/vmagent
chmod 750 /opt/vmagent/vmagent
chmod 750 /opt/vmagent/cache
chmod 640 /opt/vmagent/scrape.yml
chown root:vmagent /opt/vmagent/env
chmod 640 /opt/vmagent/env

如果系统启用了 SELinux, 需额外设置上下文

semanage fcontext -a -t bin_t "/opt/vmagent/vmagent"
semanage fcontext -a -t etc_t "/opt/vmagent/scrape.yml"
semanage fcontext -a -t etc_t "/opt/vmagent/env"
restorecon -Rv /opt/vmagent

创建 systemd 服务

编辑环境变量

vim /opt/vmagent/env

填入远端采集服务器地址以及用于区分节点的服务器标签

VM_REMOTE_URL=https://status.acesheep.com/collect/target
VM_SERVER_LABEL=1.1.1.1

编辑服务文件

vim /etc/systemd/system/vmagent.service

写入以下内容

[Unit]
Description=vmagent - VictoriaMetrics data collector
After=network-online.target
Wants=network-online.target

[Service]
User=vmagent
Group=vmagent
WorkingDirectory=/opt/vmagent
EnvironmentFile=/opt/vmagent/env
ExecStart=/opt/vmagent/vmagent \
  -promscrape.config=scrape.yml \
  -httpListenAddr='' \
  -remoteWrite.forcePromProto \
  -remoteWrite.maxDiskUsagePerURL=50MB \
  -remoteWrite.tmpDataPath=cache \
  -remoteWrite.label=server=${VM_SERVER_LABEL} \
  -remoteWrite.url=${VM_REMOTE_URL} \
  -remoteWrite.queues=10

Restart=always
RestartSec=5

# Privileges
NoNewPrivileges=true

# Filesystem
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/vmagent/cache

# Kernel & devices
PrivateTmp=true

[Install]
WantedBy=multi-user.target

(可选) 启用 mTLS 时, 需要在 ExecStart 中添加以下参数, 用于指定客户端证书与私钥

-remoteWrite.tlsCertFile=vmagent.crt \
-remoteWrite.tlsKeyFile=vmagent.key

(可选) 远端写入接口启用了 Basic Auth 时, 可在 ExecStart 中追加以下参数

-remoteWrite.basicAuth.username=your_user \
-remoteWrite.basicAuth.passwordFile=remote_pass

启动与管理服务

systemctl daemon-reload

systemctl start vmagent
systemctl enable vmagent
systemctl status vmagent

# 重启与日志查看
systemctl restart vmagent
journalctl -f --output cat -u vmagent

手动启动 (调试用)

在调试或排错时, 可直接前台启动

./vmagent -promscrape.config=scrape.yml -httpListenAddr='' -remoteWrite.forcePromProto -remoteWrite.maxDiskUsagePerURL=100MB -remoteWrite.tmpDataPath=cache -remoteWrite.label='server=1.1.1.1' -remoteWrite.url=http://11.22.33.44:9090/api/v1/write -remoteWrite.queues=10 -remoteWrite.basicAuth.username=your_user -remoteWrite.basicAuth.passwordFile=remote_pass

一键安装脚本

通过一条命令即可完成整个安装流程, 可自动完成 node_exporterblackbox_exporter 的下载、安装、权限设置以及 systemd 服务配置, 适合在大规模服务器环境中快速部署并上线监控。

bash <(curl -sL shell.puka.cc/tz) --node
bash <(curl -sL shell.puka.cc/tz) --blackbox
bash <(curl -sL shell.puka.cc/tz) --vmagent
最后更新于 2026-01-15