当前位置: 首页 > news >正文

Prometheus(一)—— Prometheus监控系统从入门到实战:理论与部署全指南

文章目录

  • 前言
  • 一、Prometheus监控系统概述
    • 1.1 Prometheus 概述
    • 1.2 TSDB:适配监控场景的存储引擎
    • 1.3 Prometheus核心特点
  • 二、Prometheus生态组件
    • 2.1 Prometheus Server:服务核心组件
    • 2.2 Client Library:客户端库
    • 2.3 Exporter:指标暴露器
    • 2.4 Service Discovery:动态服务发现
    • 2.5 Alertmanager:告警管理中心
    • 2.6 Pushgateway:短期任务数据中转站
    • 2.7 Grafana:监控数据可视化工具
  • 三、Prometheus工作模式与流程
    • 3.1 核心工作模式
    • 3.2 完整工作流程
  • 四、Prometheus的局限性
  • 五、Prometheus实战部署
    • 5.1 环境准备
    • 5.2 部署Prometheus Server(中枢节点)
      • 5.2.1 解压与目录配置
      • 5.2.2 配置系统服务(实现开机自启)
      • 5.2.3 验证部署
    • 5.3 部署Exporter(监控第三方服务)
      • 5.3.1 部署Node-Exporter(监控服务器资源)(`所有节点执行`)
        • 5.3.1.1 解压与安装
        • 5.3.1.2 配置系统服务
        • 5.3.1.3 验证与接入Prometheus
      • 5.3.2 部署mysqld-exporter(监控MySQL数据库)
        • 5.3.2.1 在MySQL服务器上操作
        • 5.3.2.2 在Prometheus Server上添加MySQL监控配置
      • 5.3.3 部署nginx-exporter(监控Nginx服务)
        • 5.3.3.1 在Nginx服务器上操作
        • 5.3.3.2 在Prometheus Server上添加Nginx监控配置
    • 5.4 部署Grafana实现监控可视化
      • 5.4.1 安装与启动Grafana(本文安装在监控中枢节点)
      • 5.4.2 配置Prometheus数据源
      • 5.4.3 导入监控仪表盘
    • 5.5 部署Prometheus服务发现
      • 5.5.1 基于文件的服务发现
      • 5.5.2 基于Consul的服务发现
        • 5.5.2.1 部署Consul服务
        • 5.5.2.2 在Consul中注册监控服务
        • 5.5.2.3 配置Prometheus对接Consul
      • 5.5.3 基于Kubernetes API的服务发现
        • 5.5.3.1 核心配置参数
        • 5.5.3.2 示例配置(发现K8s Node节点)
  • 总结
    • 附录:常用资源链接

前言

在云原生与微服务架构普及的今天,一套高效的监控系统是保障业务稳定运行的核心支撑。Prometheus作为当前最主流的开源监控解决方案之一,凭借其灵活的多维数据模型、强大的查询语言PromQL、丰富的生态组件以及对云原生环境的良好适配,成为运维工程师和开发人员的首选工具。

本文将从Prometheus的基础理论出发,逐步深入其核心组件、工作原理与局限性,最终通过完整的实战步骤,带你完成Prometheus Server、Exporter、Grafana及服务发现的部署与配置。无论是监控服务器资源、MySQL数据库还是Nginx服务,你都能从本文找到可直接落地的操作指南,帮助你快速搭建企业级监控体系。

一、Prometheus监控系统概述

1.1 Prometheus 概述

Prometheus 是一个开源的 服务监控系统与时序数据库,具备统一的数据模型、高效的数据采集与灵活的查询能力。其核心组件 Prometheus Server 负责定期从静态配置或服务发现获得的监控目标中 拉取(Pull)数据,并将其持久化存储

区别:Zabbbix是推数据。Zabbix Agent部署在被监控主机上,主动或被动地发送数据给 Server

被监控主机通过 Exporter 暴露监控指标接口,Prometheus 通过 HTTP 周期性抓取这些数据;若配置了告警规则,则会在采集后计算并将告警发送至 Alertmanager 进行汇总与分发。对于需要主动推送数据的场景,可通过 Pushgateway 临时接收与存储数据,等待 Prometheus 拉取。

监控目标可通过静态配置或 服务发现机制 动态管理,Prometheus 还能直接利用 Kubernetes API Server 实现自动发现和监控集群中的各类对象。

1.2 TSDB:适配监控场景的存储引擎

Prometheus默认使用TSDB(Time Series Database) 作为存储引擎,它之所以能完美契合监控数据的应用场景,核心源于以下特性:
1、支持海量数据存储:可高效处理监控场景下每秒产生的大量时序数据;
2、写入性能优先:监控数据以时间顺序持续产生,TSDB针对顺序写入做了深度优化;
3、数据更新极少:监控数据采集后通常无需修改,仅在数秒/数分钟后写入数据库;
4、删除策略高效:支持按时间范围批量删除历史数据,避免随机删除带来的性能损耗;
5、适配有序读取:监控查询读操作是十分典型的升序或者降序的顺序读。
6、支持高并发读:满足多用户同时查询监控数据的场景,如运维团队共同查看集群状态。

1.3 Prometheus核心特点

1、多维数据模型:所有监控数据以度量名称+键值对标签标识的时序数据形式存储,便于按维度(如服务名、主机IP、环境)筛选查询;
2、内置时序数据库:默认使用TSDB存储数据,同时支持对接InfluxDB、OpenTSDB等外置远端存储;
3、灵活的查询语言PromQL:可基于标签快速筛选、聚合数据,支持计算平均值、增长率、分位数等指标;
4、数据采集方式灵活

  • 主流方式为基于HTTP的Pull(拉取)模式,定期从目标节点获取数据;
  • 支持通过Pushgateway接收短期任务的Push(推送)数据,弥补Pull模式的不足;

