Prometheus 监控平台 (二)
|总字数:11.1k|阅读时长:44分钟|浏览量:
1 分离部署
1.1 部署方式
说明:采用官网二进制包服务分离部署,Prometheus服务,Grafana服务,Alertmanager服务部署在不同的服务器上
1.2 软件功能
- Prometheus 采集、存储数据
- Grafana 用于图表展示
- Alertmanager 用于接收Prometheus发送的告警信息
- Node-exporter 用于收集操作系统和硬件信息的metrics
1.3 部署架构
| 服务器名称 |
系统名称服 |
作用 |
务器IP地址 |
| ubuntu 22.04-1 |
prometheus |
Prometheus服务 (prometheus, node_exporter) |
10.0.2.20 |
| ubuntu 22.04-2 |
alertmanager |
Alertmanager服务 (alertmanager, node_exporter) |
10.0.2.21 |
| ubuntu 22.04-3 |
grafane |
Grafana服务 (grafana, node_exporter) |
10.0.2.22 |
| ubuntu 22.04-4 |
ubuntu22.04-4 |
ubuntu22.04-4服务器 (node_exporter) |
10.0.2.23 |
| ubuntu 22.04-5 |
ubuntu22.04-5 |
ubuntu22.04-5服务器 (node_exporter) |
10.0.2.24 |
| centos 7.9-1 |
centos7.9-1 |
centos7.9-1服务器 (node_exporter) |
10.0.2.10 |
| centos-stream 9-1 |
centos-stream9-1 |
centos-stream9-1服务器 (node_exporter) |
10.0.2.30 |
| open-euler 22.03-1 |
open-euler22.03-1 |
open-euler22.03-1服务器 (node_exporter) |
10.0.2.40 |

