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. 下载适合平台的最新版本并解压
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
  1. 创建一个专门的prometheus用户
1
2
3
4
5
# 创建一个专门的prometheus用户
useradd -M -s /usr/sbin/nologin prometheus

# 检查用户是否创建成功,检查结果中应存在prometheus用户,shell为nologin
cat /etc/passwd
  1. 更改prometheus目录用户权限,授权给prometheus
1
2
3
4
5
# 更改prometheus目录用户权限,授权给prometheus
chown prometheus:prometheus -R /opt/prometheus

# 检查目录权限是否设置成功,属主和属组都应为prometheus
ll -d /opt/prometheus
  1. 启动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
  1. 为创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
  1. 启动参数说明
选项&参数 解释
-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]
  1. 检查prometheus的systemd服务是否创建成功
1
2
3
4
5
# 检查systemd文件是否存在
ls -l /etc/systemd/system/prometheus.service

# 检查prometheus.service文件内容是否正确
cat /etc/systemd/system/prometheus.service
  1. 启动并检查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
  1. 当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
  1. 访问prometheus
应用 访问地址 备注
prometheus http://服务器IP地址:9090 无用户名和密码
监控指标 http://服务器IP地址:9090/metrics 无用户名和密码
  1. 访问显示结果如下 (http://10.0.2.20:9090)

图片

1.7 安装Alertmanager

  1. 下载适合平台的最新版本并解压,官方地址: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
  1. 创建一个专门的alertmanager用户
1
2
3
4
5
# 创建一个专门的alertmanager用户
useradd -M -s /usr/sbin/nologin alertmanager

# 检查用户是否创建成功,检查结果中应存在alertmanager用户,shell为nologin
cat /etc/passwd
  1. 更改prometheus目录的用户权限,授权给alertmanager
1
2
3
4
5
# 更改prometheus目录的用户权限,授权给alertmanager
chown alertmanager:alertmanager -R /opt/alertmanager

# 检查目录权限是否设置成功,属主和属组都应为alertmanager
ll -d /opt/alertmanager
  1. 启动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
  1. 创建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
  1. 检查alertmanager的systemd服务是否创建成功
1
2
3
4
5
# 检查systemd文件是否存在
ls -l /etc/systemd/system/alertmanager.service

# 检查prometheus.service文件内容是否正确
cat /etc/systemd/system/alertmanager.service
  1. 启动并检查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
  1. 访问alertmanagers
应用 访问地址 备注
alertmanagers http://服务器IP地址:9093 无用户名密码
  1. 检查状态是否正常

图片

  1. 修改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"
  1. 在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. 检查配置文件是否正确
1
2
3
4
5
# 进入prometheus目录
cd /opt/prometheus

# 执行检查命令
./promtool check config prometheus.yml
  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
  1. 访问Prometheus(http://10.0.2.20:9090) 服务器,点击Alerts,展开服务告警,检查alertmanager是否配置成功,如下图所示:

图片

1.8 安装Grafana

  1. 下载适合平台的最新版本并解压,官方地址: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
  1. 创建一个专门的grafana账号
1
2
3
4
5
# 创建一个专门的grafana账号
useradd -M -s /usr/sbin/nologin grafana

# 检查用户是否创建成功,检查结果中应存在grafana用户,shell为nologin
cat /etc/passwd
  1. 更改grafana目录用户权限,授权给grafana
1
2
3
4
5
# 更改grafana目录用户权限,授权给grafana
chown grafana:grafana -R /opt/grafana

# 检查目录权限是否设置成功,属主和属组都应为grafana
ll -d /opt/grafana
  1. 启动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
  1. 创建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
  1. 启动参数解释
选项 解释
–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 显示帮助
  1. 检查grafana的systemd服务是否创建成功
1
2
3
4
5
# 检查systemd文件是否存在
ls -l /etc/systemd/system/grafana.service

# 检查grafana-server.service文件内容是否正确
cat /etc/systemd/system/grafana.service
  1. 启动并检查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
  1. 访问grafana
  • 首次登录会要求修改密码
应用 访问地址 备注
grafana http://服务器IP地址:3000 admin/admin

图片

1.9 安装node_exporter

说明:每台服务器均需要安装node_exporter,用于收集操作系统和硬件信息的metrics。Prometeus,Alertmanager及Grafana也需要被监控,因此同样需要安装node_exporter,安装多台多次执行以下步骤即可

  1. 下载适合平台的最新版本并解压,官方地址: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
  1. 创建一个专门的node-exporter用户
1
2
3
4
5
# 创建一个专门的node-exporter用户
useradd -M -s /usr/sbin/nologin node-exporter

# 检查用户是否创建成功,检查结果中应存在grafana用户,shell为nologin
cat /etc/passwd
  1. 更改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
  1. 启动node_exporter服务
1
2
# 直接执行node_exporter二进制文件即可启动node_exporter服务,此方法不方便,一般会创建systemd服务管理pnode_exporter服务进程,按ctrl+c可以结束服务进程
/opt/node_exporter/node_exporter
  1. 创建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. 常用启动参数说明
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
##node_exporte 基本信息配置##
--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返回信息中需要收集的选项
  1. 检查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
  1. 启动并检查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
  1. 访问node_exporter
应用 访问地址 备注
node_exporter http://服务器IP地址:9100/metrics 无用户名密码

图片

1.10 配置prometheus监控各台服务器

  1. 修改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'.
  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
  1. 检查各台服务器node_exporter是否配置成功,访问Prometheus服务(http://服务器IP地址:9090),点击Status,再点击Targets

图片

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

图片

  1. 检查告警是否正常

图片

1.11 配置Grafana展示监控指标

  1. 进入Grafa,访问 http://服务器IP地址:3000
  2. 设置Grafana语言为中文,时区为上海,点击小齿轮,点击General

image-20240417211050711

点击Default preferences

image-20240417211124621

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

image-20240417211217444

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

image-20240417211351652

点击Prometheus

image-20240417211417858

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

image-20240417212534236

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

image-20240417211550808

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

image-20240417211608398

  1. 创建并导入仪表盘

访问:https://grafana.com/grafana/dashboards/,找到Node Exporter Full并点击

image-20240417211657894

点击右边的Copy ID to clipboard

image-20240417211726592

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

image-20240417211840656

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

image-20240417211916121

输入名称,名称自定义

image-20240417212008682

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

image-20240417212118655

最后点击最下面import

image-20240417212135730

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

image-20240417212208694

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. 下载适合平台的最新版本并解压
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
  1. 创建一个专门的prometheus用户
1
2
3
4
5
# 创建一个专门的prometheus用户
useradd -M -s /usr/sbin/nologin prometheus

# 检查用户是否创建成功,检查结果中应存在prometheus用户,shell为nologin
cat /etc/passwd
  1. 更改prometheus目录用户权限,授权给prometheus
1
2
3
4
5
# 更改prometheus目录用户权限,授权给prometheus
chown prometheus:prometheus -R /opt/prometheus

# 检查目录权限是否设置成功,属主和属组都应为prometheus
ll -d /opt/prometheus
  1. 启动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
  1. 为创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
  1. 启动参数说明
选项&参数 解释
-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]
  1. 检查prometheus的systemd服务是否创建成功
1
2
3
4
5
# 检查systemd文件是否存在
ls -l /etc/systemd/system/prometheus.service

# 检查prometheus.service文件内容是否正确
cat /etc/systemd/system/prometheus.service
  1. 启动并检查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
  1. 当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
  1. 访问prometheus
应用 访问地址 备注
prometheus http://服务器IP地址:9090 无用户名和密码
监控指标 http://服务器IP地址:9090/metrics 无用户名和密码
  1. 访问显示结果如下 (http://10.0.2.20:9090)

图片

2.7 安装Alertmanager

  1. 下载适合平台的最新版本并解压,官方地址: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
  1. 创建一个专门的alertmanager用户
1
2
3
4
5
# 创建一个专门的alertmanager用户
useradd -M -s /usr/sbin/nologin alertmanager

# 检查用户是否创建成功,检查结果中应存在alertmanager用户,shell为nologin
cat /etc/passwd
  1. 更改prometheus目录的用户权限,授权给alertmanager
1
2
3
4
5
# 更改prometheus目录的用户权限,授权给alertmanager
chown alertmanager:alertmanager -R /opt/alertmanager

# 检查目录权限是否设置成功,属主和属组都应为alertmanager
ll -d /opt/alertmanager
  1. 启动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
  1. 创建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
  1. 检查alertmanager的systemd服务是否创建成功
1
2
3
4
5
# 检查systemd文件是否存在
ls -l /etc/systemd/system/alertmanager.service

# 检查prometheus.service文件内容是否正确
cat /etc/systemd/system/alertmanager.service
  1. 启动并检查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
  1. 访问alertmanagers
应用 访问地址 备注
alertmanagers http://服务器IP地址:9093 无用户名密码
  1. 检查状态是否正常

图片

  1. 修改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"
  1. 在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. 检查配置文件是否正确
1
2
3
4
5
# 进入prometheus目录
cd /opt/prometheus

# 执行检查命令
./promtool check config prometheus.yml
  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
  1. 访问Prometheus (http://10.0.2.20:9090) 服务器,点击Alerts,展开服务告警,检查alertmanager是否配置成功,如下图所示:

图片

2.8 安装Grafana

  1. 下载适合平台的最新版本并解压,官方地址: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
  1. 创建一个专门的grafana账号
1
2
3
4
5
# 创建一个专门的grafana账号
useradd -M -s /usr/sbin/nologin grafana

# 检查用户是否创建成功,检查结果中应存在grafana用户,shell为nologin
cat /etc/passwd
  1. 更改grafana目录用户权限,授权给grafana
1
2
3
4
5
# 更改grafana目录用户权限,授权给grafana
chown grafana:grafana -R /opt/grafana

# 检查目录权限是否设置成功,属主和属组都应为grafana
ll -d /opt/grafana
  1. 启动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
  1. 创建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
  1. 启动参数解释
选项 解释
–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 显示帮助
  1. 检查grafana的systemd服务是否创建成功
1
2
3
4
5
# 检查systemd文件是否存在
ls -l /etc/systemd/system/grafana.service

# 检查grafana-server.service文件内容是否正确
cat /etc/systemd/system/grafana.service
  1. 启动并检查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
  1. 访问grafana
  • 首次登录会要求修改密码
应用 访问地址 备注
grafana http://服务器IP地址:3000 admin/admin

图片

2.9 安装node_exporter

说明:每台服务器均需要安装node_exporter,用于收集操作系统和硬件信息的metrics。Prometeus,Alertmanager及Grafana也需要被监控,因此同样需要安装node_exporter,安装多台多次执行以下步骤即可

  1. 下载适合平台的最新版本并解压,官方地址: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
  1. 创建一个专门的node-exporter用户
1
2
3
4
5
# 创建一个专门的node-exporter用户
useradd -M -s /usr/sbin/nologin node-exporter

# 检查用户是否创建成功,检查结果中应存在grafana用户,shell为nologin
cat /etc/passwd
  1. 更改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
  1. 启动node_exporter服务
1
2
# 直接执行node_exporter二进制文件即可启动node_exporter服务,此方法不方便,一般会创建systemd服务管理pnode_exporter服务进程,按ctrl+c可以结束服务进程
/opt/node_exporter/node_exporter
  1. 创建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. 常用启动参数说明
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
##node_exporte 基本信息配置##
--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返回信息中需要收集的选项
  1. 检查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
  1. 启动并检查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
  1. 访问node_exporter
应用 访问地址 备注
node_exporter http://服务器IP地址:9100/metrics 无用户名密码

图片

2.10 配置prometheus监控各台服务器

  1. 修改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服务器
  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
  1. 检查各台服务器node_exporter是否配置成功,访问Prometheus服务(http://服务器IP地址:9090),点击Status,再点击Targets

图片

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

图片

  1. 检查告警是否正常

图片

2.11 配置Grafana展示监控指标

  1. 进入Grafa,访问 http://服务器IP地址:3000
  2. 设置Grafana语言为中文,时区为上海,点击小齿轮,点击General

图片

点击Default preferences

图片

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

图片

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

图片

点击Prometheus

图片

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

图片

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

图片

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

图片

  1. 创建并导入仪表盘

访问:https://grafana.com/grafana/dashboards/,找到Node Exporter Full并点击

图片

点击右边的Copy ID to clipboard

图片

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

图片

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

图片

输入名称,名称自定义

图片

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

图片

最后点击最下面import

图片

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

图片