Prometheus监控平台项目实践(详细教程+注意事项)
2026/8/25 23:37:21 网站建设 项目流程

一、前期准备工作

1、压缩包清单

需要准备以下压缩包:prometheus、alertmanager、node_exporter、grafana、mysqld_exporter、process_exporter、pushgateway、alertmanager-wechatrobot-webhook、blackbox_exporter、ipmi_exporter、cadvisor(docker拉取-需安装)、prometheus-webhook-dingtalk
cadvisor安装:docker run -d
–name=cadvisor
–privileged
–volume=/:/rootfs:ro
–volume=/var/run:/var/run:rw
–volume=/sys:/sys:ro
–volume=/var/lib/docker/:/var/lib/docker:ro
–publish=8080:8080
gcr.io/cadvisor/cadvisor:latest
2、创建存放压缩文件的目录

mkdir-p/opt/monitor/# 自定义目录

3、解压缩到存放目录

tar-xvfprometheus-3.5.3.linux-amd64.tar.gz-C/opt/monitor# 以 prometheus 为例,其余组件依次完成

4、简化目录名称、添加用户及修改权限

useradd-r-M-s/sbin/nologin prometheuschown-Rprometheus: /opt/monitor/[实际名称]# 目录名称按实际填写

5、编辑服务配置文件至 /usr/lib/systemd/system/ 下

以 prometheus 为例:

vi/usr/lib/systemd/system/prometheus.service

注意:服务配置文件的路径要与压缩文件路径高度一致,否则服务配置文件找不到会报错,配置无法正常加载。

服务文件模板:

[Unit] Description=Prometheus Server [Service] Type=simple User=prometheus Group=prometheus ExecStart=/opt/monitor/prometheus/prometheus \ --config.file=/opt/monitor/prometheus/prometheus.yml \ #主配置文件存放的绝对路径 --storage.tsdb.path=/opt/monitor/prometheus/data \ #数据库TSDB存储目录,自动创建 --storage.tsdb.retention.time=60d \ #数据保留天数。默认15天,过期自动删除释放磁盘空间 --web.enable-lifecycle #热加载 Restart=on-failure [Install] WantedBy=multi-user.target

6、加载+开机自启动+状态查询

systemctl daemon-reload systemctlenableprometheus--nowsystemctl status prometheus

注意:若服务显示错误未开启,则优先检查服务配置文件,特别是路径问题。此后可先查看端口的释放(ss -lntup),若显示9090端口则说明配置正常可在浏览器上搜索。
问题:端口释放但页面显示不出来?
解答:可能是防火墙端口没释放,先查看当前防火墙释放的端口:firewall-cmd --list-port 若没有则添加即可。
7、其他监控项直接添加在prometheus.yml中进行关联加载:

#在scrape_configs这行下面添加如下配置:#node_exporter(操作系统层面的指标)- job_name:'node_exporter'static_configs: - targets:['192.168.10.11:9100']labels: instance: Prometheus服务器#mysqld_exporter(数据库运行指标)- job_name: mysqld static_configs: - targets:['192.168.10.11:9104']#process_exporter(主机进程指标)- job_name:'process_exporter'static_configs: - targets:['192.168.10.11:9256']#pushgateway_exporter(推送指标)- job_name:'pushgateway'honor_labels:true# 加上此配置,exporter节点上传数据中的一些标签将不会被pushgateway节点的相同标签覆盖static_configs: - targets:['192.168.10.11:9091']labels: instance:'pushgateway'#blackbox_exporter(模拟用户”或“探针)- job_name: baidu_http2xx_probe params: module: - http_2xx target: - baidu.com metrics_path: /probe static_configs: - targets: -192.168.10.11:9115 - job_name: prometheus_http2xx_probe params: module: - http_2xx target: - prometheus.io metrics_path: /probe static_configs: - targets:['192.168.10.11:9115']#ipmi_exporter(硬件健康指标)- job_name:'ipmi_exporter'scrape_interval: 1m static_configs: - targets:['192.168.10.11:9290']

注意:每次修改时可用promtool工具进行验证配置文件的正确与否:

./promtool check-config prometheus.yml#确保是在prometheus目录下,若是在其他目录要调整路径

8、配置告警路由alertmanager.yml:
8.1、分组(group)
route:
group_by: [‘alertname’, ‘instance’] # 按告警名称和实例分组
group_wait: 30s # 首次告警等待30秒,以收集同组其他告警再发送
group_interval: 5m # 同组有新告警时,5分钟后发送更新通知
repeat_interval: 4h # 告警持续触发时,每4小时重复发送一次

8.2、抑制(inhibition):
inhibit_rules:
# 规则:当节点宕机(NodeDown)时,抑制该节点上的所有警告级别告警
- source_match:
severity: ‘critical’
alertname: ‘NodeDown’
target_match:
severity: ‘warning’
equal: [‘instance’] # 必须保证 instance 标签相同才抑制
8.3、静默(silence):
静默功能在 Alertmanager 的 Web 界面中进行配置。
根据告警的标签(如 instance=server1)来定义静默规则,并设置持续时间。
配置好警告接收方后(可添加多个接收方):
1、email:添加email_configs参数,在其下添加邮箱地址。
2、钉钉:用 Webhook 转发到钉钉机器人(需安装prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz压缩包)
3、企业微信:(需安装webhook压缩包—alertmanager-wechatrobot-webhook-main.zip)
特别注意:钉钉是独立的发送警告信息,具有自己的yml配置文件。可以关联alertmanager进行警告,但url地址要更换为实际地址。
9、在prometheus目录下定义告警规则:

