prometheus-3.5.3.linux-amd64部署及使用
1.部署Prometheus
环境介绍:
|
服务器名称 |
操作系统 |
服务器资源情况 |
软件版本 |
|
Prometheus监控 |
Centos7.9 |
2c,4g,50g |
Prometheus-3.5.3+Grafana13.0.2 |
|
Liunx、Nginx |
Centos7.9 |
2c,4g,50g |
Nginx-1.24.0 |
Prometheus官网:Download | Prometheus
Grafana官网:Download Grafana
#设置时间及时区(监控服务器对时间要求很严谨建议配置)
#查看自己服务器的时区
timedatectl
#更换时区为上海
timedatectl set-timezone Asia/Shanghai
#查看服务器时间
date
date -s "2026-07-13 14:30:00" #时间不正确的话更正时间
1.1部署Prometheus监控端
首先需要确认自己的cpu架构
uname -a

进入官网下载自己服务器情况对应的安装包(x86_64选择amd64)

1.1.1上传压缩包后解压并修改目录名称

1.1.2配置系统服务(方便后续进行管理)

#创建并打开prometheus系统服务文件
vim /usr/lib/systemd/system/prometheus.service
#配置如下(记得先确认下自己的安装目录)
[Unit]
Description=Prometheus Monitoring System
After=network.target
[Service]
Type=simple
ExecStart=/root/prometheus/prometheus \
--config.file=/root/prometheus/prometheus.yml \
--storage.tsdb.path=/root/prometheus/data/ \
--web.enable-lifecycle
Restart=always
[Install]
WantedBy=multi-user.target
systemctl daemon-reload #重新加载系统服务配置,也就是让你刚刚写的配置生效
systemctl enable prometheus.service --now #设置开机自启并立即启动
systemctl status prometheus.service #查看服务的状态
注:如果不重新加载的话启动失败,效果如下:

注:prometheus自带的排错工具:./promtool check config /你的安装路径/prometheus.yml

Prometheus.yml #prometheus的配置文件

# 全局配置
global:
scrape_interval: 30s # 每30秒一次从客户端拉取一次数据。
evaluation_interval: 5s # 每隔5秒执行一次告警规则和记录规则,检查下有没有触发告警。
scrape_timeout: 10s #单次拉取数据的超时时间。如果被监控机器 10 秒内没响应,就放弃这次拉取
# 告警配置
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# 规则文件
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
# 抓取配置
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9090"]
# The label name is added as a label `label_name=<label_value>` to any timeseries scraped from this config.
labels:
app: "prometheus"
#重新加载配置不重启服务
[root@localhost prometheus]# curl -X POST http://localhost:9090/-/reload
1.1.3访问测试(默认端口为9090)

注:如果访问不到检查服务是否正常、9090端口是否启动正常、还有服务器防火墙有没有关或者放通策略。
查看监控本机的状态


