如何用 Grafana + Prometheus 搭建性能监控系统
Posted on Wed, 25 Dec 2024 10:32:08 +0800 by LiangMingJian
如何用 Grafana + Prometheus 搭建性能监控系统
监控系统组成
通过搭建 Grafana,Prometheus 以及 Exporter 来建立性能监控系统。
Grafana 是由 Grafana Labs 公司开源的一个监控仪表系统。它可以帮助用户简化监控的复杂度,用户只需提供数据,便可以生成各种可视化仪表。同时还支持报警功能,可以在系统出现问题时通知用户。
Prometheus 同样是 Grafana Labs 公司开源的一个时间序列数据库。它并不直接监控特定目标的各项指标,比如 CPU,内存,存储数据,它主要任务是数据的收集和存储,通过统计分析对外提供数据查询支持。
Exporter 是客户机上用来获取数据的一个程序。因为 Prometheus 不对数据进行采集,因此,为了能够监控到系统的资源使用情况,就需要在客户机上安装 Exporter 来捕获数据。Prometheus 周期性的从 Exporter 暴露的 HTTP 服务地址中拉取监控样本数据。
需要注意 Exporter 是一组程序的概念,它并不只是某一个特定程序,不同的数据捕获需求需要使用不同的 Exporter 捕获程序。
Grafana,Prometheus,Exporter 间的工作关系如下图。

Grafana,Prometheus 以及 Exporter 的对应的官方网站如下:
Grafana 安装
在这里,由于当前国内无法访问官方 docker 仓库,因此为了避免增加工作量,这里选择直接下载相应的二进制源代码文件手动安装运行。
首先,根据你的系统,点击 下载页面 上的Linux或ARM标签,下载目标的文件。

比如,Linux AMD 64 位安装包: grafana_12.3.0_19497075765_linux_amd64.tar.gz
然后在下载完成后,将下载的安装包上传至服务器,执行以下命令解压:
tar -zxvf grafana_12.3.0_19497075765_linux_amd64.tar.gz
解压完成后,按顺序执行以下指令,完成 Grafana 服务安装:
# 创建一个 Grafana 用户
useradd -r -s /bin/false grafana
# 将解压后的安装包移动到 /usr/local/grafana
mv ./grafana-12.3.0 /usr/local/grafana
# 将 /usr/local/grafana 这个文件夹的所有者改为 Grafana
chown -R grafana:users /usr/local/grafana
# 复制默认配置为新的配置 grafana.ini
cp /usr/local/grafana/conf/defaults.ini /usr/local/grafana/conf/grafana.ini
# 创建 Grafana 服务的 systemd 文件(文件内容见下文)
touch /etc/systemd/system/grafana-server.service
vi /etc/systemd/system/grafana-server.service
# 手动启动服务,等待服务完成安装配置(出现 Usage stats are ready to report)
/usr/local/grafana/bin/grafana server --homepath /usr/local/grafana
# 在完成配置后,结束服务器运行
Ctrl + C
# 再次更新 /usr/local/grafana 所有者为 Grafana
chown -R grafana:users /usr/local/grafana
systemd 文件 grafana-server.service 的内容
[Unit]
Description=Grafana Server
After=network.target
[Service]
Type=simple
User=grafana
Group=users
ExecStart=/usr/local/grafana/bin/grafana server --config=/usr/local/grafana/conf/grafana.ini --homepath=/usr/local/grafana
Restart=on-failure
[Install]
WantedBy=multi-user.target
在上述操作完成后,Grafana 就作为一个服务安装到 Linux 系统上了,此时可以通过 systemctl 命令来控制服务的启动,停止。
# 启动
systemctl daemon-reload
systemctl start grafana-server
# 开机自启
systemctl enable grafana-server.service
# 运行状态
systemctl status grafana-server.service
Grafana 默认访问端口为 3000(请注意开放端口),默认的账号密码为 admin - admin。
firewall-cmd --zone=public --add-port=3000/tcp --permanent
firewall-cmd --reload

Prometheus 安装
在这里,同样因为无法使用 docker,所以 Prometheus 也要使用二进制源代码进行安装。
首先,根据你的系统,在 下载页面 上找到你所需要版本的二进制源代码文件。