1.4 软件版本
prometheus: 2.45.4
alertmanager: 0.27.0
grafana: 10.4.1
node_exporter: 1.7.0
1.5 操作系统
- ubuntu22.04: Prometheus 采集、存储数据
- ubuntu22.04: Grafana 用于图表展示
- ubuntu22.04: alertmanager 用于接收Prometheus发送的告警信息
- ubuntu22.04, centos7.9-1, centos-stream9: Node-exporter 用于手机操作系统和硬件信息的metrics
1.6 安装Prometheus
- 下载适合平台的最新版本并解压
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # 下载prometheus二进制源码包,官方下载地址:https://prometheus.io/download/ wget https://github.com/prometheus/prometheus/releases/download/v2.45.4/prometheus-2.45.4.linux-amd64.tar.gz
# 检查软件是否下载成功,下载后软件名为:prometheus-2.45.4.linux-amd64.tar.gz ls -l
# 解压 tar xvfz prometheus-2.45.4.linux-amd64.tar.gz
# 查看解压后文件 ls -l
# 移动解压后目录到/opt/下,并重命名为prometheus mv prometheus-2.45.4.linux-amd64 /opt/prometheus
# 检查是否移动成功 ll -d /opt/prometheus
|
- 创建一个专门的prometheus用户
1 2 3 4 5
| # 创建一个专门的prometheus用户 useradd -M -s /usr/sbin/nologin prometheus
# 检查用户是否创建成功,检查结果中应存在prometheus用户,shell为nologin cat /etc/passwd
|
- 更改prometheus目录用户权限,授权给prometheus
1 2 3 4 5
| # 更改prometheus目录用户权限,授权给prometheus chown prometheus:prometheus -R /opt/prometheus
# 检查目录权限是否设置成功,属主和属组都应为prometheus ll -d /opt/prometheus
|
- 启动prometheus服务
1 2 3 4 5
| # 直接执行prometheus二进制文件即可启动prometheus服务,此方法不方便,一般会创建systemd服务管理prometheus服务进程,按ctrl+c可以结束服务进程 /opt/prometheus/prometheus
# 注意:如果使用上面方法启动了prometheus服务,会在/opt/prometheus/目录下自动创建一个data目录,data目录的属主和属组都是root,我们在第5步为prometheus创建systemd服务时指定了User和Group为prometheus,这样会造成我们在使用systemctl启动prometheus时启动失败,原因是prometheus用户对data的操作权限不足,可以执行以下命令从新更改prometheus目录用户权限,授权给prometheus chown prometheus:prometheus -R /opt/prometheus
|
- 为创prometheus建systemd服务,方便管理服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| cat > /etc/systemd/system/prometheus.service << "EOF" [Unit] Description=Prometheus Server Documentation=https://prometheus.io/docs/introduction/overview/ After=network-online.target
[Service] Type=simple User=prometheus Group=prometheus Restart=on-failure ExecStart=/opt/prometheus/prometheus \ --config.file=/opt/prometheus/prometheus.yml \ --storage.tsdb.path=/opt/prometheus/data \ --storage.tsdb.retention.time=60d \ --web.enable-lifecycle
[Install] WantedBy=multi-user.target EOF
|
- 启动参数说明
| 选项&参数 |
解释 |
| -h, –help |
显示上下文相关的帮助(还可以尝试——help-long和——help-man)。 |
| –version |
显示应用程序版本。 |
| –config.file=”prometheus.yml” |
Prometheus配置文件路径。 |
| –web.listen-address=”0.0.0.0:9090″ |
地址监听UI、API和遥测。 |
| –web.read-timeout=5m |
在超时读取请求和关闭空闲连接之前的最大持续时间。 |
| –web.max-connections=512 |
同时连接的最大数目。 |
| –web.external-url= |
外部可访问的Prometheus的URL(例如,如果Prometheus通过反向代理提供服务)。用于生成返回的相对和绝对链接普罗米修斯本身。如果URL有路径部分,它将被用于为普罗米修斯服务的所有HTTP端点添加前缀。如果省略,相关的URL组件将被派生自动。 |
| –web.route-prefix= |
前缀用于web端点的内部路由。默认路径为——web.external-url。 |
| –web.user-assets= |
静态资产目录的路径,在/user处可用。 |
| –web.enable-lifecycle |
启用关闭和重新加载通过HTTP请求。 |
| –web.enable-admin-api |
为管理控制操作启用API端点。 |
| –web.console.templates=”consoles” |
控制台模板目录的路径,在/控制台可用。 |
| –web.console.libraries=”console_libraries” |
控制台库目录的路径。 |
| –web.page-title=”Prometheus时间序列采集和处理服务器” |
Prometheus实例的文件标题。 |
| –web.cors.origin=”.*” |
正则表达式为CORS原点。它已完全锚定。例子:“https ?: / / (domain1 | domain2) \。com” |
| –storage.tsdb.path=”data/” |
指标存储的基本路径。 |
| –storage.tsdb.retention=STORAGE.TSDB.RETENTION |
样品保存的时间。此标志已被弃用,请使用“storage.tsdb.retention”。时间”。——storage.tsdb.retention。时间= STORAGE.TSDB.RETENTION。保存样品的时间。当设置此标志时,它将覆盖“storage.tsdb.retention”。如果既没有这个标志,也没有“storage.tsdb”。保留”也不“storage.tsdb.retention。设置大小,保留时间默 认为15d。支持单位:y, w, d, h, m, s, ms。 |
| –storage.tsdb.retention.size= |
STORAGE.TSDB.RETENTION。大小[实验]块可以存储的最大字节数。需要一个单位,支持单位:B, KB, MB, GB, TB, PB, EB。例:“512 mb”。这个标志是实验性的,可以在以后的版本中更改。——storage.tsdb。不要在数据目录中创建lockfile。 |
| –storage.tsdb.allow-overlapping-blocks |
允许重叠块,从而支持垂直压缩和垂直查询合并。 |
| –storage.tsdb.wal-compression |
压缩tsdb WAL。 |
| –storage.remote.flush-deadline= |
关闭或重新加载配置时需要等待多长时间刷新样例。 |
| –storage.remote.read-sample-limit=5e7 |
在单个查询中通过远程读接口返回的最大样本总数。0意味着没有限制。对于流响应类型,此限制将被忽略。 |
| –storage.remote.read-concurrent-limit=10 |
并发远程读调用的最大数量。0意味着没有限制。 |
| –storage.remote.read-max-bytes-in-frame=1048576 |
在编组前流化远程读取响应类型的单个帧中的最大字节数。请注意,客户端可能也有帧大小的限制。默认情况下为1MB。 |
| –rules.alert.for-outage-tolerance=1h |
忍受普罗米修斯故障恢复“for”警报状态的最大时间。 |
| –rules.alert.for-grace-period=10m |
警报和恢复“for”状态之间的最小持续时间。仅对配置的“for”时间大于宽限期的警报进行维护。 |
| –rules.alert.resend-delay=1m |
在向Alertmanager重新发送警报之前等待的最短时间。 |
| –alertmanager.notification-queue-capacity=10000 |
等待Alertmanager通知的队列容量。 |
| –alertmanager.timeout=10s |
向Alertmanager发送警报超时。 |
| –query.lookback-delta=5m |
表达式计算和联合期间检索指标的最大回退持续时间。 |
| –query.timeout=2m |
在中止查询之前可能花费的最大时间。 |
| –query.max-concurrency=20 |
并发执行的最大查询数。 |
| –query.max-samples=50000000 |
单个查询可以加载到内存中的最大样本数。注意,如果查询尝试将比这个更多的样本加载到内存中,那么查询将会失败,因此这也限制了查询可以返回的样本数量。 |
| –log.level=info |
只记录具有给定严重性或以上的消息。其中一个:[调试,信息,警告,错误] |
| –log.format=logfmt |
日志消息的输出格式。其中一个:[logfmt, json] |
- 检查prometheus的systemd服务是否创建成功
1 2 3 4 5
| # 检查systemd文件是否存在 ls -l /etc/systemd/system/prometheus.service
# 检查prometheus.service文件内容是否正确 cat /etc/systemd/system/prometheus.service
|
- 启动并检查prometheus服务
1 2 3 4 5 6 7 8 9 10 11
| #重新加载系统管理守护进程(systemd) 的配置文件,如果修改了system下文件,需要执行以下命令重新载入 systemctl daemon-reload
# 启动prometheus服务 systemctl start prometheus.service
# 检查prometheus服务 systemctl status prometheus.service
# 将prometheus加入开机自启 systemctl enable prometheus.service
|
- 当prometheus发生变化后,重启prometheus或者从新加载prometheus配置文件
1 2 3 4 5
| # 重启prometheus systemctl restart prometheus.service
#重新加载prometheus配置文件,需要prometheus.service文件中有--web.enable-lifecycle,命令中X为大写 curl -X POST http://localhost:9090/-/reload
|
- 访问prometheus
| 应用 |
访问地址 |
备注 |
| prometheus |
http://服务器IP地址:9090 |
无用户名和密码 |
| 监控指标 |
http://服务器IP地址:9090/metrics |
无用户名和密码 |
- 访问显示结果如下 (http://10.0.2.20:9090)

1.7 安装Alertmanager
- 下载适合平台的最新版本并解压,官方地址:https://prometheus.io/download/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # 下载alertmanager二进制源码包 wget https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-0.27.0.linux-amd64.tar.gz
# 检查软件是否下载成功,下载后软件名为:alertmanager-0.27.0.linux-amd64.tar.gz ls -l
# 解压alertmanager tar xvfz alertmanager-0.27.0.linux-amd64.tar.gz
# 查看解压后文件 ls -l
# 移动解压后目录到/opt/prometheus/下,并重命名为alertmanager mv alertmanager-0.27.0.linux-amd64 /opt/alertmanager
# 检查是否移动成功 ll -d /opt/alertmanager
|
- 创建一个专门的alertmanager用户
1 2 3 4 5
| # 创建一个专门的alertmanager用户 useradd -M -s /usr/sbin/nologin alertmanager
# 检查用户是否创建成功,检查结果中应存在alertmanager用户,shell为nologin cat /etc/passwd
|
- 更改prometheus目录的用户权限,授权给alertmanager
1 2 3 4 5
| # 更改prometheus目录的用户权限,授权给alertmanager chown alertmanager:alertmanager -R /opt/alertmanager
# 检查目录权限是否设置成功,属主和属组都应为alertmanager ll -d /opt/alertmanager
|
- 启动alertmanager服务
1 2 3 4 5
| # 直接执行prometheus二进制文件即可启动alertmanager服务,此方法不方便,一般会创建systemd服务管理alertmanager服务进程,按ctrl+c可以结束服务进程 /opt/alertmanager/alertmanager
# 注意:如果使用上面方法启动了alertmanager服务,会在/opt/alertmanager/目录下自动创建一个data目录,data目录的属主和属组都是root,我们在第5步为alertmanager创建systemd服务时指定了User和Group为alertmanager,这样会造成我们在使用systemctl启动alertmanager时启动失败,原因是alertmanager用户对data的操作权限不足,可以执行以下命令从新更改alertmanager目录用户权限,授权给alertmanager chown alertmanager:alertmanager -R /opt/alertmanager
|
- 创建systemd服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| cat > /etc/systemd/system/alertmanager.service << "EOF" [Unit] Description=Alert Manager Wants=network-online.target After=network-online.target
[Service] Type=simple User=alertmanager Group=alertmanager ExecStart=/opt/alertmanager/alertmanager \ --config.file=/opt/alertmanager/alertmanager.yml \ --storage.path=/opt/alertmanager/data
Restart=always
[Install] WantedBy=multi-user.target
EOF
|
- 检查alertmanager的systemd服务是否创建成功
1 2 3 4 5
| # 检查systemd文件是否存在 ls -l /etc/systemd/system/alertmanager.service
# 检查prometheus.service文件内容是否正确 cat /etc/systemd/system/alertmanager.service
|
- 启动并检查alertmanager服务
1 2 3 4 5 6 7 8 9 10 11
| #重新加载系统管理守护进程(systemd) 的配置文件,如果修改了system下文件,需要执行以下命令重新载入 systemctl daemon-reload
# 启动prometheus服务 systemctl start alertmanager.service
# 检查prometheus服务 systemctl status alertmanager.service
# 将prometheus加入开机自启 systemctl enable alertmanager.service
|
- 访问alertmanagers
| 应用 |
访问地址 |
备注 |
| alertmanagers |
http://服务器IP地址:9093 |
无用户名密码 |
- 检查状态是否正常

- 修改prometheus配置文件,加入alertmanager,并增加触发器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| # 打开prometheus配置文件 vim /opt/prometheus/prometheus.yml
# 找到如下这段 alerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093
# 去掉# - alertmanager:9093前面的井号,然后根据实际情况填写alertmanager的地址,依据本次部署架构,应修改为10.0.2.21:9093,修改完成后如下: alerting: alertmanagers: - static_configs: - targets: - 10.0.2.21:9093
# 增加触发器,找到如下这段 rule_files: # - "first_rules.yml" # - "second_rules.yml"
# 在# - "first_rules.yml"上面一行新增alert.yml修改为如下内容: - "alert.yml" # - "first_rules.yml" # - "second_rules.yml"
|
- 在Prometheus服务器增加触发器配置文件,此配置文件为第10步骤中/opt/prometheus/prometheus.yml配置文件所引用的触发器配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| cat > /opt/prometheus/alert.yml << "EOF" groups: - name: Prometheus alert rules: # 对任何实例超过30s无法联系的情况发出警报 - alert: 服务告警 expr: up == 0 for: 30s labels: severity: critical annotations: instance: "{{ $labels.instance }}" description: "{{ $labels.job }} 服务已关闭" EOF
|
- 检查配置文件是否正确
1 2 3 4 5
| # 进入prometheus目录 cd /opt/prometheus
# 执行检查命令 ./promtool check config prometheus.yml
|
- 重启prometheus或者从新加载prometheus配置文件
1 2 3 4 5
| # 重启prometheus systemctl restart prometheus.service
#重新加载prometheus配置文件,需要prometheus.service文件中有--web.enable-lifecycle,命令中X为大写 curl -X POST http://localhost:9090/-/reload
|
- 访问Prometheus(http://10.0.2.20:9090) 服务器,点击Alerts,展开服务告警,检查alertmanager是否配置成功,如下图所示:

1.8 安装Grafana
- 下载适合平台的最新版本并解压,官方地址:https://grafana.com/grafana/download
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # 下载Grafana二进制源码包 wget https://dl.grafana.com/enterprise/release/grafana-enterprise-10.4.1.linux-amd64.tar.gz
# 检查是否下载成功 ls -l
# 解压下载后的Grafana源码包 tar -zxvf grafana-enterprise-10.4.1.linux-amd64.tar.gz
# 查看解压后文件 ls -l
# 移动解压后目录到/opt/prometheus/下,并重命名为grafana mv grafana-v10.4.1 /opt/grafana
# 检查是否移动成功 ll -d /opt/grafana
|
- 创建一个专门的grafana账号
1 2 3 4 5
| # 创建一个专门的grafana账号 useradd -M -s /usr/sbin/nologin grafana
# 检查用户是否创建成功,检查结果中应存在grafana用户,shell为nologin cat /etc/passwd
|
- 更改grafana目录用户权限,授权给grafana
1 2 3 4 5
| # 更改grafana目录用户权限,授权给grafana chown grafana:grafana -R /opt/grafana
# 检查目录权限是否设置成功,属主和属组都应为grafana ll -d /opt/grafana
|
- 启动grafana服务
1 2 3 4 5
| # 直接执行grafana二进制文件即可启动grafana服务,此方法不方便,一般会创建systemd服务管理grafana服务进程,按ctrl+c可以结束服务进程 /opt/grafana/bin/grafana server
# 注意:如果使用上面方法启动了grafana服务,会在/opt/grafana/目录下自动创建一个data目录,data目录的属主和属组都是root,我们在第5步为grafana创建systemd服务时指定了User和Group为grafana,这样会造成我们在使用systemctl启动grafana时启动失败,原因是grafana用户对data的操作权限不足,可以执行以下命令从新更改grafana目录用户权限,授权给grafana chown grafana:grafana -R /opt/grafana
|
- 创建systemd服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| cat > /etc/systemd/system/grafana.service << "EOF" [Unit] Description=Grafana server Documentation=http://docs.grafana.org [Service] Type=simple User=grafana Group=grafana Restart=on-failure ExecStart=/opt/grafana/bin/grafana-server \ --config=/opt/grafana/conf/defaults.ini \ --homepath=/opt/grafana [Install] WantedBy=multi-user.target EOF
|
- 启动参数解释
| 选项 |
解释 |
| –config |
配置文件的路径 |
| –homepath |
Grafana安装/主路径的路径,默认为工作目录 |
| –pidfile |
Grafana pid 文件的路径 |
| –packaging |
值描述了 Grafana 的安装方式(默认值:“未知”) |
| –configOverrides |
配置选项以字符串形式覆盖默认值。 例如 cfg:default.paths.log=/dev/null |
| –version, -v |
打印版本 |
| –vv |
打印当前版本、所有依赖项并退出(默认值: false) |
| –profile |
打开 pprof 分析(默认值: false) |
| –profile-addr |
定义用于分析的自定义地址(默认值:“localhost”) |
| –profile-port |
定义用于分析的自定义端口(默认值:6060) |
| –tracing |
打开跟踪(默认值:false) |
| –tracing-file |
定义跟踪输出文件(默认值:“trace.out”) |
| –help, -h |
显示帮助 |
- 检查grafana的systemd服务是否创建成功
1 2 3 4 5
| # 检查systemd文件是否存在 ls -l /etc/systemd/system/grafana.service
# 检查grafana-server.service文件内容是否正确 cat /etc/systemd/system/grafana.service
|
- 启动并检查grafana服务
1 2 3 4 5 6 7 8 9 10 11
| #重新加载系统管理守护进程(systemd) 的配置文件,如果修改了system下文件,需要执行以下命令重新载入 systemctl daemon-reload
# 启动grafana服务 systemctl start grafana.service
# 检查grafana服务 systemctl status grafana.service
# 将grafana加入开机自启 systemctl enable grafana.service
|
- 访问grafana
| 应用 |
访问地址 |
备注 |
| grafana |
http://服务器IP地址:3000 |
admin/admin |

1.9 安装node_exporter
说明:每台服务器均需要安装node_exporter,用于收集操作系统和硬件信息的metrics。Prometeus,Alertmanager及Grafana也需要被监控,因此同样需要安装node_exporter,安装多台多次执行以下步骤即可
- 下载适合平台的最新版本并解压,官方地址:https://prometheus.io/download/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # 下载node_exporter二进制源码包 wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
# 检查是否下载成功 ls -lh
# 解压下载后的node_exporter源码包 tar -zxvf node_exporter-1.7.0.linux-amd64.tar.gz
# 查看解压后文件 ls -lh
# 移动解压后目录到/opt/prometheus/下,并重命名为node_exporter mv node_exporter-1.7.0.linux-amd64 /opt/node_exporter
# 检查是否移动成功 ll -dh /opt/node_exporter
|
- 创建一个专门的node-exporter用户
1 2 3 4 5
| # 创建一个专门的node-exporter用户 useradd -M -s /usr/sbin/nologin node-exporter
# 检查用户是否创建成功,检查结果中应存在grafana用户,shell为nologin cat /etc/passwd
|
- 更改node_exporter目录用户权限,授权给node-exporter
1 2 3 4 5
| # 更改node_exporter目录用户权限,授权给node-exporter chown node-exporter:node-exporter -R /opt/node_exporter
# 检查授权是否成功 ll -dh /opt/node_exporter
|
- 启动node_exporter服务
1 2
| # 直接执行node_exporter二进制文件即可启动node_exporter服务,此方法不方便,一般会创建systemd服务管理pnode_exporter服务进程,按ctrl+c可以结束服务进程 /opt/node_exporter/node_exporter
|
- 创建systemd服务
1 2 3 4 5 6 7 8 9 10 11 12 13
| cat > /etc/systemd/system/node_exporter.service << "EOF" [Unit] Description=node_exporter Documentation=https://prometheus.io/ After=network.target [Service] User=node-exporter Group=node-exporter ExecStart=/opt/node_exporter/node_exporter Restart=on-failure [Install] WantedBy=multi-user.target EOF
|
- 常用启动参数说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| # --web.listen-address=":9100" #node_exporter监听的端口,默认是9100,若需要修改则通过此参数。
--web.telemetry-path="/metrics" #获取metric信息的url,默认是/metrics,若需要修改则通过此参数
--log.level="info" #设置日志级别
--log.format="logger:stderr" #设置打印日志的格式,若有自动化日志提取工具可以使用这个参数规范日志打印的格式
# --collector.diskstats.ignored-devices="^(ram|loop|fd|(h|s|v|xv)d[a-z]|nvme\\d+n\\d+p)\\d+$" #通过正则表达式忽略某些磁盘的信息收集
--collector.filesystem.ignored-mount-points="^/(dev|proc|sys|var/lib/docker/.+)($|/)" #通过正则表达式忽略某些文件系统挂载点的信息收集
--collector.filesystem.ignored-fs-types="^(autofs|binfmt_misc|bpf|cgroup2?|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|mqueue|nsfs|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|selinuxfs|squashfs|sysfs|tracefs)$" #通过正则表达式忽略某些文件系统类型的信息收集
--collector.netclass.ignored-devices="^$" #通过正则表达式忽略某些网络类的信息收集
--collector.netdev.ignored-devices="^$" #通过正则表达式忽略某些网络设备的信息收集
--collector.netstat.fields="^$" #通过正则表达式配置需要获取的网络状态信息 --collector.vmstat.fields="^(oom_kill|pgpg|pswp|pg.*fault).*" #通过正则表达式配置vmstat返回信息中需要收集的选项
|
- 检查node_exporter的systemd服务是否创建成功
1 2 3 4 5
| # 检查systemd文件是否存在 ls -l /etc/systemd/system/node_exporter.service
# 检查node_exporter.service文件内容是否正确 cat /etc/systemd/system/node_exporter.service
|
- 启动并检查node_exporter服务
1 2 3 4 5 6 7 8 9 10 11
| #重新加载系统管理守护进程(systemd) 的配置文件,如果修改了system下文件,需要执行以下命令重新载入 systemctl daemon-reload
# 启动node_exporter服务 systemctl start node_exporter.service
# 检查node_exporter服务 systemctl status node_exporter.service
# 将node_exporter加入开机自启 systemctl enable node_exporter.service
|
- 访问node_exporter
| 应用 |
访问地址 |
备注 |
| node_exporter |
http://服务器IP地址:9100/metrics |
无用户名密码 |

1.10 配置prometheus监控各台服务器
- 修改prometheus配置文件,为每台服务器配置node_exporter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| # 打开prometheus配置文件 vim /opt/prometheus/prometheus.yml
# 找到scrape_configs,修改scrape_configs下内容: scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: "node-exporter" scrape_interval: 5s static_configs: - targets: ['localhost:9100'] labels: instance: Prometheus服务器 - targets: ['10.0.2.21:9100'] labels: instance: Alertmanager服务器 - targets: ['10.0.2.22:9100'] labels: instance: Grafana服务器 - targets: ['10.0.2.23:9100'] labels: instance: ubuntu24.04-4服务器 - targets: ['10.0.2.22:9100'] labels: instance: ubuntu22.04-5服务器 - targets: ['10.0.2.10:9100'] labels: instance: centos7.9-1服务器 - targets: ['10.0.2.30:9100'] labels: instance: CentOS-Stream 9-1服务器 - targets: ['10.0.2.40:9100'] labels: instance: open-euler 22.03-1服务器
# metrics_path defaults to '/metrics' # scheme defaults to 'http'.
|
- 重启prometheus或者从新加载prometheus配置文件
1 2 3 4 5
| # 重启prometheus systemctl restart prometheus.service
#重新加载prometheus配置文件,需要prometheus.service文件中有--web.enable-lifecycle,命令中X为大写 curl -X POST http://localhost:9090/-/reload
|
- 检查各台服务器node_exporter是否配置成功,访问Prometheus服务(http://服务器IP地址:9090),点击Status,再点击Targets

- 显示如下结果代表环境正常,每台服务器的metrics的状态都是UP

- 检查告警是否正常

1.11 配置Grafana展示监控指标
- 进入Grafa,访问 http://服务器IP地址:3000
- 设置Grafana语言为中文,时区为上海,点击小齿轮,点击General

点击Default preferences

Timezone选择上海,Language选择中文,设置完成后点击Save保存

- 添加数据源,点击连接,点击数据源,点击Add data source

点击Prometheus

填写名称,可以自定义;Connection下的Prometheus server URL填写Prometheus服务器的地址

其他保持默认,然后拉到页面最下面点击Save&test

提示Successfully即表示保存并且测试成功

- 创建并导入仪表盘
访问:https://grafana.com/grafana/dashboards/,找到Node Exporter Full并点击

点击右边的Copy ID to clipboard

回到Grafana,点击导航栏仪表盘,点击右侧新建,展开的列表中点击导入

将复制的ID输入到红框内,然后点击右侧加载

输入名称,名称自定义

选择Prometheus数据源,Prometheus下拉列表选择Prometheus

最后点击最下面import

最终就可以看到我们服务器的监控仪表盘了,每台服务器可以通过Host下拉列表查看

2 融合部署
2.1 部署方式
说明:官网二进制包服务融合部署,Prometheus服务器,Grafana服务器,Alertmanager服务器部署在相同的服务器上
2.2 软件功能
- Prometheus 采集、存储数据
- Grafana 用于图表展示
- Alertmanager 用于接收Prometheus发送的告警信息
- Node-exporter 用于收集操作系统和硬件信息的metrics
2.3 部署架构
| 服务器名称 |
系统名称服 |
作用 |
务器IP地址 |
| ubuntu 22.04-1 |
prometheus |
Prometheus服务,Alertmanager服务,Grafana服务 (prometheus, alertmanager, grafana) |
10.0.2.20 |
| ubuntu 22.04-2 |
ubuntu22.04-2 |
ubuntu22.04-2服务器 (node_exporter) |
10.0.2.21 |
| ubuntu 22.04-3 |
ubuntu22.04-3 |
ubuntu22.04-3服务器 (node_exporter) |
10.0.2.22 |
| ubuntu 22.04-4 |
ubuntu22.04-4 |
ubuntu22.04-4服务器 (node_exporter) |
10.0.2.23 |
| ubuntu 22.04-5 |
ubuntu22.04-5 |
ubuntu22.04-5服务器 (node_exporter) |
10.0.2.24 |
| centos 7.9-1 |
centos7.9-1 |
centos7.9-1服务器 (node_exporter) |
10.0.2.10 |
| centos-stream 9-1 |
centos-stream9-1 |
centos-stream9-1服务器 (node_exporter) |
10.0.2.30 |
| open-euler 22.03-1 |
open-euler22.03-1 |
open-euler22.03-1服务器 (node_exporter) |
10.0.2.40 |

2.4 软件版本
prometheus: 2.45.4
alertmanager: 0.27.0
grafana: 10.4.1
node_exporter: 1.7.0
2.5 操作系统
- ubuntu22.04: Prometheus 采集、存储数据
- ubuntu22.04: Grafana 用于图表展示
- ubuntu22.04: alertmanager 用于接收Prometheus发送的告警信息
- ubuntu22.04, centos7.9-1, centos-stream9: Node-exporter 用于手机操作系统和硬件信息的metrics
2.6 安装Prometheus
- 下载适合平台的最新版本并解压
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # 下载prometheus二进制源码包,官方下载地址:https://prometheus.io/download/ wget https://github.com/prometheus/prometheus/releases/download/v2.45.4/prometheus-2.45.4.linux-amd64.tar.gz
# 检查软件是否下载成功,下载后软件名为:prometheus-2.45.4.linux-amd64.tar.gz ls -l
# 解压 tar xvfz prometheus-2.45.4.linux-amd64.tar.gz
# 查看解压后文件 ls -l
# 移动解压后目录到/opt/下,并重命名为prometheus mv prometheus-2.45.4.linux-amd64 /opt/prometheus
# 检查是否移动成功 ll -d /opt/prometheus
|
- 创建一个专门的prometheus用户
1 2 3 4 5
| # 创建一个专门的prometheus用户 useradd -M -s /usr/sbin/nologin prometheus
# 检查用户是否创建成功,检查结果中应存在prometheus用户,shell为nologin cat /etc/passwd
|
- 更改prometheus目录用户权限,授权给prometheus
1 2 3 4 5
| # 更改prometheus目录用户权限,授权给prometheus chown prometheus:prometheus -R /opt/prometheus
# 检查目录权限是否设置成功,属主和属组都应为prometheus ll -d /opt/prometheus
|
- 启动prometheus服务
1 2 3 4 5
| # 直接执行prometheus二进制文件即可启动prometheus服务,此方法不方便,一般会创建systemd服务管理prometheus服务进程,按ctrl+c可以结束服务进程 /opt/prometheus/prometheus
# 注意:如果使用上面方法启动了prometheus服务,会在/opt/prometheus/目录下自动创建一个data目录,data目录的属主和属组都是root,我们在第5步为prometheus创建systemd服务时指定了User和Group为prometheus,这样会造成我们在使用systemctl启动prometheus时启动失败,原因是prometheus用户对data的操作权限不足,可以执行以下命令从新更改prometheus目录用户权限,授权给prometheus chown prometheus:prometheus -R /opt/prometheus
|
- 为创prometheus建systemd服务,方便管理服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| cat > /etc/systemd/system/prometheus.service << "EOF" [Unit] Description=Prometheus Server Documentation=https://prometheus.io/docs/introduction/overview/ After=network-online.target
[Service] Type=simple User=prometheus Group=prometheus Restart=on-failure ExecStart=/opt/prometheus/prometheus \ --config.file=/opt/prometheus/prometheus.yml \ --storage.tsdb.path=/opt/prometheus/data \ --storage.tsdb.retention.time=60d \ --web.enable-lifecycle
[Install] WantedBy=multi-user.target EOF
|
- 启动参数说明
| 选项&参数 |
解释 |
| -h, –help |
显示上下文相关的帮助(还可以尝试——help-long和——help-man)。 |
| –version |
显示应用程序版本。 |
| –config.file=”prometheus.yml” |
Prometheus配置文件路径。 |
| –web.listen-address=”0.0.0.0:9090″ |
地址监听UI、API和遥测。 |
| –web.read-timeout=5m |
在超时读取请求和关闭空闲连接之前的最大持续时间。 |
| –web.max-connections=512 |
同时连接的最大数目。 |
| –web.external-url= |
外部可访问的Prometheus的URL(例如,如果Prometheus通过反向代理提供服务)。用于生成返回的相对和绝对链接普罗米修斯本身。如果URL有路径部分,它将被用于为普罗米修斯服务的所有HTTP端点添加前缀。如果省略,相关的URL组件将被派生自动。 |
| –web.route-prefix= |
前缀用于web端点的内部路由。默认路径为——web.external-url。 |
| –web.user-assets= |
静态资产目录的路径,在/user处可用。 |
| –web.enable-lifecycle |
启用关闭和重新加载通过HTTP请求。 |
| –web.enable-admin-api |
为管理控制操作启用API端点。 |
| –web.console.templates=”consoles” |
控制台模板目录的路径,在/控制台可用。 |
| –web.console.libraries=”console_libraries” |
控制台库目录的路径。 |
| –web.page-title=”Prometheus时间序列采集和处理服务器” |
Prometheus实例的文件标题。 |
| –web.cors.origin=”.*” |
正则表达式为CORS原点。它已完全锚定。例子:“https ?: / / (domain1 | domain2) \。com” |
| –storage.tsdb.path=”data/” |
指标存储的基本路径。 |
| –storage.tsdb.retention=STORAGE.TSDB.RETENTION |
样品保存的时间。此标志已被弃用,请使用“storage.tsdb.retention”。时间”。——storage.tsdb.retention。时间= STORAGE.TSDB.RETENTION。保存样品的时间。当设置此标志时,它将覆盖“storage.tsdb.retention”。如果既没有这个标志,也没有“storage.tsdb”。保留”也不“storage.tsdb.retention。设置大小,保留时间默 认为15d。支持单位:y, w, d, h, m, s, ms。 |
| –storage.tsdb.retention.size= |
STORAGE.TSDB.RETENTION。大小[实验]块可以存储的最大字节数。需要一个单位,支持单位:B, KB, MB, GB, TB, PB, EB。例:“512 mb”。这个标志是实验性的,可以在以后的版本中更改。——storage.tsdb。不要在数据目录中创建lockfile。 |
| –storage.tsdb.allow-overlapping-blocks |
允许重叠块,从而支持垂直压缩和垂直查询合并。 |
| –storage.tsdb.wal-compression |
压缩tsdb WAL。 |
| –storage.remote.flush-deadline= |
关闭或重新加载配置时需要等待多长时间刷新样例。 |
| –storage.remote.read-sample-limit=5e7 |
在单个查询中通过远程读接口返回的最大样本总数。0意味着没有限制。对于流响应类型,此限制将被忽略。 |
| –storage.remote.read-concurrent-limit=10 |
并发远程读调用的最大数量。0意味着没有限制。 |
| –storage.remote.read-max-bytes-in-frame=1048576 |
在编组前流化远程读取响应类型的单个帧中的最大字节数。请注意,客户端可能也有帧大小的限制。默认情况下为1MB。 |
| –rules.alert.for-outage-tolerance=1h |
忍受普罗米修斯故障恢复“for”警报状态的最大时间。 |
| –rules.alert.for-grace-period=10m |
警报和恢复“for”状态之间的最小持续时间。仅对配置的“for”时间大于宽限期的警报进行维护。 |
| –rules.alert.resend-delay=1m |
在向Alertmanager重新发送警报之前等待的最短时间。 |
| –alertmanager.notification-queue-capacity=10000 |
等待Alertmanager通知的队列容量。 |
| –alertmanager.timeout=10s |
向Alertmanager发送警报超时。 |
| –query.lookback-delta=5m |
表达式计算和联合期间检索指标的最大回退持续时间。 |
| –query.timeout=2m |
在中止查询之前可能花费的最大时间。 |
| –query.max-concurrency=20 |
并发执行的最大查询数。 |
| –query.max-samples=50000000 |
单个查询可以加载到内存中的最大样本数。注意,如果查询尝试将比这个更多的样本加载到内存中,那么查询将会失败,因此这也限制了查询可以返回的样本数量。 |
| –log.level=info |
只记录具有给定严重性或以上的消息。其中一个:[调试,信息,警告,错误] |
| –log.format=logfmt |
日志消息的输出格式。其中一个:[logfmt, json] |
- 检查prometheus的systemd服务是否创建成功
1 2 3 4 5
| # 检查systemd文件是否存在 ls -l /etc/systemd/system/prometheus.service
# 检查prometheus.service文件内容是否正确 cat /etc/systemd/system/prometheus.service
|
- 启动并检查prometheus服务
1 2 3 4 5 6 7 8 9 10 11
| #重新加载系统管理守护进程(systemd) 的配置文件,如果修改了system下文件,需要执行以下命令重新载入 systemctl daemon-reload
# 启动prometheus服务 systemctl start prometheus.service
# 检查prometheus服务 systemctl status prometheus.service
# 将prometheus加入开机自启 systemctl enable prometheus.service
|
- 当prometheus发生变化后,重启prometheus或者从新加载prometheus配置文件
1 2 3 4 5
| # 重启prometheus systemctl restart prometheus.service
#重新加载prometheus配置文件,需要prometheus.service文件中有--web.enable-lifecycle,命令中X为大写 curl -X POST http://localhost:9090/-/reload
|
- 访问prometheus
| 应用 |
访问地址 |
备注 |
| prometheus |
http://服务器IP地址:9090 |
无用户名和密码 |
| 监控指标 |
http://服务器IP地址:9090/metrics |
无用户名和密码 |
- 访问显示结果如下 (http://10.0.2.20:9090)

2.7 安装Alertmanager
- 下载适合平台的最新版本并解压,官方地址:https://prometheus.io/download/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # 下载alertmanager二进制源码包 wget https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-0.27.0.linux-amd64.tar.gz
# 检查软件是否下载成功,下载后软件名为:alertmanager-0.27.0.linux-amd64.tar.gz ls -l
# 解压alertmanager tar xvfz alertmanager-0.27.0.linux-amd64.tar.gz
# 查看解压后文件 ls -l
# 移动解压后目录到/opt/prometheus/下,并重命名为alertmanager mv alertmanager-0.27.0.linux-amd64 /opt/alertmanager
# 检查是否移动成功 ll -d /opt/alertmanager
|
- 创建一个专门的alertmanager用户
1 2 3 4 5
| # 创建一个专门的alertmanager用户 useradd -M -s /usr/sbin/nologin alertmanager
# 检查用户是否创建成功,检查结果中应存在alertmanager用户,shell为nologin cat /etc/passwd
|
- 更改prometheus目录的用户权限,授权给alertmanager
1 2 3 4 5
| # 更改prometheus目录的用户权限,授权给alertmanager chown alertmanager:alertmanager -R /opt/alertmanager
# 检查目录权限是否设置成功,属主和属组都应为alertmanager ll -d /opt/alertmanager
|
- 启动alertmanager服务
1 2 3 4 5
| # 直接执行prometheus二进制文件即可启动alertmanager服务,此方法不方便,一般会创建systemd服务管理alertmanager服务进程,按ctrl+c可以结束服务进程 /opt/alertmanager/alertmanager
# 注意:如果使用上面方法启动了alertmanager服务,会在/opt/alertmanager/目录下自动创建一个data目录,data目录的属主和属组都是root,我们在第5步为alertmanager创建systemd服务时指定了User和Group为alertmanager,这样会造成我们在使用systemctl启动alertmanager时启动失败,原因是alertmanager用户对data的操作权限不足,可以执行以下命令从新更改alertmanager目录用户权限,授权给alertmanager chown alertmanager:alertmanager -R /opt/alertmanager
|
- 创建systemd服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| cat > /etc/systemd/system/alertmanager.service << "EOF" [Unit] Description=Alert Manager Wants=network-online.target After=network-online.target
[Service] Type=simple User=alertmanager Group=alertmanager ExecStart=/opt/alertmanager/alertmanager \ --config.file=/opt/alertmanager/alertmanager.yml \ --storage.path=/opt/alertmanager/data
Restart=always
[Install] WantedBy=multi-user.target
EOF
|
- 检查alertmanager的systemd服务是否创建成功
1 2 3 4 5
| # 检查systemd文件是否存在 ls -l /etc/systemd/system/alertmanager.service
# 检查prometheus.service文件内容是否正确 cat /etc/systemd/system/alertmanager.service
|
- 启动并检查alertmanager服务
1 2 3 4 5 6 7 8 9 10 11
| #重新加载系统管理守护进程(systemd) 的配置文件,如果修改了system下文件,需要执行以下命令重新载入 systemctl daemon-reload
# 启动prometheus服务 systemctl start alertmanager.service
# 检查prometheus服务 systemctl status alertmanager.service
# 将prometheus加入开机自启 systemctl enable alertmanager.service
|
- 访问alertmanagers
| 应用 |
访问地址 |
备注 |
| alertmanagers |
http://服务器IP地址:9093 |
无用户名密码 |
- 检查状态是否正常

- 修改prometheus配置文件,加入alertmanager,并增加触发器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| # 打开prometheus配置文件 vim /opt/prometheus/prometheus.yml
# 找到如下这段 alerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093
# 去掉# - alertmanager:9093前面的井号,然后根据实际情况填写alertmanager的地址,依据本次部署架构,应修改为10.0.2.21:9093,修改完成后如下: alerting: alertmanagers: - static_configs: - targets: - localhost:9093
# 增加触发器,找到如下这段 rule_files: # - "first_rules.yml" # - "second_rules.yml"
# 在# - "first_rules.yml"上面一行新增alert.yml修改为如下内容: - "alert.yml" # - "first_rules.yml" # - "second_rules.yml"
|
- 在Prometheus服务器增加触发器配置文件,此配置文件为第10步骤中/opt/prometheus/prometheus.yml配置文件所引用的触发器配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| # 新增触发器配置文件 cat > /opt/prometheus/alert.yml << "EOF" groups: - name: Prometheus alert rules: # 对任何实例超过30s无法联系的情况发出警报 - alert: 服务告警 expr: up == 0 for: 30s labels: severity: critical annotations: instance: "{{ $labels.instance }}" description: "{{ $labels.job }} 服务已关闭" EOF
# 检查配置文件是否创建成功 ls -l /opt/prometheus/alert.yml
# 检查配置文件的内容是否正确
cat /opt/prometheus/alert.yml
|
- 检查配置文件是否正确
1 2 3 4 5
| # 进入prometheus目录 cd /opt/prometheus
# 执行检查命令 ./promtool check config prometheus.yml
|
- 重启prometheus或者从新加载prometheus配置文件
1 2 3 4 5
| # 重启prometheus systemctl restart prometheus.service
#重新加载prometheus配置文件,需要prometheus.service文件中有--web.enable-lifecycle,命令中X为大写 curl -X POST http://localhost:9090/-/reload
|
- 访问Prometheus (http://10.0.2.20:9090) 服务器,点击Alerts,展开服务告警,检查alertmanager是否配置成功,如下图所示:

2.8 安装Grafana
- 下载适合平台的最新版本并解压,官方地址:https://grafana.com/grafana/download
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # 下载Grafana二进制源码包 wget https://dl.grafana.com/enterprise/release/grafana-enterprise-10.4.1.linux-amd64.tar.gz
# 检查是否下载成功 ls -l
# 解压下载后的Grafana源码包 tar -zxvf grafana-enterprise-10.4.1.linux-amd64.tar.gz
# 查看解压后文件 ls -l
# 移动解压后目录到/opt/prometheus/下,并重命名为grafana mv grafana-v10.4.1 /opt/grafana
# 检查是否移动成功 ll -d /opt/grafana
|
- 创建一个专门的grafana账号
1 2 3 4 5
| # 创建一个专门的grafana账号 useradd -M -s /usr/sbin/nologin grafana
# 检查用户是否创建成功,检查结果中应存在grafana用户,shell为nologin cat /etc/passwd
|
- 更改grafana目录用户权限,授权给grafana
1 2 3 4 5
| # 更改grafana目录用户权限,授权给grafana chown grafana:grafana -R /opt/grafana
# 检查目录权限是否设置成功,属主和属组都应为grafana ll -d /opt/grafana
|
- 启动grafana服务
1 2 3 4 5
| # 直接执行grafana二进制文件即可启动grafana服务,此方法不方便,一般会创建systemd服务管理grafana服务进程,按ctrl+c可以结束服务进程 /opt/grafana/bin/grafana server
# 注意:如果使用上面方法启动了grafana服务,会在/opt/grafana/目录下自动创建一个data目录,data目录的属主和属组都是root,我们在第5步为grafana创建systemd服务时指定了User和Group为grafana,这样会造成我们在使用systemctl启动grafana时启动失败,原因是grafana用户对data的操作权限不足,可以执行以下命令从新更改grafana目录用户权限,授权给grafana chown grafana:grafana -R /opt/grafana
|
- 创建systemd服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| cat > /etc/systemd/system/grafana.service << "EOF" [Unit] Description=Grafana server Documentation=http://docs.grafana.org [Service] Type=simple User=grafana Group=grafana Restart=on-failure ExecStart=/opt/grafana/bin/grafana-server \ --config=/opt/grafana/conf/defaults.ini \ --homepath=/opt/grafana [Install] WantedBy=multi-user.target EOF
|
- 启动参数解释
| 选项 |
解释 |
| –config |
配置文件的路径 |
| –homepath |
Grafana安装/主路径的路径,默认为工作目录 |
| –pidfile |
Grafana pid 文件的路径 |
| –packaging |
值描述了 Grafana 的安装方式(默认值:“未知”) |
| –configOverrides |
配置选项以字符串形式覆盖默认值。 例如 cfg:default.paths.log=/dev/null |
| –version, -v |
打印版本 |
| –vv |
打印当前版本、所有依赖项并退出(默认值: false) |
| –profile |
打开 pprof 分析(默认值: false) |
| –profile-addr |
定义用于分析的自定义地址(默认值:“localhost”) |
| –profile-port |
定义用于分析的自定义端口(默认值:6060) |
| –tracing |
打开跟踪(默认值:false) |
| –tracing-file |
定义跟踪输出文件(默认值:“trace.out”) |
| –help, -h |
显示帮助 |
- 检查grafana的systemd服务是否创建成功
1 2 3 4 5
| # 检查systemd文件是否存在 ls -l /etc/systemd/system/grafana.service
# 检查grafana-server.service文件内容是否正确 cat /etc/systemd/system/grafana.service
|
- 启动并检查grafana服务
1 2 3 4 5 6 7 8 9 10 11
| #重新加载系统管理守护进程(systemd) 的配置文件,如果修改了system下文件,需要执行以下命令重新载入 systemctl daemon-reload
# 启动grafana服务 systemctl start grafana.service
# 检查grafana服务 systemctl status grafana.service
# 将grafana加入开机自启 systemctl enable grafana.service
|
- 访问grafana
| 应用 |
访问地址 |
备注 |
| grafana |
http://服务器IP地址:3000 |
admin/admin |

2.9 安装node_exporter
说明:每台服务器均需要安装node_exporter,用于收集操作系统和硬件信息的metrics。Prometeus,Alertmanager及Grafana也需要被监控,因此同样需要安装node_exporter,安装多台多次执行以下步骤即可
- 下载适合平台的最新版本并解压,官方地址:https://prometheus.io/download/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # 下载node_exporter二进制源码包 wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
# 检查是否下载成功 ls -lh
# 解压下载后的node_exporter源码包 tar -zxvf node_exporter-1.7.0.linux-amd64.tar.gz
# 查看解压后文件 ls -lh
# 移动解压后目录到/opt/prometheus/下,并重命名为node_exporter mv node_exporter-1.7.0.linux-amd64 /opt/node_exporter
# 检查是否移动成功 ll -dh /opt/node_exporter
|
- 创建一个专门的node-exporter用户
1 2 3 4 5
| # 创建一个专门的node-exporter用户 useradd -M -s /usr/sbin/nologin node-exporter
# 检查用户是否创建成功,检查结果中应存在grafana用户,shell为nologin cat /etc/passwd
|
- 更改node_exporter目录用户权限,授权给node-exporter
1 2 3 4 5
| # 更改node_exporter目录用户权限,授权给node-exporter chown node-exporter:node-exporter -R /opt/node_exporter
# 检查授权是否成功 ll -dh /opt/node_exporter
|
- 启动node_exporter服务
1 2
| # 直接执行node_exporter二进制文件即可启动node_exporter服务,此方法不方便,一般会创建systemd服务管理pnode_exporter服务进程,按ctrl+c可以结束服务进程 /opt/node_exporter/node_exporter
|
- 创建systemd服务
1 2 3 4 5 6 7 8 9 10 11 12 13
| cat > /etc/systemd/system/node_exporter.service << "EOF" [Unit] Description=node_exporter Documentation=https://prometheus.io/ After=network.target [Service] User=node-exporter Group=node-exporter ExecStart=/opt/node_exporter/node_exporter Restart=on-failure [Install] WantedBy=multi-user.target EOF
|
- 常用启动参数说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| # --web.listen-address=":9100" #node_exporter监听的端口,默认是9100,若需要修改则通过此参数。
--web.telemetry-path="/metrics" #获取metric信息的url,默认是/metrics,若需要修改则通过此参数
--log.level="info" #设置日志级别
--log.format="logger:stderr" #设置打印日志的格式,若有自动化日志提取工具可以使用这个参数规范日志打印的格式
# --collector.diskstats.ignored-devices="^(ram|loop|fd|(h|s|v|xv)d[a-z]|nvme\\d+n\\d+p)\\d+$" #通过正则表达式忽略某些磁盘的信息收集
--collector.filesystem.ignored-mount-points="^/(dev|proc|sys|var/lib/docker/.+)($|/)" #通过正则表达式忽略某些文件系统挂载点的信息收集
--collector.filesystem.ignored-fs-types="^(autofs|binfmt_misc|bpf|cgroup2?|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|mqueue|nsfs|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|selinuxfs|squashfs|sysfs|tracefs)$" #通过正则表达式忽略某些文件系统类型的信息收集
--collector.netclass.ignored-devices="^$" #通过正则表达式忽略某些网络类的信息收集
--collector.netdev.ignored-devices="^$" #通过正则表达式忽略某些网络设备的信息收集
--collector.netstat.fields="^$" #通过正则表达式配置需要获取的网络状态信息 --collector.vmstat.fields="^(oom_kill|pgpg|pswp|pg.*fault).*" #通过正则表达式配置vmstat返回信息中需要收集的选项
|
- 检查node_exporter的systemd服务是否创建成功
1 2 3 4 5
| # 检查systemd文件是否存在 ls -l /etc/systemd/system/node_exporter.service
# 检查node_exporter.service文件内容是否正确 cat /etc/systemd/system/node_exporter.service
|
- 启动并检查node_exporter服务
1 2 3 4 5 6 7 8 9 10 11
| #重新加载系统管理守护进程(systemd) 的配置文件,如果修改了system下文件,需要执行以下命令重新载入 systemctl daemon-reload
# 启动node_exporter服务 systemctl start node_exporter.service
# 检查node_exporter服务 systemctl status node_exporter.service
# 将node_exporter加入开机自启 systemctl enable node_exporter.service
|
- 访问node_exporter
| 应用 |
访问地址 |
备注 |
| node_exporter |
http://服务器IP地址:9100/metrics |
无用户名密码 |

2.10 配置prometheus监控各台服务器
- 修改prometheus配置文件,为每台服务器配置node_exporter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| # 打开prometheus配置文件 vim /opt/prometheus/prometheus.yml
# 找到scrape_configs,删除或注释多余内容,最终修改scrape_configs下内容: scrape_configs: - job_name: "node-exporter" scrape_interval: 5s static_configs: - targets: ['localhost:9100'] labels: instance: Prometheus服务器 - targets: ['10.0.2.21:9100'] labels: instance: ubuntu24.04-2服务器 - targets: ['10.0.2.22:9100'] labels: instance: ubuntu24.04-3服务器 - targets: ['10.0.2.23:9100'] labels: instance: ubuntu24.04-4服务器 - targets: ['10.0.2.22:9100'] labels: instance: ubuntu22.04-5服务器 - targets: ['10.0.2.10:9100'] labels: instance: centos7.9-1服务器 - targets: ['10.0.2.30:9100'] labels: instance: CentOS-Stream 9-1服务器 - targets: ['10.0.2.40:9100'] labels: instance: open-euler 22.03-1服务器
|
- 重启prometheus或者从新加载prometheus配置文件
1 2 3 4 5
| # 重启prometheus systemctl restart prometheus.service
#重新加载prometheus配置文件,需要prometheus.service文件中有--web.enable-lifecycle,命令中X为大写 curl -X POST http://localhost:9090/-/reload
|
- 检查各台服务器node_exporter是否配置成功,访问Prometheus服务(http://服务器IP地址:9090),点击Status,再点击Targets

- 显示如下结果代表环境正常,每台服务器的metrics的状态都是UP

- 检查告警是否正常

2.11 配置Grafana展示监控指标
- 进入Grafa,访问 http://服务器IP地址:3000
- 设置Grafana语言为中文,时区为上海,点击小齿轮,点击General

点击Default preferences

Timezone选择上海,Language选择中文,设置完成后点击Save保存

- 添加数据源,点击连接,点击数据源,点击Add data source

点击Prometheus

填写名称,可以自定义;Connection下的Prometheus server URL填写Prometheus服务器的地址

其他保持默认,然后拉到页面最下面点击Save&test

提示Successfully即表示保存并且测试成功

- 创建并导入仪表盘
访问:https://grafana.com/grafana/dashboards/,找到Node Exporter Full并点击

点击右边的Copy ID to clipboard

回到Grafana,点击导航栏仪表盘,点击右侧新建,展开的列表中点击导入

将复制的ID输入到红框内,然后点击右侧加载

输入名称,名称自定义

选择Prometheus数据源,Prometheus下拉列表选择Prometheus

最后点击最下面import

最终就可以看到我们服务器的监控仪表盘了,每台服务器可以通过Host下拉列表查看
