用 node_exporter 搭一套够用的监控

单机、几十个指标,不需要 Prometheus + Grafana + Alertmanager 全套。 我的组合是:node_exporter 暴露指标,VictoriaMetrics 单进程收, 告警用 vmalert 的几条规则,通知直接走 Telegram。

采集端

apt install -y prometheus-node-exporter
systemctl enable --now prometheus-node-exporter
curl -s localhost:9100/metrics | grep -c '^node_'

默认只监听 :9100,一定要在防火墙里挡掉外网, 或者直接加 --web.listen-address=127.0.0.1:9100。 这个端口泄露的信息比你想的多:内核版本、挂载点、systemd 单元名。

存储端

docker run -d --name vm \
  -v /srv/vm:/victoria-metrics-data \
  -p 127.0.0.1:8428:8428 \
  victoriametrics/victoria-metrics:v1.102.0 \
  -retentionPeriod=90d

单机场景下 VictoriaMetrics 比 Prometheus 省内存,写入吞吐也够, 而且 -retentionPeriod 一句话搞定保留期。

真正会响的告警

指标收上来只是第一步。我删掉了大部分「看起来专业」的规则,只留三条:

规则阈值为什么留
磁盘剩余 < 15% 这台机器吃过一次日志打满的亏,恢复很麻烦
内存可用 < 300MiB 持续 10 分钟 OOM killer 出手之前先知道
证书剩余天数 < 14 天 续期失败时唯一能救命的信号

证书这条用 blackbox_exporter 的 probe_ssl_earliest_cert_expiry, 比自己去读文件靠谱,因为它测的是真正对外提供服务的那条链路。

一个容易忽略的点

监控自己也会挂。我把「连续 3 分钟收不到某台机器的 up 指标」 也做成告警,否则 agent 死了你以为机器很健康。 另外告警要能自证:定期发一条测试消息,确认通道没被静音。

资源开销

整套下来常驻内存不到 150MB,磁盘 90 天约 1.2GB(十几台机器、 15 秒采集)。对一台 2C2G 的小机器来说完全可以接受。

告警宁少勿多。每条不痛不痒的告警,都在稀释真正重要的那一条。
监控 Prometheus VictoriaMetrics