5、目标发现机制:可通过静态配置直接指定监控目标,或通过DNS、Consul、Kubernetes等实现动态服务发现;
6、可视化与告警集成:支持接入Grafana展示数据,配合Alertmanager实现告警的去重、分组与多渠道分发。

二、Prometheus生态组件

Prometheus并非单一工具,而是由多个组件构成的生态系统。其中Prometheus Server是核心,其他组件按需部署,共同实现数据采集-存储-分析-可视化-告警的完整监控链路。

在这里插入图片描述

2.1 Prometheus Server:服务核心组件

Prometheus Server是整个监控系统的中枢,主要负责数据采集、存储与告警规则计算,由三个核心模块组成:
1、Retrieval(数据采集模块):定期从配置的监控目标(Target)中拉取指标数据,支持HTTP协议;
2、Storage(存储模块):将采集到的时序数据持久化到本地磁盘(TSDB),默认保留15天数据,可通过配置调整;
3、PromQL(查询模块):提供PromQL查询语言支持,用户可通过Web UI或API调用该模块查询存储的监控数据。

2.2 Client Library:客户端库

Client Library是为开发人员设计的客户端库(支持Go、Java、Python等多语言),目的在于为那些期望原生提供Instrumentation 功能的应用程序提供便捷的开发途径,用于在应用程序内部原生埋点并暴露监控指标

例如,通过Go语言的prometheus/client_golang库,可在应用中定义“接口请求量”“接口响应时间”等自定义指标,并自动暴露HTTP接口供Prometheus Server拉取,无需依赖额外的Exporter

2.3 Exporter:指标暴露器

对于不支持内置监控埋点(Instrumentation)的应用(如MySQL、Nginx、服务器操作系统),需通过Exporter采集指标。Exporter的核心作用是从目标服务收集原始数据,转换为Prometheus格式并通过HTTP接口暴露

常用Exporter及功能如下:
1、Node-Exporter:监控服务器节点资源,如CPU使用率、内存占用、磁盘IO、网络流量等,需部署到所有待监控的主机;
2、mysqld-exporter:采集MySQL数据库指标,如连接数、QPS、慢查询数、表空间大小等;
3、nginx-exporter(如nginx-vts-exporter):采集Nginx服务的流量、请求数、响应状态码等指标,需配合Nginx的nginx-module-vts模块使用;
4、Kube-State-Metrics:监控Kubernetes集群资源状态,如Pod运行状态、Deployment副本数、Service endpoints数量等,需部署在K8s集群内;
5、cAdvisor:采集容器资源使用情况,如容器的CPU使用率、内存占用、磁盘IO等,常与K8s集成;
6、blackbox-exporter:监控业务容器的存活性,支持HTTP、TCP、ICMP等协议的探测。

2.4 Service Discovery:动态服务发现

Service Discovery(服务发现)用于动态识别并管理监控目标,避免了静态配置中“新增节点需手动修改配置”的问题。Prometheus支持多种服务发现机制:

  • 文件发现:通过定期读取YAML/JSON文件获取目标列表;
  • DNS发现:通过DNS解析获取目标地址;
  • 第三方服务发现:如Consul、Kubernetes、etcd等,直接对接第三方系统的API获取目标。

该组件已内置在Prometheus Server中,无需单独部署。

2.5 Alertmanager:告警管理中心

Alertmanager是独立的告警模块,负责接收、处理Prometheus Server发送的告警通知,核心功能包括:
1、去重:同一时间段内相同告警只发送一次,避免重复打扰;
2、分组:将关联告警(如同一主机的CPU、内存告警)合并为一条通知,便于问题定位;
3、路由:根据告警级别或标签,将告警分发到不同渠道(如邮件、钉钉、企业微信);
4、抑制:当某个核心告警(如主机宕机)触发后,抑制该主机上的其他次要告警(如应用端口不可达),减少冗余信息。

2.6 Pushgateway:短期任务数据中转站

Prometheus Server默认使用Pull模式拉取数据,但对于生命周期极短的短期任务(如临时脚本、定时任务),Pull模式无法及时采集数据。此时可通过Pushgateway实现:
1、短期任务主动将数据Push到Pushgateway;
2、Prometheus Server定期从Pushgateway拉取数据,实现短期任务的监控覆盖。

需注意:Pushgateway仅临时存储数据,不负责持久化,数据最终仍需存储到Prometheus的TSDB中。

2.7 Grafana:监控数据可视化工具

Grafana是开源的跨平台度量分析与可视化工具,支持对接Prometheus、InfluxDB等多种数据源,核心价值在于:
1、提供丰富的仪表盘模板:官方库包含大量现成模板(如Node-Exporter监控面板、MySQL监控面板),无需从零开发;
2、支持自定义可视化图表:可按需创建折线图、柱状图、仪表盘等,直观展示指标趋势;
3、告警集成:可基于监控数据设置阈值告警,支持邮件、Slack等渠道。

三、Prometheus工作模式与流程

3.1 核心工作模式

Prometheus的工作模式围绕数据采集-存储-查询-告警四大环节展开,核心逻辑如下:
1、目标发现:Prometheus Server通过静态配置或服务发现(Service Discovery)机制,获取待监控的Target列表;
2、数据采集:Retrieval模块定期(默认15秒)通过HTTP协议从Target的Exporter/Client Library接口拉取指标数据;
3、数据存储:采集到的数据由Storage模块写入TSDB,按时间序列持久化到本地磁盘;
4、查询与可视化:用户通过PromQL查询数据,可在Prometheus Web UI查看原始数据,或通过Grafana生成可视化仪表盘;
5、告警触发:Prometheus Server定期(默认15秒)检查告警规则,满足条件的告警发送至Alertmanager,由其完成告警分发。

