Files
nexus/wiki/sources/家庭监控方案-prometheus-grafana-node-exporter-cadvisor-blackbox.md

102 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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.yml8 步落地路径,涵盖 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 与配置放在 GitGitOps。" — 配置备份最佳实践
## 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]] 冲突:该来源标注为 expectedsource 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 Kuma19999 / 3001验证
2. 上线 Prometheus + prometheus.yml配置 scrape_configs
3. 每台主机部署 node_exporterhost network 模式)
4. Grafana 导入 Dashboard1860 / 14282 / 7587
5. Alertmanager 配置告警路由(邮件/Slack
6. Uptime Kuma 建好所有内外网探测项
7. GitOps 配置管理Grafana JSON 导出Prometheus rules 放 Git
8. TLS 证书到期告警blackbox_exporter 或 Uptime Kuma