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_exporter、blackbox_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_exporter 和 blackbox_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