3.2 完整工作流程

1、PrometheusPrometheus Server 为核心组件,负责采集和存储时序数据。Server 通过 Pull 模式 从监控目标中拉取指标数据,或通过 Pushgateway 接收主动上报的数据。
2、Prometheus Server 将采集到的监控指标以时间序列的形式存储在本地的 TSDB(Time Series Database) 中,支持 HDD 或 SSD 存储介质。
3、采集的监控数据按时间序列存储后,可根据预先配置的 告警规则(Alert Rules) 进行分析,触发的告警信息会发送至 Alertmanager
4、Alertmanager 负责统一处理告警事件,并根据配置的告警接收渠道,将告警通知发送至 邮件、钉钉、企业微信 等目标。
5、Prometheus 自带 Web UI,并支持使用 PromQL 查询语言,对监控数据进行灵活查询与分析。
6、Grafana 可接入 Prometheus 作为数据源,将监控数据以可视化的图表方式呈现,实现更直观的监控展示。

四、Prometheus的局限性

尽管Prometheus功能强大,但在实际使用中需注意其局限性,避免场景错配:

  • 不适合存储事件与日志:Prometheus的核心是“指标监控”(如CPU使用率、请求量),无法高效存储非结构化的日志数据或离散的事件数据(如Pod重启事件),需搭配ELK Stack(日志)、Falco(安全事件)等工具;
  • 本地存储仅支持短期数据:TSDB默认仅保留15天数据,且本地磁盘容量有限,若需存储数月甚至数年的历史数据,需对接InfluxDB、OpenTSDB等远端存储;
  • 集群机制成熟度较低:原生Prometheus不支持集群部署,单点存在可用性风险。若需高可用或联邦监控(多集群统一监控),需依赖Thanos、Cortex等第三方工具实现。

五、Prometheus实战部署

5.1 环境准备

1、环境规划

环境角色IP地址部署核心组件
监控中枢节点192.168.10.18Prometheus Server、Grafana、Consul、Node-Exporter
MySQL业务监控节点192.168.10.21MySQL Server、mysqld-exporter、Node-Exporter
Nginx业务监控节点192.168.10.22Nginx(含vts模块)、Nginx-exporter、Node-Exporter

2、关闭防火墙与SELinux(所有节点执行):

systemctl stop firewalld
systemctl disable firewalld
setenforce 0  # 临时关闭SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config  # 永久关闭

5.2 部署Prometheus Server(中枢节点)

5.2.1 解压与目录配置

1、上传软件包到/opt目录并解压:

cd /opt
# 若未上传,可通过wget直接下载(需联网)
# wget https://github.com/prometheus/prometheus/releases/download/v2.35.0/prometheus-2.35.0.linux-amd64.tar.gz
tar xf prometheus-2.35.0.linux-amd64.tar.gz
# 移动到标准目录,便于管理
mv prometheus-2.35.0.linux-amd64 /usr/local/prometheus

2、查看默认配置文件(验证解压是否正常):

cat /usr/local/prometheus/prometheus.yml | grep -v "^#"  # 过滤注释,查看核心配置

默认配置解读:

global:					#用于prometheus的全局配置,比如采集间隔,抓取超时时间等scrape_interval: 15s			#采集目标主机监控数据的时间间隔,默认为1mevaluation_interval: 15s 		#触发告警生成alert的时间间隔,默认是1m# scrape_timeout is set to the global default (10s).scrape_timeout: 10s			#数据采集超时时间,默认10salerting:				#用于alertmanager实例的配置,支持静态配置和动态服务发现的机制alertmanagers:- static_configs:- targets:# - alertmanager:9093rule_files:				#用于加载告警规则相关的文件路径的配置,可以使用文件名通配机制# - "first_rules.yml"# - "second_rules.yml"scrape_configs:			#用于采集时序数据源的配置# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.- job_name: "prometheus"		#每个被监控实例的集合用job_name命名,支持静态配置(static_configs)和动态服务发现的机制(*_sd_configs)# metrics_path defaults to '/metrics'metrics_path: '/metrics'    #指标数据采集路径,默认为 /metrics# scheme defaults to 'http'.static_configs:				#静态目标配置,固定从某个target拉取数据- targets: ["localhost:9090"]
  • global:全局配置,如数据采集间隔(scrape_interval: 15s)、告警规则检查间隔(evaluation_interval: 15s);
  • alerting:Alertmanager配置(默认未启用);
  • rule_files:告警规则文件路径(默认未配置);
  • scrape_configs:采集配置,默认仅监控Prometheus Server自身(job_name: "prometheus",目标地址localhost:9090)。

5.2.2 配置系统服务(实现开机自启)

1、创建系统服务文件:

