Prometheus+Grafana入门教程:从零搭建云原生服务器监控系统
更多云服务器知识,尽在hostol.com
在我们动手之前,你必须先理解Prometheus的“哲学”,这和我们以往接触的很多监控工具,截然不同。
- 核心比喻:从“病人主动汇报”到“医生主动巡诊”
- 传统监控 (Push模式): 就像要求每一位“病人”(你的服务器),每隔5分钟,都必须自己打电话,向“医院”(监控中心)汇报一次自己的心率和体温。如果某个病人“忘记”了(比如网络问题),医院就收不到它的数据。
- Prometheus (Pull模式): 它更像一位极其负责的“主治医生”。它手里有一个“病人名单”(配置文件),它会每隔15秒,就主动地、挨个地,去“远程问诊”每一个病人:“嘿,你现在的心率体温是多少?报给我!” 这种“拉取”的模式,更主动、更中心化,也更可靠。
好了,理解了这位“医生”的工作模式,我们开始搭建它的“诊疗体系”。这个体系,主要由三部分构成。
第一步:给你的“病人”戴上传感器 —— node_exporter
Prometheus医生,不会说人类的语言,它只懂一种叫“Metrics”的、标准化的数据格式。我们的Linux服务器,默认是不会说这种“外星语”的。
所以,我们需要给服务器,安装一个“同声传译器 + 全身体征传感器”。这个工具,就是node_exporter
。
- 它是什么?
node_exporter
是一个由Prometheus官方出品的小程序。它运行在你的服务器上,不知疲倦地,收集这台服务器所有你能想到的“生命体征”——CPU使用率、内存、硬盘空间、网络流量、文件句柄……然后,它会把这些海量的、实时的数据,翻译成Prometheus医生能看懂的“Metrics”格式,并在一个默认的9100
端口上,像一个广播站一样,对外“广播”。 - 如何安装?
- 下载并解压: 去Prometheus官网的下载页面,找到
node_exporter
的最新版,复制linux-amd64
版本的链接。
- 下载并解压: 去Prometheus官网的下载页面,找到
Bash
# 登录到你要监控的服务器上
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xvfz node_exporter-1.7.0.linux-amd64.tar.gz
2.运行“传感器”:
Bash
cd node_exporter-1.7.0.linux-amd64/
./node_exporter & # &表示在后台运行
3验证: 现在,你的“传感器”已经在9100端口上开始广播了。我们来“偷听”一下。Bashcurl http://localhost:9100/metrics
你会看到屏幕上,滚过成百上千行,类似这样的“天书”。别怕,这就是Prometheus最喜欢的“语言”。
4.(专业建议)让它7x24小时工作: 为了让node_exporter
能开机自启,我们需要为它创建一个systemd
服务。
Bash
sudo nano /etc/systemd/system/node_exporter.service
写入以下内容:
Ini, TOML
[Unit]
Description=Node Exporter[Service]
User=node_exporter # 建议创建一个专门的用户
ExecStart=/path/to/your/node_exporter[Install]
WantedBy=default.target
- 然后,启动并设置开机自启。
第二步:建立“中央数据库”—— 安装并配置Prometheus
“传感器”已经就位,现在,我们需要建立一个“健康数据中心”,来定期地,收集并存储所有“病人”广播出来的健康数据。这个数据中心,就是Prometheus服务器。
- 下载并解压: 同样,去官网下载Prometheus的最新版。
Bash
wget https://github.com/prometheus/prometheus/releases/download/v2.46.0/prometheus-2.46.0.linux-amd64.tar.gz
tar xvfz prometheus-2.46.0.linux-amd64.tar.gz
2.编写“病人名册” (prometheus.yml
) cd
进入解压后的目录,你会看到一个prometheus.yml
文件。这是Prometheus唯一的、也是最重要的配置文件。它就是我们那位“主治医生”的“病人巡诊名单”。 用nano
编辑它,改成下面这样:
YAML
# 全局配置
global:scrape_interval: 15s # 每隔15秒,去“巡诊”一次# “巡诊”任务配置
scrape_configs:# 第一个任务,我们给它起名叫“node_exporter_group”- job_name: "node_exporter_group"static_configs:# 这个任务需要巡诊的“病房”列表- targets: ["localhost:9100"] # 目前,我们只监控自己
这份“巡诊名单”写得清清楚楚:每隔15秒,去localhost:9100
这个地址,采集一次健康数据。
3.启动“数据中心”!
Bash
./prometheus --config.file=prometheus.yml &
- Prometheus服务,现在已经在后台的
9090
端口上运行起来了。
第三步:第一次“专家会诊”—— 你的第一条PromQL
打开你的浏览器,访问 http://你的服务器IP:9090
。欢迎来到Prometheus简朴但强大的“专家会诊室”。
点击顶部的“Graph”菜单。在输入框里,输入我们传感器的某个“指标”名字,比如node_memory_MemAvailable_bytes
(可用内存大小),然后点击“Execute”。
看到了吗?一张实时更新的、关于你服务器可用内存的历史曲线图,就呈现在了你的眼前!
Prometheus的查询语言PromQL,极其强大。比如,你想计算“过去5分钟内,CPU在‘空闲(idle)’模式下的平均使用率”,你可以这样写: avg_over_time(rate(node_cpu_seconds_total{mode="idle"}[5m])[10m:])
这,就是“数据医生”的专业语言。
第四步:装修“可视化大屏”—— 终极神器Grafana登场
Prometheus的界面,对于“医生”来说,功能强大。但对于“病人”(我们自己)和“医院管理者”(老板)来说,它太简陋了。我们需要一个华丽的、直观的、能把所有健康数据,都变成漂亮仪表盘的“可视化驾驶舱”。
这个驾驶舱,就是Grafana。
- 安装Grafana: Grafana的安装,建议直接使用官方的源,过程很简单,这里不赘述。
- 启动并登录: 启动Grafana服务后,访问
http://你的服务器IP:3000
,默认用户名和密码都是admin
。 - 连接“数据中心”: 登录后,第一件事,就是告诉Grafana,我们的“健康数据”,存放在哪里。
- 点击左侧齿轮图标 -> “Data Sources”。
- 点击“Add data source”,选择“Prometheus”。
- 在HTTP的URL一栏,填入
http://localhost:9090
(Prometheus的地址)。 - 点击“Save & Test”。如果一切正常,会提示“Data source is working”。
- 见证“魔法”的终极时刻 —— 一键导入“世界级”仪表盘 我们不需要自己去一个一个地画图表。Grafana拥有一个全球共享的“仪表盘模板库”。
- 点击左侧加号图标 -> “Import”。
- 在“Import via grafana.com”的输入框里,输入一个神奇的数字:
1860
。1860
是什么?这是一个由社区大神制作、被全世界成千上万的人使用的、最经典的“Node Exporter Full”仪表盘模板的ID。
- 点击“Load”。Grafana会自动加载这个模板的详情。在最下方,选择一下我们刚才配置好的那个Prometheus数据源,然后点击“Import”。
然后,奇迹,发生了。
你的屏幕上,瞬间出现了一面由几十个精美的图表、仪表、数字组成的、极其专业、极其酷炫的“服务器健康状态驾驶舱”!
CPU使用率、内存、硬盘、网络、负载……所有你能想到的、甚至你从未想过的监控指标,都以一种前所未有的、优雅而直观的方式,呈现在了你的眼前。
你,已是自己服务器的“首席健康官”
看看你眼前这面由Grafana生成的、闪耀着数据光芒的仪表盘。这,不再是零散的命令和冰冷的数字。这是你服务器的“实时健康CT影像”。
你,已经从一个只能“感觉”服务器状态的“老司机”,进化成了一位能看懂所有遥测数据、能分析历史曲线、并能做出精准预判的“F1车队数据工程师”。
你掌握的,是云原生时代,最核心的“可观测性 (Observability)”能力。
去吧,去静静地,倾听你的系统。它,还有无数的故事,想要通过这些曲线,告诉你。