比如,Linux AMD 64 位安装包: prometheus-3.5.0.linux-amd64.tar.gz
然后在下载完成后,将下载的安装包上传至服务器,执行以下命令解压:
tar -zxvf prometheus-3.5.0.linux-amd64.tar.gz
解压完成后,按顺序执行以下指令,完成 Prometheus 服务安装:
# 进入项目文件夹
cd prometheus-3.5.0.linux-amd64
# 赋予权限
chmod -R 755 ./
# 执行(这是前台执行,会在终端中显示 prometheus 日志)
./prometheus --config.file=prometheus.yml
# 可以替换为后台执行命令(提供一个 prometheus.log 文件记录日志)
nohup ./prometheus --config.file=prometheus.yml > prometheus.log 2>&1 &
# 保存执行的 pid,以便后续通过 kill 进行结束
echo $! > prometheus.pid
# 结束运行
cat prometheus.pid
kill 10652
Prometheus 正常启动后,可以访问 http://localhost:9090 或 http://localhost:9090/metrics 查看系统状态(注意开启防火墙端口)。
firewall-cmd --zone=public --add-port=9090/tcp --permanent
firewall-cmd --reload

Exporter 安装
Exporter 是一组程序,依据不同的设备,不同的捕获内容可以安装不同的 Exporter,官方支持的 Exporter 可以在这个链接 Exporters 中查看。
不过对于大部分机器,常规的 CPU,内存,进程等占用监控可以直接访问 prometheus 官方项目地址,下载其中的 node_exporter 使用。

以监控 Linux 主机的 node_exporter 举例,进入项目的 Releases 页面,选择对应的版本下载,比如: node_exporter-1.10.2.linux-amd64.tar.gz

在下载后,将文件上传至服务器,按顺序执行以下命令,启动 node_exporter 捕获程序:
# 解压文件
tar -zxvf node_exporter-1.10.2.linux-amd64.tar.gz
# 进入文件夹
cd node_exporter-1.10.2.linux-amd64
# 赋予权限
chmod -R 755 ./
# 后台执行(提供一个 node_exporter.log 文件记录日志)
nohup ./node_exporter > node_exporter.log 2>&1 &
# 记录 pid
echo $! > node_exporter.pid
# 结束进程
cat node_exporter.pid
ps aux | grep "node_exporter"
kill PID
node_exporter 在启动后会监听 9100 端口,请注意在防火墙开放,同时提供一个界面 http://localhost:9100/metrics 用来查看状态。
firewall-cmd --zone=public --add-port=9100/tcp --permanent
firewall-cmd --reload

在 Prometheus 中添加客户机 node_exporter
Prometheus 需要在配置文件 prometheus.yml 中添加客户机 node_exporter 的 IP 地址和端口后,才会对 node_exporter 的数据进行提取。
配置文件 prometheus.yml 应当添加的如下:
# 全局配置
global:
scrape_interval: 15s # 捕获间隔
evaluation_interval: 15s # 分析间隔
# 捕获超时可以使用参数 scrape_timeout 默认 10s
# 警报配置,默认不开启,需要安装警报插件
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# 加载的分析规则
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# 捕获配置
scrape_configs:
# 工作名:这是 prometheus 的工作
- job_name: "prometheus"
static_configs:
# 捕获的 IP 地址
- targets: ["localhost:9090"]
labels:
app: "prometheus"
# 这是 node_exporter 的工作
- job_name: "node"
static_configs:
# 捕获的 IP 地址
- targets: ["localhost:9100"]
在修改完成配置后,重新启动 Prometheus 服务,此时,Prometheus 就会按要求向 node_exporter 获取数据。
Grafana 配置
在连接中选择 Prometheus 配置数据源。



访问官方的 Dashboard 市场 Grafana Dashboards ,选择想要的面板。

复制 ID 或者下载对应的 JSON 文件。

在连接中选中我们添加的 Prometheus 数据源,点击新建面板,导入刚刚复制的 ID,或者 JSON。



完成导入后,我们就可以看见客户机的监控数据。

最后,在 Grafana 个人配置里将收刚刚创建的面板设置为首页。

重新登录,或者返回 home 界面就能直接看见我们设置的面板。