cat > /usr/lib/systemd/system/prometheus.service <<'EOF'
[Unit]
Description=Prometheus Server  # 服务描述
Documentation=https://prometheus.io  # 官方文档地址
After=network.target  # 依赖网络服务[Service]
Type=simple
# 启动命令:指定配置文件、数据存储路径、数据保留时间、启用配置热重载
ExecStart=/usr/local/prometheus/prometheus \
--config.file=/usr/local/prometheus/prometheus.yml \
--storage.tsdb.path=/usr/local/prometheus/data/ \
--storage.tsdb.retention=15d \
--web.enable-lifecycle  # 启用HTTP API热重载配置(无需重启服务)ExecReload=/bin/kill -HUP $MAINPID  # 重载命令
Restart=on-failure  # 服务故障时自动重启[Install]
WantedBy=multi-user.target  # 多用户模式下生效
EOF
======================================================================================
cat > /usr/lib/systemd/system/prometheus.service <<'EOF'
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io
After=network.target[Service]
Type=simple
ExecStart=/usr/local/prometheus/prometheus \
--config.file=/usr/local/prometheus/prometheus.yml \
--storage.tsdb.path=/usr/local/prometheus/data/ \
--storage.tsdb.retention=15d \
--web.enable-lifecycleExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure[Install]
WantedBy=multi-user.target
EOF

2、启动并设置开机自启:

systemctl daemon-reload  # 重新加载系统服务
systemctl start prometheus  # 启动服务
systemctl enable prometheus  # 开机自启

5.2.3 验证部署

1、检查服务状态与端口(Prometheus默认端口9090):

systemctl status prometheus  # 查看服务是否运行正常
netstat -natp | grep :9090  # 查看9090端口是否监听

在这里插入图片描述

2、浏览器访问验证:

  • 访问Prometheus Web UI:http://<服务器IP>:9090(如http://192.168.10.18:9090);

  • 查看监控目标:点击页面顶部StatusTargets,若prometheus目标状态为UP,说明自身监控正常;
    在这里插入图片描述
    在这里插入图片描述

  • 查看指标数据:访问http://<服务器IP>:9090/metrics,可看到Prometheus采集的自身指标,其中 Help 字段用于解释当前指标的含义,Type 字段用于说明数据的类型(如prometheus_build_infoprometheus_http_requests_total)。
    在这里插入图片描述

5.3 部署Exporter(监控第三方服务)

