上一篇讲了监控方法论,这篇动手落地:用 Prometheus 采集一台 Linux 主机的指标,再用 Grafana 画成面板。这是目前云原生生态里最主流的监控组合,理解它的工作流程后,再监控 MySQL、Nginx 或自己的应用都是同一套路。
整体架构:拉模型
Prometheus 的核心特点是主动拉取(Pull):它按配置的时间间隔访问各目标暴露的 /metrics HTTP 接口,把文本格式的指标抓回来存进内置时序数据库。被监控方只需要「暴露」,不需要知道监控系统的存在。
三个角色:
- Exporter:运行在被监控机器上,把系统/服务状态翻译成 Prometheus 文本格式。监控 Linux 主机用
node_exporter。 - Prometheus Server:定时抓取、存储、提供 PromQL 查询接口。
- Grafana:连接 Prometheus 做可视化展示(Prometheus 自带 UI 只适合临时查询)。
第一步:部署 node_exporter
在被监控机器上(以 Linux amd64 为例):
# 下载官方发布的二进制(版本号以 releases 页面为准)wget https://github.com/prometheus/node_exporter/releases/download/v1.9.1/node_exporter-1.9.1.linux-amd64.tar.gztar xzf node_exporter-1.9.1.linux-amd64.tar.gzsudo cp node_exporter-1.9.1.linux-amd64/node_exporter /usr/local/bin/用 systemd 管理,新建 /etc/systemd/system/node_exporter.service:
[Unit]Description=Node ExporterAfter=network.target
[Service]User=nobodyExecStart=/usr/local/bin/node_exporterRestart=on-failure
[Install]WantedBy=multi-user.targetsudo systemctl daemon-reloadsudo systemctl enable --now node_exportercurl http://localhost:9100/metrics | head最后一行应该输出大量 node_cpu_seconds_total、node_memory_MemAvailable_bytes 之类的指标——采集端就绪。
第二步:配置 Prometheus 抓取
Prometheus 的配置文件 prometheus.yml 里加一段 job:
scrape_configs: - job_name: "node" scrape_interval: 15s static_configs: - targets: ["10.0.1.11:9100", "10.0.1.12:9100"] labels: env: "production"scrape_interval: 15s是全局常用值,太密浪费存储,太疏丢失细节。labels会附加到这个 job 抓到的所有序列上,是多环境区分的标准做法。
改完执行 promtool check config prometheus.yml 校验,再重启或调用 /-/reload 热加载。打开 Prometheus 自带 UI(:9090/targets),目标状态变为 UP 即成功。
第三步:PromQL 入门五连
PromQL 是这套体系的核心资产,掌握五个常用查询就能应对日常:
# 1. CPU 使用率(按实例):1 减去空闲比例,irate 取最近两点瞬时变化率100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# 2. 内存使用率(1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100
# 3. 根分区磁盘使用率100 - (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"} * 100)
# 4. 磁盘 IO 繁忙度irate(node_disk_io_time_seconds_total[5m]) * 100
# 5. 网络入向流量(字节/秒)irate(node_network_receive_bytes_total{device="eth0"}[5m])几个关键点:irate 对计数器求「每秒增长」;[5m] 是采样窗口,至少为抓取间隔的 2~4 倍;by (instance) 是聚合维度。在 UI 的 Graph 页逐个输入观察曲线,比背语法更快建立直觉。
第四步:接入 Grafana
- Grafana 里添加 Data source → Prometheus,填
http://<prometheus地址>:9090。 - Dashboards → Import,输入官方共享面板 ID——Node Exporter Full 的面板 ID 是
1860,导入后选择数据源即得一套完整主机监控页。 - 之后可以基于导入的面板删改:保留 CPU、内存、磁盘、网络四组核心图,去掉用不上的硬件传感器图表。
数据保留与容量规划
Prometheus 默认把数据存 15 天(--storage.tsdb.retention.time)。粗略估算磁盘占用:每个活跃时间序列每秒样本约 12 字节。一台 node_exporter 约暴露 1000 个序列,15 秒抓取一次,15 天约 36 GB——几十台机器的规模单机 Prometheus 完全扛得住。
需要更长保留期或全局查询时,再考虑 Thanos、VictoriaMetrics 这类横向扩展方案,初期不必过度设计。
下一步
主机监控跑通后,按相同模式扩展:MySQL 用 mysqld_exporter,Nginx 用 nginx-prometheus-exporter,自己的应用则引入客户端库(如 Go 的 prometheus/client_golang)在代码里暴露 /metrics。采集-存储-展示的管道不变,只是数据来源变多。
延伸阅读
分享文章
生成精美分享图或复制链接,与更多人分享本文。
继续阅读
最后更新于 ,距今已过 12 天
部分内容可能已过时