Prometheus 本身负责抓取、存储和查询时序指标,Exporter 负责把系统或服务状态转换为 Prometheus 指标。Node Exporter 采集 Linux 主机内部指标,Blackbox Exporter 从外部探测 HTTP、TCP、ICMP 和 DNS,两者解决的问题不同。
## Node Exporter:观察主机内部
Node Exporter 默认监听 9100,提供 CPU、内存、磁盘、文件系统、网络和内核指标。建议使用专用系统账号运行,校验官方发布包,并通过 systemd 管理。
```ini
[Unit]
Description=Prometheus Node Exporter
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
ExecStart=/usr/local/bin/node_exporter
Restart=on-failure
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
```
Prometheus 抓取配置:
```yaml
scrape_configs:
- job_name: linux-nodes
static_configs:
- targets:
- node01.example.internal:9100
- node02.example.internal:9100
```
验证:
```bash
curl http://127.0.0.1:9100/metrics
promtool check config /etc/prometheus/prometheus.yml
```
常用查询包括 CPU 非 idle 使用率、可用内存、磁盘空间、inode、磁盘 I/O 和网络错误。告警必须排除伪文件系统,并给出持续时间,避免瞬时波动造成噪声。
```promql
100 - avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100
node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100
node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"} / node_filesystem_size_bytes * 100
```
## Blackbox Exporter:从外部探测
Blackbox Exporter 使用 multi-target exporter 模式。Prometheus 把目标地址作为参数传给 Exporter,Exporter 执行探测并返回 probe_* 指标。
```yaml
modules:
http_2xx:
prober: http
timeout: 5s
http:
valid_status_codes: [200, 204]
preferred_ip_protocol: ip4
tcp_connect:
prober: tcp
timeout: 3s
```
Prometheus 配置:
```yaml
- job_name: blackbox-http
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- https://example.com/health
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: address
replacement: blackbox-exporter:9115
```
重点指标:probe_success、probe_duration_seconds、HTTP 状态码、TLS 证书到期时间和 DNS/连接各阶段耗时。
## 告警建议
- Node Exporter 不可达和主机不可用要区分。
- HTTP 探测连续失败一段时间再告警。
- TLS 到期设置多级阈值,如 30 天、14 天、7 天。
- 同时监控 Exporter 自身资源与抓取错误。
- 外部探测应从多个网络位置执行,避免只代表监控服务器的视角。
不要把 9100、9115 直接暴露公网;用防火墙、私网、反向代理认证或 Prometheus Agent 限制访问。Blackbox 配置可能访问任意目标,也应限制谁能调用探测接口。
## 排障顺序
1. 直接 curl Exporter 的 metrics 或 probe 接口。
2. 检查 Prometheus Targets 页面和抓取错误。
3. 查看服务日志、DNS、路由、防火墙和 SELinux。
4. 检查 relabel 后的实际 target 和 module。
5. 使用 PromQL 验证标签是否符合告警规则。
参考资料:
- https://prometheus.io/docs/guides/node-exporter/
- https://prometheus.io/docs/guides/multi-target-exporter/
- https://github.com/prometheus/blackbox_exporter