mkdirrules/[自定义名称.yml]-pvi名称.yml

注意:不同的指标集对应的告警规则不同,对应的指标集创建对应的告警规则
验证告警规则正确性:

./promtool check rules[告警规则yml文件]

随后在prometheus.yml中rules.file模块下添加警告规则路径,以便调取。
10、promQL查询语言规则(prometheus的web界面进行):
10.1、筛选:
定义:定位目标数据,通过标签匹配。
写法: 《指标名+标签匹配器》
<metric_name>{<label_name>=<label_value>, …}
按时间筛选:
瞬时向量:查询当前最新的样本值。如http_requests_total.
区间向量:查询过去一段时间内的所有样本值。如http_requests_total[5m] #过去5分钟 所有数据点
按指标名筛选:
{name=“<metric_name>”}
10.2、聚合:
定义:按标签进行分类统计。
写法:<聚合操作符>([参数,] <指标表达式>) [by|without (标签列表)]
by:按指定的标签进行分组。
without:移除指定的标签,将剩余标签作为分组依据。
聚合操作符:
sum 求和 sum(http_requests_total) by (instance) → 按机器统计总请求量
avg 平均值 avg(node_cpu_seconds_total) by (cpu) → 按CPU核统计平均使用率
max / min 最大值 / 最小值 max(http_requests_total) by (pod) → 按Pod统计最大 请求量
count 计数 count(up) → 统计所有UP的监控目标数量
10.3、计算:
定义:筛选和聚合得到的数据通过计算函数转化为有意义的指标。
rate():计算每秒平均增长率。 rate(http_requests_total[5m])
irate():计算每秒瞬时增长率
increase():计算区间总增量 increase(http_requests_total[1h])
avg_over_time() 区间内平均值 avg_over_time(node_memory_usage[10m])
max_over_time() 区间内最大值 max_over_time(node_load[5m])
min_over_time() 区间内最小值 min_over_time(node_memory_free[1h])
predict_linear() 预测未来值(基于线性回归),常用于容量规划告警。 predict_linear(node_filesystem_free[1h], 4*3600) 预测4小时后磁盘空间。
10.4.1mysqld_exporter查询语言:

mysql_global_variables_max_connections: 允许的最大连接数; mysql_global_status_threads_connected: 当前开放的连接; mysql_global_status_threads_running:当前开放的连接; mysql_global_status_aborted_connects:当前开放的连接; mysql_global_status_connection_errors_total{error=“max_connections”}:由于超出最大连接数导致的错 误; mysql_global_status_connection_errors_total{error=“internal”}:由于系统内部导致的错误;

10.4.2Process_exporter查询语言:

namedprocess_namegroup_states Running/Sleeping/Other/Zombie状态的进程数 namedprocess_namegroup_cpu_seconds_total 获取/proc/[pid]/stat 进程CPU utime、stime状态时间 namedprocess_namegroup_read_bytes_total 获取/proc/[pid]/io 进程读取字节数 namedprocess_namegroup_write_bytes_total 获取/proc/[pid]/io 进程写入字节数 namedprocess_namegroup_memory_bytes 获取进程使用的内存字节数 namedprocess_namegroup_open_filedesc 获取进程使用的文件描述符数量 namedprocess_namegroup_thread_count 运行的线程数 namedprocess_namegroup_thread_cpu_seconds_total 获取线程CPU状态时间 namedprocess_namegroup_thread_io_bytes_total 获取线程IO字节数

10.4.3Node_exporter查询语言:

node_cpu_seconds_total 统计CPU在各模式下(如用户态、系统态、空闲态)的累积运行时间,用于计算使用率。 node_memory_MemTotal_bytes node_memory_MemAvailable_bytes 分别提供物理内存的总量和当前可用量(不含Swap),是监控内存压力的关键。磁盘&文件系统 node_filesystem_*_bytes node_disk_*_total 监控文件系统的容量、剩余空间、读写字节数,以及磁盘的I/O操作次数和耗时。 node_network_*_bytes_total node_network_*_errs_total 统计网络接口收发数据总量、数据包数量,以及传输过程中的错误和丢包计数。 node_load{1,5,15}node_boot_time_seconds 系统平均负载(1/5/15分钟),以及系统启动时间和上下文切换次数等。 node_processes_pids node_filefd_allocated 显示当前系统进程总数和已分配的文件描述符数量,用于排查进程或句柄耗尽问题。 node_sockstat_TCP_* node_nf_conntrack_entries 监控TCP套接字状态(如allocated, inuse)和连接跟踪表的使用情况。

10.4.4ipmi_exporter查询信息:

温度与风扇:ipmi_temperature_celsius(温度,单位°C) ipmi_fan_speed_rpm(风扇转速,单位RPM)。 电源与功耗:ipmi_chassis_power_state(电源状态) ipmi_dcmi_power_consumption_current_watts(当前功耗)。 传感器综合信息:ipmi_sensor_value(传感器读数) ipmi_sensor_state(传感器状态,如正常/异常)。 系统信息:ipmi_bmc_info(BMC固件、制造商等元信息)。

11、Grafana界面接入prometheus数据源进行查看。

强调:本次是对单机进行监控,若是想要对多台主机进行监控则直接在prometheus.yml文件中的targets:下添加对应集群的各类主机IP地址即可。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询