背景
你是否有遇到过甲方爸爸提出的各种新颖的需求,比如一款后台管理系统需要获取服务器性能指标,提供实时监控、报警等功能。实际这些也都是有价值的事情,如果客户自己承担起管理和监控的责任,也能减少运维人员的负担和压力。同时对于开发人员来说,一套完备的监控方案,能有效定位 bug 的原因。但无论从开始的技术选型、架构设计,还是到具体实施过程中数据处理、规则匹配等前后端开发,都是一项非常繁杂而耗时的事情。当然,你可以说咱们直接用现成的云服务器提供的各种服务不香吗?是真香啊!不过出于成本考虑,同时又可以在学习的过程中获得成就感。迎难而上只有通过自身的实践,才能获取真正属于自己的财富,这也是咱们技术人员的初心。
准备开始
为避免 macOS 因系统升级导致开发环境受到影响,使用了 Parallels 安装 Ubuntu 18.04 版本的虚拟机,因此搭建流程围绕 Linux 进行,同学们可根据实际情况进行工具包的版本调整。
初步搭建
- 下载 node_exporter 和 Prometheus,其中 node_exporter 是 Prometheus 官网提供的系统运行指标数据采集器,例如:CPU、内存、磁盘等。


- 安装 node_exporter,并运行,默认地址是 localhost:9100,浏览器输入地址后,能看到 Metrics 表示运行成功。
# 解压到/usr/local
tar -C /usr/local -xzf node_exporter-1.3.0.linux-amd64.tar.gz
# 进入
cd /usr/local/node_exporter-1.3.0.linux-amd64/
# 运行采集器
nohup ./node_exporter & 
- 安装 Prometheus,配置 node_exporter 采集器地址,并运行。
# 解压
tar -zxf prometheus-2.35.0-rc1.linux-amd64.tar.gz
# 移动到指定目录
mv prometheus-2.35.0-rc1.linux-amd64 /usr/local/prometheus
# 进行配置文件修改
cd /usr/local/prometheus
# 在 prometheus.yml 中定位到 scrape_configs
# 添加 node_exporter 采集器的地址,其中 job_name 命名是自定义
vim prometheus.yml
l# 添加数据存储路径
mkdir data
# 启动
nohup /usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --storage.tsdb.path=/usr/local/prometheus/data & 
- 浏览器输入 Prometheus 的默认地址 localhost:9090,进入 targets,可以看到 node_exporter 已纳入到 Prometheus 的监控体系中了。

- 进入 Graph 页面,选择或输入具体监控的系统指标,点击 Execute 执行,生成可视化面板。

对于不追求效果的同学们,那咱们已经入门啦!
Grafana 部署
Prometheus 在数据面板方面确实比较简单,毕竟作为一款开源的监控工具,它已足够优秀。
- 安装 Grafana,并运行。
# 下载
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-8.5.2.linux-amd64.tar.gz
# 解压
tar -zxf grafana-enterprise-8.5.2.linux-amd64.tar.gz
# 移动
mv grafana-8.5.2/ /usr/local/grafana
# 运行
nohup /usr/local/grafana/bin/grafana-server &
- 默认地址是 localhost:3000,默认用户名:admin,密码:admin,首次登录会要求更新密码,也可跳过。

- 进入 Grafana 后,添加数据源,选择 Prometheus,并配置默认地址 localhost:9090,实际填写的是服务器内部的IP地址 + 端口 9090 。


- Grafana 官网提供了很多监控模板,咱们可以参考选用。为跟 node_exporter 匹配,选用模板 1 Node Exporter for Prometheus Dashboard EN 20201010,点击 Load 加载配置。

- 选择 Prometheus 后,执行 import ,之后在 Dashboard 中看到监控的效果。


至此,我们已经完成了整体部署,实现了监控服务器系统指标的目的,是不是很简单!其中 Prometheus 和 Grafana 的规则配置、语法详情、指标分析等这里不再赘述,感兴趣的同学可根据实际需求,自行研究。