5.3.1 部署Node-Exporter(监控服务器资源)(所有节点执行

Node-Exporter用于采集服务器的CPU、内存、磁盘、网络等系统级指标,需部署到所有待监控的主机

5.3.1.1 解压与安装

1、上传软件包到/opt目录并解压(软件包可从Node-Exporter官网下载):

cd /opt
# 若未上传,可通过wget下载
# wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
tar xf node_exporter-1.3.1.linux-amd64.tar.gz
# 将二进制文件移动到系统PATH目录,便于直接调用
mv node_exporter-1.3.1.linux-amd64/node_exporter /usr/local/bin
5.3.1.2 配置系统服务

1、创建服务文件:

cat > /usr/lib/systemd/system/node_exporter.service <<'EOF'
[Unit]
Description=node_exporter  # 服务描述
Documentation=https://prometheus.io/  # 官方文档
After=network.target  # 依赖网络服务[Service]
Type=simple
# 启动命令:启用NTP、挂载状态、systemd服务状态、TCP连接状态采集
ExecStart=/usr/local/bin/node_exporter \
--collector.ntp \
--collector.mountstats \
--collector.systemd \
--collector.tcpstatExecReload=/bin/kill -HUP $MAINPID  # 重载命令
Restart=on-failure  # 故障自动重启[Install]
WantedBy=multi-user.target
EOF
======================================================================================
cat > /usr/lib/systemd/system/node_exporter.service <<'EOF'
[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network.target[Service]
Type=simple
ExecStart=/usr/local/bin/node_exporter \
--collector.ntp \
--collector.mountstats \
--collector.systemd \
--collector.tcpstatExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure[Install]
WantedBy=multi-user.target
EOF

2、启动并设置开机自启:

systemctl daemon-reload
systemctl start node_exporter
systemctl enable node_exporter
5.3.1.3 验证与接入Prometheus

1、验证部署:

netstat -natp | grep :9100  # Node-Exporter默认端口9100
# 浏览器访问指标接口:http://<主机IP>:9100/metrics(如http://192.168.10.18:9100/metrics)

在这里插入图片描述

常用的各指标

  • node_cpu_seconds_total
  • node_memory_MemTotal_bytes
  • node_filesystem_size_bytes{mount_point=PATH}
  • node_system_unit_state{name=}
  • node_vmstat_pswpin:系统每秒从磁盘读到内存的字节数
  • node_vmstat_pswpout:系统每秒钟从内存写到磁盘的字节数

更多指标介绍:https://github.com/prometheus/node_exporter

2、在Prometheus Server中添加Node-Exporter监控配置:

cp /usr/local/prometheus/prometheus.yml /usr/local/prometheus/prometheus.yml.bak
vim /usr/local/prometheus/prometheus.yml
# 在尾部增加如下内容(与默认的prometheus job同级)- job_name: "nodes"  # 任务名,用于标识Node-Exporter监控metrics_path: "/metrics"  # 指标采集路径(默认无需修改)static_configs:- targets:  # 待监控的Node-Exporter地址列表(多个主机用逗号分隔)- 192.168.10.18:9100- 192.168.10.21:9100- 192.168.10.22:9100labels:  # 自定义标签,便于后续筛选service: kubernetes
======================================================================================- job_name: nodesmetrics_path: "/metrics"static_configs:- targets:- 192.168.10.18:9100- 192.168.10.21:9100- 192.168.10.22:9100labels:service: kubernetes

3、热重载Prometheus配置(无需重启服务):

curl -X POST http://192.168.10.18:9090/-/reload  # 若失败,可使用systemctl reload prometheus

4、验证监控目标:浏览器访问Prometheus Web UI → StatusTargets,若nodes任务下的目标状态均为UP,说明Node-Exporter监控接入成功。
在这里插入图片描述

5.3.2 部署mysqld-exporter(监控MySQL数据库)

5.3.2.1 在MySQL服务器上操作

1、解压与安装mysqld-exporter:

# 上传 mysqld_exporter-0.14.0.linux-amd64.tar.gz 到 /opt 目录中
cd /opt
# 下载软件包(可从https://github.com/prometheus/mysqld_exporter/releases下载)
# wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz
tar xf mysqld_exporter-0.14.0.linux-amd64.tar.gz
mv mysqld_exporter-0.14.0.linux-amd64/mysqld_exporter /usr/local/bin/

2、配置MySQL授权(mysqld-exporter需读取MySQL状态,需创建专用账号):

# 登录MySQL(替换为你的MySQL密码)
mysql -uroot -p123456
# 授权exporter用户(仅授予必要权限,保证安全)
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost' IDENTIFIED BY 'abc123';
FLUSH PRIVILEGES;  # 刷新权限
exit;

在这里插入图片描述

3、配置MySQL连接信息:

vim /etc/my.cnf  # 编辑MySQL配置文件
# 在[client]节点下添加以下内容(mysqld-exporter通过该配置连接MySQL)
[client]
host=localhost
user=exporter
password=abc123

在这里插入图片描述

4、创建mysqld-exporter系统服务:

cat > /usr/lib/systemd/system/mysqld_exporter.service <<'EOF'
[Unit]
Description=mysqld_exporter
Documentation=https://prometheus.io/
After=network.target[Service]
Type=simple
# 启动命令:指定MySQL配置文件
ExecStart=/usr/local/bin/mysqld_exporter --config.my-cnf=/etc/my.cnf
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure[Install]
WantedBy=multi-user.target
EOF

5、启动服务并验证:

systemctl restart mysqld  # 重启MySQL使配置生效
systemctl start mysqld_exporter
systemctl enable mysqld_exporter
netstat -natp | grep :9104  # mysqld-exporter默认端口9104

在这里插入图片描述
在这里插入图片描述

5.3.2.2 在Prometheus Server上添加MySQL监控配置

1、修改Prometheus配置文件:

vim /usr/local/prometheus/prometheus.yml
# 在尾部增加如下内容- job_name: "mysqld"metrics_path: "/metrics"static_configs:- targets:- 192.168.10.21:9104  # MySQL服务器的mysqld-exporter地址labels:service: mysqld

2、热重载配置并验证:

curl -X POST http://192.168.10.18:9090/-/reload
或者
systemctl reload prometheus
# 浏览器查看Targets,确认mysqld任务目标状态为UP

在这里插入图片描述

5.3.3 部署nginx-exporter(监控Nginx服务)

需先为Nginx安装nginx-module-vts模块(用于采集流量数据),再部署nginx-exporter。

  • 下载 nginx-exporter 地址:https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.10.3/nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
  • 下载 nginx 地址:http://nginx.org/download/
  • 下载 nginx 插件地址:https://github.com/vozlt/nginx-module-vts/tags
5.3.3.1 在Nginx服务器上操作

1、安装依赖与准备软件包:

# 安装Nginx编译依赖
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
# 创建Nginx专用用户(无登录权限)
useradd -M -s /sbin/nologin nginx# 上传或者下载软件包(若未上传,可通过以下命令下载)
cd /opt
# 1. 下载nginx-module-vts模块(https://github.com/vozlt/nginx-module-vts/tags)
wget https://github.com/vozlt/nginx-module-vts/archive/refs/tags/v0.1.18.tar.gz -O nginx-module-vts-0.1.18.tar.gz
# 2. 下载Nginx(http://nginx.org/download/)
wget http://nginx.org/download/nginx-1.18.0.tar.gz
# 3. 下载nginx-exporter(https://github.com/hnlq715/nginx-vts-exporter/releases)
wget https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.10.3/nginx-vts-exporter-0.10.3.linux-amd64.tar.gz

2、解压并编译安装Nginx(启用vts模块):

# 解压nginx-module-vts模块
tar xf nginx-module-vts-0.1.18.tar.gz
mv nginx-module-vts-0.1.18 /usr/local/nginx-module-vts# 解压并编译Nginx
tar xf nginx-1.18.0.tar.gz
cd nginx-1.18.0/
# 配置编译参数(启用vts模块、SSL模块、状态模块)
./configure --prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--add-module=/usr/local/nginx-module-vts  # 启用vts模块# 编译安装
make && make install

3、修改Nginx配置(启用vts监控):

# 修改前备份配置文件
cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak
vim /usr/local/nginx/conf/nginx.conf
# 在http节点下添加以下内容(启用vts全局统计)
http {vhost_traffic_status_zone;  # 启用vts全局共享内存区域vhost_traffic_status_filter_by_host on;  # 按server_name区分统计(多域名场景必备)......  # 保留原有配置# 添加专用监控server(仅允许Prometheus服务器访问)server {vhost_traffic_status off;  # 该server自身不参与流量统计listen 8080;  # 监控端口(自定义,避免与业务端口冲突)allow 127.0.0.1;  # 允许本地访问allow 192.168.10.18;  # 允许Prometheus服务器IP访问(替换为你的Prometheus IP)# Nginx基础状态监控location /nginx-status {stub_status on;access_log off;  # 关闭访问日志,减少磁盘占用}# vts模块统计数据(供nginx-exporter采集)location /status {vhost_traffic_status_display;  # 启用vts数据展示vhost_traffic_status_display_format html;  # 支持HTML格式(便于浏览器查看)}}# 保留原有业务server配置server {listen 80;server_name localhost;......}
}

假如 nginx 没有规范配置 server_name 或者无需进行监控的 server 上,那么建议在此 vhost 上禁用统计监控功能。否则会出现 127.0.0.1、hostname 等的域名监控信息。

4、配置Nginx系统服务并启动:

# 创建Nginx服务文件
cat > /lib/systemd/system/nginx.service <<'EOF'
[Unit]
Description=nginx
After=network.target[Service]
Type=forking  # Nginx为多进程模式,需指定Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid  # 指定PID文件路径
ExecStart=/usr/local/nginx/sbin/nginx  # 启动命令
ExecReload=/bin/kill -s HUP $MAINPID  # 重载配置(平滑重启)
ExecStop=/bin/kill -s QUIT $MAINPID  # 停止命令
PrivateTmp=true  # 启用私有临时目录,增强安全性[Install]
WantedBy=multi-user.target
EOF
======================================================================================
cat > /lib/systemd/system/nginx.service <<'EOF'
[Unit]
Description=nginx
After=network.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target
EOF
# 验证配置并启动
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/  # 添加环境变量,便于直接调用nginx命令
nginx -t  # 验证Nginx配置是否正确(显示ok与successful即为正常)
systemctl start nginx
systemctl enable nginx# 浏览器访问:http://192.168.10.22:8080/status,可以看到 Nginx Vhost Traffic Status 的页面信息

在这里插入图片描述
在这里插入图片描述

5、部署并启动nginx-exporter:

# 解压nginx-exporter
cd /opt
tar -zxvf nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
mv nginx-vts-exporter-0.10.3.linux-amd64/nginx-vts-exporter /usr/local/bin/# 创建nginx-exporter服务文件
cat > /usr/lib/systemd/system/nginx-exporter.service <<'EOF'
[Unit]
Description=nginx-exporter
Documentation=https://prometheus.io/
After=network.target[Service]
Type=simple
# 启动命令:指定Nginx的vts数据接口地址
ExecStart=/usr/local/bin/nginx-vts-exporter -nginx.scrape_uri=http://localhost:8080/status/format/json
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure[Install]
WantedBy=multi-user.target
EOF# 启动服务并验证
systemctl start nginx-exporter
systemctl enable nginx-exporter
netstat -natp | grep :9913  # nginx-exporter默认端口9913

在这里插入图片描述

5.3.3.2 在Prometheus Server上添加Nginx监控配置

1、修改Prometheus配置文件:

vim /usr/local/prometheus/prometheus.yml
# 在尾部增加如下内容- job_name: "nginx"metrics_path: "/metrics"static_configs:- targets:- 192.168.10.22:9913  # Nginx服务器的nginx-exporter地址labels:service: nginx

2、热重载配置并验证:

curl -X POST http://192.168.10.18:9090/-/reload
# 浏览器查看Targets,确认nginx任务目标状态为UP

在这里插入图片描述

5.4 部署Grafana实现监控可视化

Grafana下载地址

  • https://grafana.com/grafana/download
  • https://mirrors.bfsu.edu.cn/grafana/yum/rpm/

5.4.1 安装与启动Grafana(本文安装在监控中枢节点)

1、安装Grafana(以CentOS 7为例,使用yum安装):

# 配置Grafana yum源(若未配置)
cat > /etc/yum.repos.d/grafana.repo <<'EOF'
[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
EOF# 安装Grafana 7.4.0(本文使用稳定版)
yum install -y grafana-7.4.0-1.x86_64.rpm

2、启动并设置开机自启:

systemctl start grafana-server
systemctl enable grafana-server
netstat -natp | grep :3000  # Grafana默认端口3000

在这里插入图片描述

5.4.2 配置Prometheus数据源

1、浏览器访问Grafana:http://<Grafana服务器IP>:3000(本文Grafana与Prometheus部署在同一台主机,地址为http://192.168.10.18:3000);
在这里插入图片描述

2、首次登录:默认账号/密码为admin/admin,登录后需修改初始密码;
在这里插入图片描述

3、添加Prometheus数据源:

  • 点击左侧菜单栏ConfigurationData SourcesAdd data source
    在这里插入图片描述

  • 在数据源列表中选择Prometheus
    在这里插入图片描述

  • HTTPURL中输入Prometheus Server地址(如http://192.168.10.18:9090);
    在这里插入图片描述

  • 其他配置保持默认,点击底部Save & Test,若显示Data source is working,说明数据源配置成功。
    在这里插入图片描述
    在这里插入图片描述

4、点击 上方菜单 Dashboards,Import 所有默认模板,Dashboards -> Manage ,选择 Prometheus 2.0 StatsPrometheus Stats 即可看到 Prometheus job 实例的监控图像
在这里插入图片描述
在这里插入图片描述

5.4.3 导入监控仪表盘

Grafana官方提供了大量现成的仪表盘模板(官方模板库),可直接导入使用:
1、导入Node-Exporter仪表盘(监控服务器资源):

  • 访问官方模板库,搜索Node Exporter,选择下载量较高的模板(如模板ID:8171,Kubernetes Nodes);
    在这里插入图片描述
    在这里插入图片描述

  • 在Grafana页面点击左侧+ CreateImport

  • 输入模板ID(如8171),点击Load

  • 选择已配置的Prometheus数据源,点击Import

  • 导入成功后,即可看到服务器的CPU、内存、磁盘、网络等指标的可视化图表。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2、导入MySQL/Nginx仪表盘:

  • MySQL模板:搜索MySQL,推荐模板ID:7362(MySQL Overview);
    在这里插入图片描述

  • Nginx模板:搜索Nginx VTS,推荐模板ID:2949(Nginx VTS Stats);
    在这里插入图片描述

  • 导入步骤与Node-Exporter一致,导入后即可查看对应服务的监控仪表盘。

5.5 部署Prometheus服务发现

静态配置适用于监控目标固定的场景,若监控目标动态变化(如K8s集群中的Pod),需通过服务发现机制实现动态管理。

5.5.1 基于文件的服务发现

基于文件的服务发现是最简单的动态发现方式,通过定期读取YAML/JSON文件获取目标列表,适用于小规模集群。

1、在Prometheus Server上创建服务发现配置目录与文件:

cd /usr/local/prometheus
mkdir targets  # 创建目标配置目录# 创建Node-Exporter的目标配置文件
vim targets/node-exporter.yaml
- targets:- 192.168.10.18:9100- 192.168.10.21:9100labels:app: node-exporterjob: node# 创建mysqld-exporter的目标配置文件
vim targets/mysqld-exporter.yaml
- targets:- 192.168.10.21:9104- 192.168.10.17:9104  # 新增的MySQL服务器labels:app: mysqld-exporterjob: mysqld

2、修改Prometheus配置文件,启用文件服务发现:

vim /usr/local/prometheus/prometheus.yml
# 修改原有的nodes和mysqld job配置,替换为文件发现
scrape_configs:# 原prometheus job保留- job_name: "prometheus"metrics_path: '/metrics'static_configs:- targets: ["localhost:9090"]
======================================================================================# Node-Exporter文件服务发现- job_name: "nodes"file_sd_configs:  # 指定使用文件服务发现- files:  # 配置文件路径(支持通配符)- targets/node*.yamlrefresh_interval: 2m  # 每2分钟重新读取文件(默认5分钟)# mysqld-exporter文件服务发现- job_name: "mysqld"file_sd_configs:- files:- targets/mysqld*.yamlrefresh_interval: 2m
======================================================================================- job_name: "nodes"file_sd_configs:- files:- targets/node*.yamlrefresh_interval: 2m- job_name: "mysqld"file_sd_configs:- files:- targets/mysqld*.yamlrefresh_interval: 2m

3、热重载配置并验证:

curl -X POST http://192.168.10.18:9090/-/reload
或者
systemctl reload prometheus
# 浏览器查看 Prometheus 页面的 Status -> Targets

在这里插入图片描述
在这里插入图片描述

后续新增监控目标时,只需修改targets目录下的YAML文件,无需修改Prometheus主配置

5.5.2 基于Consul的服务发现

Consul是一款开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现配置管理的功能。支持健康检查、多数据中心等功能,适用于中大规模集群。

Consul下载地址:https://www.consul.io/downloads/

5.5.2.1 部署Consul服务

1、在Consul服务器(本文与Prometheus同机)上安装Consul:

cd /opt
# 下载Consul(https://www.consul.io/downloads)
wget https://releases.hashicorp.com/consul/1.9.2/consul_1.9.2_linux_amd64.zip
unzip consul_1.9.2_linux_amd64.zip
mv consul /usr/local/bin/

2、创建Consul数据目录与配置目录:

mkdir /var/lib/consul-data  # 数据存储目录
mkdir /etc/consul/  # 配置文件目录

3、使用 server 模式启动 Consul 服务:

consul agent \
-server \
-bootstrap \  # 表示自身为leader
-ui \  # 启用Web UI(默认端口8500)
-data-dir=/var/lib/consul-data \
-config-dir=/etc/consul/ \
-bind=192.168.10.18 \  # 绑定Consul服务IP(需与Prometheus通信)
-client=0.0.0.0 \  # 允许所有IP访问Consul
-node=consul-server01 &> /var/log/consul.log &  # 后台运行并输出日志
======================================================================================
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-config-dir=/etc/consul/ \
-bind=192.168.10.18 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &

4、验证Consul部署:

consul members  # 查看Consul集群成员
# 浏览器访问Consul Web UI:http://192.168.10.18:8500

在这里插入图片描述

5.5.2.2 在Consul中注册监控服务

1、创建服务注册配置文件(以Node-Exporter为例):

vim /etc/consul/nodes.json
{"services": [{"id": "node_exporter-node01",  # 服务唯一ID(不可重复)"name": "node01",  # 服务名"address": "192.168.10.18",  # 监控目标IP(Node-Exporter所在主机)"port": 9100,  # 监控目标端口"tags": ["nodes"],  # 标签(用于Prometheus筛选)"checks": [  # 健康检查(Consul定期探测,失败则标记服务不健康){"http": "http://192.168.10.18:9100/metrics","interval": "5s"  # 每5秒检查一次}]},{"id": "node_exporter-node02","name": "node02","address": "192.168.10.21","port": 9100,"tags": ["nodes"],"checks": [{"http": "http://192.168.10.21:9100/metrics","interval": "5s"}]}]
}
======================================================================================
{"services": [{"id": "node_exporter-node01","name": "node01","address": "192.168.10.18","port": 9100,"tags": ["nodes"],"checks": [{"http": "http://192.168.10.18:9100/metrics","interval": "5s"}]},{"id": "node_exporter-node02","name": "node02","address": "192.168.10.21","port": 9100,"tags": ["nodes"],"checks": [{"http": "http://192.168.10.21:9100/metrics","interval": "5s"}]}]
}

2、重新加载Consul配置(注册服务):

consul reload  # 无需重启Consul,直接重载配置
# 浏览器访问http://192.168.10.18:8500 Consul UI → Services,可看到注册的node01、node02服务

在这里插入图片描述

5.5.2.3 配置Prometheus对接Consul

1、修改Prometheus配置文件:

vim /usr/local/prometheus/prometheus.yml
# 在scrape_configs节点下添加以下内容(替换原有的nodes job文件发现配置)- job_name: "nodes"consul_sd_configs:  # 指定使用Consul服务发现- server: 192.168.10.18:8500  # Consul服务地址tags: ["nodes"]  # 仅发现带有nodes标签的服务refresh_interval: 2m  # 每2分钟从Consul获取一次目标列表
======================================================================================- job_name: "nodes"consul_sd_configs:- server: 192.168.10.18:8500tags: ["nodes"]refresh_interval: 2m

2、热重载配置并验证:

curl -X POST http://192.168.10.18:9090/-/reload
# 浏览器查看Prometheus Targets,确认从Consul发现的目标状态为UP

在这里插入图片描述
3、Consul服务管理(可选):

# 注销服务(如注销node02)
consul services deregister -id="node_exporter-node02"

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# 重新注册服务
consul services register /etc/consul/nodes.json

在这里插入图片描述
在这里插入图片描述

5.5.3 基于Kubernetes API的服务发现

适用于Kubernetes集群环境,Prometheus可直接对接K8s API Server,动态发现Node、Pod、Service等资源对象。

5.5.3.1 核心配置参数

Prometheus通过kubernetes_sd_configs配置对接K8s,核心参数如下:

  • api_server:K8s API Server地址(若Prometheus部署在K8s集群内,可省略,自动发现);
  • role:发现的资源类型,可选值:
    • node:发现K8s集群中的Node节点;
    • pod:发现K8s集群中的Pod;
    • service:发现K8s集群中的Service;
    • endpoints:发现K8s集群中的Endpoints;
    • ingress:发现K8s集群中的Ingress;
  • tls_config:TLS认证配置(对接K8s API Server需认证,通常使用集群内的CA证书);
  • namespaces:指定发现的命名空间(默认所有命名空间)。
5.5.3.2 示例配置(发现K8s Node节点)
scrape_configs:- job_name: "k8s-nodes"kubernetes_sd_configs:- api_server: https://192.168.10.100:6443  # K8s API Server地址role: node  # 发现Node资源tls_config:ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt  # 集群内CA证书路径bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token  # 集群内认证Token路径refresh_interval: 1m# 指标采集路径(K8s Node节点的指标通常由kubelet暴露在10250端口)metrics_path: /metrics/cadvisor

注:实际部署时,建议通过K8s的ConfigMap管理Prometheus配置,并使用ServiceAccount为Prometheus授权访问K8s API。

总结

本文从Prometheus的理论基础出发,详细讲解了其核心组件、工作原理与局限性,并通过完整的实战步骤,完成了Prometheus Server、Node-Exporter、mysqld-exporter、nginx-exporter及Grafana的部署与配置,同时覆盖了文件、Consul两种主流服务发现方式。

通过本文的操作,你已掌握了企业级监控系统的核心搭建能力:
1、可监控服务器、MySQL、Nginx等核心资源与服务;
2、能通过Grafana实现监控数据的可视化,快速识别指标异常;
3、可根据集群规模选择静态配置或动态服务发现,适配不同场景。

后续可进一步探索的方向:

  • 配置Alertmanager实现告警分发(如钉钉、企业微信告警);
  • 对接Thanos实现Prometheus高可用与长期数据存储;
  • 自定义PromQL查询与监控仪表盘,满足业务个性化需求。

希望本文能为你的监控体系搭建提供实用参考,如有问题或优化建议,欢迎在评论区交流!

附录:常用资源链接

  • Prometheus官网:https://prometheus.io
  • Prometheus GitHub:https://github.com/prometheus
  • Grafana官网:https://grafana.com
  • Grafana仪表盘模板库:https://grafana.com/grafana/dashboards
  • Consul官网:https://www.consul.io
http://www.dtcms.com/a/516292.html

相关文章:

  • 使用宝塔面板docker部署https://github.com/imsyy/DailyHotApi项目
  • RHCE作业2
  • 乐云网站建设网站源码分享网
  • 发展历程 网站建设专业提供网站建设服务是什么
  • Katalon Studio AI生成API测试
  • ip生产区
  • 做网站需要了解哪些知识wordpress文章增加字段
  • 要制作一个自己的网站wordpress实时推送 php
  • AWS DMS 任务优化实战:解决 Aurora MySQL 到 Redshift 的数据一致性与性能问题
  • 电感、电容与电抗的标幺值关系详解
  • JMeter测试关系数据库: JDBC Request
  • 珠海英语翻译 欧得宝:专业译员实测 2025年
  • 硬件内部优先级
  • 高端网站建设公司哪里济南兴田德润实惠吗网架加工厂的地址
  • 美妆网站建设制作公司网站结构图
  • 【2025最新】APP开启了SSL无法被抓包,如何进行调试
  • c++算法题目总结
  • 开源安全管理平台wazuh-检测 SQL 注入攻击
  • 试用网站 建站网站建设 徐州
  • 如何屏蔽GORM个别sql的日志
  • [C++]软件接口函数测试
  • 基于 Apache POI 5.2.5 构建高效 Excel 工具类:从零到生产级实践
  • 直接插入排序详解
  • 网站界面切片做程序宁波免费建站seo排名
  • Leetcode 33
  • 济南制作网站制作公司策划采购网有哪些平台
  • conda 换盘符
  • 统一身份认证、权限管理系统设计
  • 福州整站优化网站在线设计
  • 网站如何加入百度网盟重庆市住房和城乡建设厅官方网站