监控本机的数据(通过http://服务器IP:9090/metrics)

主界面可以查询需要查看的对应数据


1.2 Prometheus配置客户端
Prometheus官网:Download | Prometheus
监控客户端资源情况(需要监控数据库或者中间件的话需要安装别的客户端安装包)

1.2.1上传并解压客户端压缩包

1.2.2创建系统服务

[root@localhost ~]# vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
After=network.target
[Service]
ExecStart=/root/node_exporter/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target
#重新加载系统服务配置,也就是让你刚刚写的配置生效
[root@localhost ~]# systemctl daemon-reload
#设置开机自启并立即启动服务
[root@localhost ~]# systemctl enable node_exporter.service --now
#查看服务状态
[root@localhost ~]# systemctl status node_exporter.service
注:客户端默认端口为9100

2. 安装Grafana
2.1下载安装包
Grafana官网:Download Grafana

无法联网下载压缩包安装,可以联网的话直接复制下面的命令直接安装
2.1.1安装依赖及Grafana
yum -y install fontconfig && yum install -y https://dl.grafana.com/grafana-enterprise/release/13.0.2/grafana-enterprise_13.0.2_26816849631_linux_amd64.rpm

systemctl enable grafana-server.service --now #grafana开机自启并立即启动
systemctl status grafana-server.service #查看grafana状态

2.1.2访问测试
(默认端口3000,默认账密:admin/admin)
注:第一次登录会提示修改密码

2.1.3设置中文

点击后下滑,找到Language字段并展开,选择简体中文并保存配置


命令行设置中文
vim /etc/grafana/grafana.ini

2.2 Grafana配置数据源
点击DATA SOURCES



保存并测试

监控模板下载
访问:Grafana dashboards | Grafana Labs
访问后下滑有很多模板

点击模板并下载(可以下载json和复制模板id)



导入模板


导入刚刚下载的json模板再保存下配置

通过模板id导入模板

查看模板-->仪表盘



2.2.1Grafana接入Linux服务器数据
Prometheus监控端配置客户端

[root@localhost prometheus]# vim prometheus.yml
# 全局配置
global:
scrape_interval: 30s # 每30秒一次从客户端拉取一次数据。
evaluation_interval: 5s # 每隔5秒执行一次告警规则和记录规则,检查下有没有触发告警。
scrape_timeout: 10s #单次拉取数据的超时时间。如果被监控机器 10 秒内没响应,就放弃这次拉取
# 告警配置
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# 规则文件
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
# 抓取配置
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['172.25.62.100:9090']
- job_name: 'linux'
static_configs:
- targets: ['172.25.42.101:9100','172.25.62.101:9100'] #多个IP用,分开
重启prometheus监控端
#重新加载配置不重启服务
[root@localhost prometheus]# curl -X POST http://localhost:9090/-/reload

Web页面查看客户端数据

错误分析:
这边显示抓取失败,首先查看是否是服务器防火墙问题

这边看到防火墙是开启状态,我们关闭防火墙再看下是否能抓取到

关闭后30秒后再去看下监控端是否已经更新数据
注:前面配置文件已经标明监控端30秒向客户端取一次数据

关闭防火墙后显示客户端状态正常
注:如果不能关闭防火墙的话需要放通监控端访问客户端的9100端口的策略

grafana查看linux服务器数据

2.2.2Grafana接入Nginx服务器数据
Nginx服务器安装nginx-prometheus-exporter
下载地址:
可以联网的话直接执行下方命令:
wget https://github.com/nginx/nginx-prometheus-exporter/releases/download/v1.3.0/nginx-prometheus-exporter_1.3.0_linux_amd64.tar.gz

解压并启动nginx-prometheus-exporter

#将nginx-prometheus-exporter进程放到后台运行
nohup ./nginx-prometheus-exporter/nginx-prometheus-exporter -nginx.scrape-uri http://127.0.0.1:80/nginx_status &
注:nginx-prometheus-exporter会监听服务器的9113端口

[root@localhost ~]# crontab -e
@reboot /usr/local/nginx/sbin/nginx
@reboot /root/nginx-prometheus-exporter/nginx-prometheus-exporter -nginx.scrape-uri http://127.0.0.1:80/nginx_status >> /root/nginx-prometheus-exporter/start.log 2>&1 &

官网安装一个Nginx展示模板

导入Nginx数据展示模板


输入刚刚复制的模板id并加载

选择数据接入器并加载


nginx -V 2>&1 | grep -o with-http_stub_status_module #查看是否存在该模块

如果不存的话需要重新编译添加模块
./configure --prefix=/nginx的安装目录 --with-http_stub_status_module --add-module=nginx-module-vts #添加模块
make #编译
make install #编译安装
注:编译和添加模块不会影响服务,但是编译安装的话会替换掉现有的nginx配置文件,建议先将nginx整个目录全都拷贝以下,安装完再替换回去。
添加完模块后修改nginx.conf配置文件(添加到server模块)
location /nginx_status { #访问172.25.62.101服务器的80端口的nginx_status的url会进入该配置执行后续规则
stub_status on; #开启nginx内置状态统计功能
access_log off; #关闭该路径的访问日志记录
allow 127.0.0.1; #只允许172.25.62.100访问本机的nginx_status状态模块
deny all; #拒绝所有IP访问
}

prometheus配置文件添加Nginx服务器

[root@localhost prometheus]# vim prometheus.yml
# 全局配置
global:
scrape_interval: 30s # 每30秒一次从客户端拉取一次数据。
evaluation_interval: 5s # 每隔5秒执行一次告警规则和记录规则,检查下有没有触发告警。
scrape_timeout: 10s #单次拉取数据的超时时间。如果被监控机器 10 秒内没响应,就放弃这次拉取
# 告警配置
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# 规则文件
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
# 抓取配置
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['172.25.62.100:9090']
- job_name: 'linux'
static_configs:
- targets: ['172.25.42.101:9100','172.25.62.101:9100'] #多个IP用,分开
- job_name: 'Nginx'
static_configs:
- targets: ['172.25.42.101:9113']
#重启Prometheus
[root@localhost prometheus]# systemctl restart prometheus
[root@localhost prometheus]# systemctl status prometheus
#重新加载配置不重启服务
[root@localhost prometheus]# curl -X POST http://localhost:9090/-/reload

Web查看是否有数据


查看Grafana的web端是否有数据


3.Prometheus配置告警
3.1 Prometheus配置钉钉告警
3.1.1安装alertmanager

上传并解压压缩包

配置系统服务

[root@localhost ~]# cat /usr/lib/systemd/system/alertmanager.service
[Unit]
Description=Prometheus-Server
After=network.target
[Service]
ExecStart=/root/alertmanager/alertmanager --cluster.advertise-address=0.0.0.0:59093 --config.file=/root/alertmanager/alertmanager.yml
[Install]
WantedBy=multi-user.target
重新加载系统服务配置
systemctl daemon-reload
设置开机自启并直接启动
systemctl enable --now alertmanager


3.1.2安装钉钉告警组件(安装到prometheus服务器上)
wget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v2.1.0/prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz
注:安装显示证书不安全可以跳过证书验证直接安装

跳过证书验证:
Wget --no-check-certificate https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v2.1.0/prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz

解压报错解析:

原因是因为下载的文件有问题,大概率是下载失败了,后缀是压缩包的后缀,实际下载的可能是github的页面文件,重新通过国内镜像源下载。
wget --no-check-certificate https://mirror.ghproxy.com/https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v2.1.0/prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz


或者直接通过电脑下载也可以,下载完传到服务器,下载地址如下:
https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v2.1.0/prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz
解压压缩包

创建系统服务(方便后续管理)

[root@localhost ~]# vim /usr/lib/systemd/system/prometheus-webhook-dingtalk.service
[Service]
ExecStart=/root/prometheus-webhook/prometheus-webhook-dingtalk --config.file=/root/prometheus-webhook/config.example.yml
[Install]
WantedBy=multi-user.target
[Unit]
Description=prometheus-webhook-dingtalk
After=network.target
#重新加载系统服务配置
systemctl daemon-reload
#设置开机自启并直接启动
systemctl enable --now prometheus-webhook-dingtalk

默认端口为8060

配置钉钉告警机器人


3.1.3钉钉机器人和钉钉告警组件关联
修改告警组件配置文件(配置文件的格式建议参照下方图片,参照下方配置文件整体的结构,要不然会报错导致启动失败)
[root@localhost prometheus-webhook]# vim config.example.yml

[root@localhost alertmanager]# vim alertmanager.yml
route:
group_by: ['alertname'] #告警分组规则,把标签值相同的告警合并成一组,只发一条汇总通知
group_wait: 20s # 最初即第一次等待多久时间发送一组警报的通知
#group_wait含义:等待时间,在收到第一个告警后等待多久才发送通知
#作用:给系统时间收集同一分组内的其他相关告警,避免频繁发送
#效果:10秒内同一分组的其他告警会被合并到同一个通知中
group_interval: 20s # 在发送新警报前的等待时间
#group_interval含义:同一分组内告警的发送间隔
#作用:控制同一组告警通知的更新频率
#效果:每10秒检查一次分组状态,如果有新告警加入或状态变化,会发送更新通知
repeat_interval: 3m
#repeat_interval含义:重复发送相同告警的间隔时间
#作用:对于持续触发的告警,控制重复提醒的频率
#效果:即使告警状态没有变化,每10秒也会重新发送一次通知
receiver: 'dingding' # 发送警报的接收者的名称,以下receivers name的名称
#定义警报接收者信息
receivers:
- name: 'dingding' #钉钉
webhook_configs: #钉钉配置
- send_resolved: true
url: 'http://localhost:8060/dingtalk/webhook1/send' #接收警报的url配置
# 当严重级别 (critical) 告警产生时,自动抑制 / 屏蔽同维度下的警告级别 (warning) 告警,避免大量衍生告警刷屏。
inhibit_rules: #抑制规则
- source_match: #源标签
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
# 匹配条件:以下标签 取值完全相同 时,才执行抑制
# 1. alertname:告警名称
# 2. dev:自定义设备标签
# 3. instance:监控实例地址(IP:端口)
route:
group_by: ['alertname']
group_wait: 20s
group_interval: 20s
repeat_interval: 3m
receiver: 'dingding'
receivers:
- name: 'dingding'
webhook_configs:
- send_resolved: true
url: 'http://localhost:8060/dingtalk/webhook1/send'
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']

重启监控组件

[root@localhost prometheus]# vim prometheus.yml

# 全局配置
global:
scrape_interval: 30s # 每30秒一次从客户端拉取一次数据。
evaluation_interval: 5s # 每隔5秒执行一次告警规则和记录规则,检查下有没有触发告警。
scrape_timeout: 10s #单次拉取数据的超时时间。如果被监控机器 10 秒内没响应,就放弃这次拉取
# 告警配置
alerting:
alertmanagers:
- static_configs:
- targets:
- 172.25.62.100:9093 #alertmanagerip+端口
# 规则文件
rule_files:
- "/root/prometheus/rules/*.yml" #指定告警规则文件存放位置
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
# 抓取配置
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['172.25.62.100:9090']
- job_name: 'linux'
static_configs:
- targets: ['172.25.62.101:9100'] #多个IP用,分开
- job_name: 'Nginx'
static_configs:
- targets: ['172.25.62.101:9113']
创建告警规则

[root@localhost prometheus]# mkdir /root/prometheus/rules
[root@localhost prometheus]# vim /root/prometheus/rules/guize.yml
groups:
- name: node-up
rules:
#服务器告警规则
- alert: node-up
expr: up == 0
for: 10s
labels:
severity: warning
team: node
annotations:
summary: "{{ $labels.instance }} 服务器已停止运行超过 10s!"
#nginx告警规则
- alert: NginxServiceDown
expr: nginx_up == 0
for: 10s
labels:
severity: critical
annotations:
summary: "Nginx服务异常宕机"
description: "实例 {{ $labels.instance }} 的Nginx服务已不可用,请尽快排查"
# alert:告警规则的名称。
# expr:基于 PromQL 表达式告警触发条件,用于计算是否有时间序列满足该条件。
# for:评估等待时间,可选参数。用于表示只有当触发条件多久才发送告警。在等待期间新产生告警的状态为 pending。
# labels:自定义标签,允许用户指定要附加到告警上的一组附加标签。
# annotations:用于指定一组附加信息,比如用于描述告警详细信息的文字等,annotations 的内容在告警产生时会一同作为参数发送到 Alertmanager。
# summary 描述告警的概要信息,description 用于描述告警的详细信息。
# 同时 Alertmanager 的 UI 也会根据这两个标签值,显示告警信息。
#重新加载prometheus配置文件无需重启
[root@localhost prometheus]# curl -X POST http://localhost:9090/-/reload
Web页面查看告警规则

3.1.4配置钉钉告警模板
[root@localhost ~]# vim prometheus-webhook/contrib/templates/legacy/dingding.tmpl
{{ define "dingtalk.message" }}
{{ if gt (len .Alerts.Firing) 0 }}
### ??【Prometheus告警】<br>
**告警状态:** <font color="red">FIRING 告警中</font><br>
**告警数量:** {{ .Alerts.Firing | len }} 条<br>
<br>
{{ range .Alerts.Firing }}
**━━━━━━━━━━━━━━━━**<br>
**告警名称:** {{ .Labels.alertname }}<br>
**告警级别:** {{ .Labels.severity }}<br>
**故障主机:** {{ .Labels.instance }}<br>
**告警指标:** {{ .Labels.job }}<br>
**触发时间:** {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}<br>
**告警详情:** {{ .Annotations.description }}<br>
**告警概要:** {{ .Annotations.summary }}<br>
**监控链接:** [点击查看]({{ .GeneratorURL }})<br>
<br>
{{ end }}
{{ end }}
{{ if gt (len .Alerts.Resolved) 0 }}
### ??【Prometheus恢复】<br>
**告警状态:** <font color="green">RESOLVED 已恢复</font><br>
**恢复数量:** {{ .Alerts.Resolved | len }} 条<br>
<br>
{{ range .Alerts.Resolved }}
**━━━━━━━━━━━━━━━━**<br>
**告警名称:** {{ .Labels.alertname }}<br>
**告警级别:** {{ .Labels.severity }}<br>
**故障主机:** {{ .Labels.instance }}<br>
**触发时间:** {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}<br>
**告警概要:** {{ .Annotations.summary }}<br>
**恢复时间:** {{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}<br>
**恢复详情:** {{ .Annotations.description }}<br>
<br>
{{ end }}
{{ end }}
{{ end }}

[root@localhost ~]# vim prometheus-webhook/config.example.yml
templates:
- /root/prometheus-webhook/contrib/templates/legacy/dingding.tmpl
## Request timeout
# timeout: 5s
## Uncomment following line in order to write template from scratch (be careful!)
#no_builtin_template: true
## Customizable templates path
#templates:
# - contrib/templates/legacy/template.tmpl
## You can also override default template using `default_message`
## The following example to use the 'legacy' template from v0.3.0
#default_message:
# title: '{{ template "legacy.title" . }}'
# text: '{{ template "legacy.content" . }}'
## Targets, previously was known as "profiles"
targets:
webhook1:
url: https://oapi.dingtalk.com/robot/send?access_token=e96937d98d6c63807287b9bf7515cffb547ecbdb1cda39e1bc54424e3de7aa61
# secret for signature
secret: SEC9ebf3700145a31ebc6e502f7d6010d4d6e61d69859fd18b78bc46489aa9339e4
message:
title: 'Prometheus监控告警'
text: '{{ template "dingtalk.message" . }}'
webhook2:
url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx
webhook_legacy:
url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx
# Customize template content
message:
# Use legacy template
title: '{{ template "dingtalk.message" . }}'
text: '{{ template "legacy.content" . }}'
webhook_mention_all:
url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx
mention:
all: true
webhook_mention_users:
url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx
mention:
mobiles: ['156xxxx8827', '189xxxx8325']

配置alertmanager触发钉钉告警组件

[root@localhost ~]# vim /root/alertmanager/alertmanager.yml
templates:
- /root/prometheus-webhook/contrib/templates/legacy/dingding.tmpl
route:
group_by: ['alertname'] #告警分组规则,把标签值相同的告警合并成一组,只发一条汇总通知
###############################################################################################################
group_wait: 20s # 最初即第一次等待多久时间发送一组警报的通知
#group_wait含义:等待时间,在收到第一个告警后等待多久才发送通知
#作用:给系统时间收集同一分组内的其他相关告警,避免频繁发送
#效果:10秒内同一分组的其他告警会被合并到同一个通知中
###############################################################################################################
group_interval: 20s # 在发送新警报前的等待时间
#group_interval含义:同一分组内告警的发送间隔
#作用:控制同一组告警通知的更新频率
#效果:每10秒检查一次分组状态,如果有新告警加入或状态变化,会发送更新通知
###############################################################################################################
repeat_interval: 3m
#repeat_interval含义:重复发送相同告警的间隔时间
#作用:对于持续触发的告警,控制重复提醒的频率
#效果:即使告警状态没有变化,每10秒也会重新发送一次通知
###############################################################################################################
receiver: 'dingding' # 发送警报的接收者的名称,以下receivers name的名称
###############################################################################################################
#定义警报接收者信息
receivers:
- name: 'dingding' #钉钉
webhook_configs: #钉钉配置
- send_resolved: true
url: 'http://localhost:8060/dingtalk/webhook1/send' #接收警报的url配置
###############################################################################################################
# 当严重级别 (critical) 告警产生时,自动抑制 / 屏蔽同维度下的警告级别 (warning) 告警,避免大量衍生告警刷屏。
inhibit_rules: #抑制规则
- source_match: #源标签
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
[root@localhost ~]# systemctl restart alertmanager
[root@localhost ~]# systemctl restart prometheus-webhook-dingtalk

测试告警
[root@localhost ~]# nginx -s stop

[root@localhost ~]# nginx

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)