102 lines
7.0 KiB
Markdown
102 lines
7.0 KiB
Markdown
---
|
||
title: "家庭监控方案:Prometheus + Grafana + Node Exporter + cAdvisor + Blackbox"
|
||
type: source
|
||
tags: [grafana, monitoring, prometheus, home-server]
|
||
date: 2025-11-11
|
||
---
|
||
|
||
## Source File
|
||
- [[raw/Home Office/家庭监控方案:Prometheus + Grafana + Node Exporter + cAdvisor +Blackbox.md]]
|
||
|
||
## Summary (中文描述)
|
||
- 核心主题:家庭/家居服务器(NAS / Ubuntu Server)的一站式开源监控方案,通过 Docker Compose 快速部署完整的 Prometheus 监控栈。
|
||
- 问题域:如何对家庭服务器的主机层、容器层、服务层(HTTP 可用性、TLS 证书)进行全面的指标采集、存储、可视化和告警。
|
||
- 方法/机制:使用 Prometheus 作为时序数据库和告警规则引擎,node_exporter 采集主机指标,cAdvisor 采集容器资源,blackbox_exporter 做 HTTP/TLS 探测,Grafana 做可视化仪表盘,Alertmanager 分发告警到邮件/Slack。配合 Uptime Kuma 做合成可用性监控。
|
||
- 结论/价值:提供可直接拷贝的 docker-compose 模板、prometheus.yml、alerts.yml、alertmanager.yml,8 步落地路径,涵盖 PoC 验证到生产级部署的全流程。
|
||
|
||
## Key Claims (中文描述)
|
||
- Prometheus 通过 pull 模式定期抓取 node_exporter / cAdvisor / blackbox_exporter 暴露的指标,实现主机/容器/网络探测的统一采集。
|
||
- Grafana 可通过 Dashboard ID(如 Node Exporter Full: 1860)直接导入官方仪表盘,快速搭建可视化界面。
|
||
- Blackbox Exporter 通过 `probe_success == 0` 和 `probe_ssl_earliest_cert_expiry` 等指标实现 HTTP 可用性和 TLS 证书到期监控。
|
||
- node_exporter 以 host network 模式运行,挂载 `/proc`、`/sys`、`/` 为只读卷,实现无代理(agentless)主机指标采集。
|
||
- Docker socket 挂载(如 cAdvisor 中的 `/var/run/docker.sock`)是容器监控的必要条件,但需审慎评估安全风险。
|
||
- Alertmanager 支持邮件/Slack/Teams/Webhook/PagerDuty 等多通道告警路由,并提供告警抑制(inhibition)和分组(grouping)功能。
|
||
|
||
## Key Quotes
|
||
> "Prometheus 通过 pull 模式定期抓取 exporters 采集指标,支持 PromQL 命名与告警规则。适合做主观测时序库与告警。" — Prometheus 核心机制说明
|
||
|
||
> "Docker socket 挂载(风险:容器拿到宿主机 root 等同权限)。" — 安全警告
|
||
|
||
> "把监控流量/端口放在管理 VLAN 或通过防火墙限定访问。" — 网络安全建议
|
||
|
||
> "Grafana 仪表盘 JSON 导出,Prometheus rule 与配置放在 Git(GitOps)。" — 配置备份最佳实践
|
||
|
||
## Key Concepts
|
||
- [[Prometheus]]:开源时序数据库和监控告警系统,支持 PromQL 查询语言和告警规则引擎
|
||
- [[Grafana]]:开源可视化平台,支持多数据源仪表盘和告警管理
|
||
- [[node_exporter]]:Prometheus 官方主机指标采集器,采集 CPU/内存/磁盘/网络/I/O 等系统指标
|
||
- [[cAdvisor]]:Google 开源的容器资源监控工具,为 Prometheus 提供容器级别指标
|
||
- [[blackbox_exporter]]:Prometheus 官方黑盒探测 exporter,支持 HTTP/TCP/ICMP/DNS/TLS 探测
|
||
- [[Alertmanager]]:Prometheus 告警分发组件,支持告警分组、抑制、静默和多通道路由
|
||
- [[PromQL]]:Prometheus Query Language,用于查询时序指标和告警条件
|
||
- [[Uptime Kuma]]:自托管 uptime monitoring 工具,支持 HTTP/TCP/DNS/TLS 合成监控
|
||
- [[Netdata]]:开箱即用的实时主机/容器监控面板,默认 19999 端口,适合快速诊断
|
||
- [[VictoriaMetrics]]:Prometheus 时序数据库替代方案,支持长期存储和高效写入
|
||
- [[合成监控]](Synthetic Monitoring):通过模拟真实用户请求检测服务可用性和响应时间
|
||
- [[Exporter]]:Prometheus 生态中负责暴露指标数据的组件,通过 HTTP 端点提供 /metrics
|
||
- [[时序数据库]](Time Series Database):专门存储带时间戳的指标数据,支持高效的时间范围查询和聚合
|
||
- [[Prometheus告警规则]]:YAML 格式的告警条件定义,基于 PromQL 表达式触发状态变更
|
||
|
||
## Key Entities
|
||
- [[Prometheus]](CNCF 项目):时序数据库 + 监控告警平台核心
|
||
- [[Grafana Labs]]:Grafana 背后的公司和维护组织
|
||
- [[Docker]]:所有组件的部署平台,通过 Docker Compose 实现一键启动
|
||
- [[Uptime Kuma]](louislam/uptime-kuma):开源 uptime monitoring 工具
|
||
- [[Portainer]]:Docker 可视化管理工具,不替代 Prometheus 但便于运维快速操作
|
||
|
||
## Connections
|
||
- [[Prometheus]] ← 数据源 ← [[node_exporter]]
|
||
- [[Prometheus]] ← 数据源 ← [[cAdvisor]]
|
||
- [[Prometheus]] ← 数据源 ← [[blackbox_exporter]]
|
||
- [[Grafana]] ← 可视化 ← [[Prometheus]]
|
||
- [[Alertmanager]] ← 告警接收 ← [[Prometheus]]
|
||
- [[Prometheus]] ← 告警规则 ← [[Prometheus告警规则]]
|
||
- [[Grafana]] ← 仪表盘模板 ← [[Node Exporter Full Dashboard]]
|
||
- [[Docker Compose]] ← 编排 ← 所有组件(Prometheus / Grafana / Alertmanager / node_exporter / cAdvisor / blackbox_exporter)
|
||
|
||
## Contradictions
|
||
- 与 [[系统监控工具]](Btop++ / Htop / Glances / Netdata)相比:Netdata 适合实时短期诊断,Prometheus + Grafana 适合长期存储和趋势分析,两者可互补使用而非互斥。
|
||
- 与 [[ctp-topic-42-grafana-observability-dashboard]] 冲突:该来源标注为 expected(source missing),但内容为 Grafana 在 AWS 场景下的企业级应用;本来源侧重家庭服务器轻量部署,场景和规模不同。
|
||
- 与 [[ctp-topic-67-cloud-native-observability-using-opentelemetry]] 冲突:OpenTelemetry 是云原生可观测性新标准(metrics/traces/logs 三合一),Prometheus 生态更成熟但 OpenTelemetry 是未来方向;短期用 Prometheus,长期可考虑 OTel 迁移路径。
|
||
|
||
## Docker Compose 核心架构
|
||
```yaml
|
||
# 监控栈组件
|
||
services:
|
||
prometheus: # 时序数据库 + 告警引擎
|
||
grafana: # 可视化仪表盘
|
||
alertmanager: # 告警分发
|
||
node_exporter: # 主机指标(host network)
|
||
cadvisor: # 容器指标(挂载 /var/run/docker.sock)
|
||
blackbox: # HTTP/TCP 探测
|
||
```
|
||
|
||
## 关键监控项(PromQL 示例)
|
||
| 指标 | PromQL 表达式 | 阈值 |
|
||
|------|--------------|------|
|
||
| 磁盘空间 | `node_filesystem_avail_bytes / node_filesystem_size_bytes < 0.10` | < 10% |
|
||
| CPU 使用率 | `avg(rate(node_cpu_seconds_total[2m])) * 100 > 85` | > 85% |
|
||
| 内存可用 | `node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes < 0.15` | < 15% |
|
||
| HTTP 可用性 | `probe_success == 0` (持续 2min) | 探测失败 |
|
||
| TLS 证书到期 | `probe_ssl_earliest_cert_expiry - time() < 86400 * 14` | < 14 天 |
|
||
|
||
## 落地 8 步路径
|
||
1. 用 PoC docker-compose 启动 Netdata + Uptime Kuma(19999 / 3001)验证
|
||
2. 上线 Prometheus + prometheus.yml,配置 scrape_configs
|
||
3. 每台主机部署 node_exporter(host network 模式)
|
||
4. Grafana 导入 Dashboard(1860 / 14282 / 7587)
|
||
5. Alertmanager 配置告警路由(邮件/Slack)
|
||
6. Uptime Kuma 建好所有内外网探测项
|
||
7. GitOps 配置管理(Grafana JSON 导出,Prometheus rules 放 Git)
|
||
8. TLS 证书到期告警(blackbox_exporter 或 Uptime Kuma)
|