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

Prometheus监控系统

文章目录

  • Prometheus 监控系统详解与实战部署
    • 一、Prometheus 概述
    • 二、TSDB:为监控场景量身定制的存储引擎
    • 三、Prometheus 核心特点
    • 四、Prometheus 生态组件
      • 常用 Exporters 介绍
    • 五、Prometheus 工作机制
      • 工作模式
      • 工作流程
    • 六、Prometheus 局限性
    • 七、实战部署:从 0 到 1 搭建 Prometheus 监控系统
      • 1. 部署 Prometheus Server
        • 步骤1:安装与配置
        • 步骤2:配置启动服务
        • 步骤3:启动并验证
      • 2. 部署 Exporters 监控各类目标
        • (1)Node Exporter:监控服务器指标
          • 安装与配置
          • 接入 Prometheus
        • (2)mysqld-exporter:监控 MySQL
          • 安装与配置
          • 接入 Prometheus
      • 3. 部署 Grafana 实现可视化
        • 步骤1:安装与启动
        • 步骤2:配置数据源
        • 步骤3:导入监控面板
      • 4. 服务发现配置
        • (1)基于文件的服务发现
        • (2)基于 Consul 的服务发现
    • 八、总结

Prometheus 监控系统详解与实战部署

一、Prometheus 概述

Prometheus 是一款开源的服务监控系统与时序数据库,以其灵活的数据模型、高效的采集机制和强大的查询能力被广泛应用于云原生、微服务等场景。其核心功能是通过周期性拉取(Pull)方式采集监控数据,存储于内置的时序数据库(TSDB)中,并支持基于规则的告警和丰富的可视化展示。

二、TSDB:为监控场景量身定制的存储引擎

Prometheus 采用 TSDB 作为存储引擎,完美适配监控数据的特性:

  • 高写入量:监控数据几乎是持续的顺序写入;
  • 低更新需求:数据采集后极少更新,几秒到几分钟内完成写入;
  • 区块删除为主:通常按时间范围批量删除历史数据,而非随机删除;
  • 大存储量:数据量常超过内存,缓存作用有限;
  • 顺序读写:读操作多为按时间升序/降序的连续查询,且并发读频繁。

三、Prometheus 核心特点

  1. 多维数据模型:通过“度量名称+键值对”标识时间序列数据,支持灵活的维度分析;
  2. 内置 TSDB:默认存储15天数据,也可对接 InfluxDB、OpenTSDB 等远端存储;
  3. PromQL 查询语言:专为时序数据设计,支持复杂的聚合、过滤和计算;
  4. Pull 采集模式:基于 HTTP 协议主动拉取目标数据,也可通过 Pushgateway 支持 Push 模式;
  5. 动态服务发现:支持静态配置、文件、DNS、Kubernetes 等多种服务发现机制;
  6. 丰富的生态集成:可作为数据源接入 Grafana 实现可视化。

四、Prometheus 生态组件

Prometheus 核心功能由多个组件协同完成,部分组件为可选:

组件功能说明
Prometheus Server核心组件,负责数据采集(Retrieval)、存储(Storage)和查询(PromQL),并基于规则生成告警
Client Library客户端库,用于应用程序内置监控指标采集能力
Exporters指标暴露器,为不支持内置监控的应用提供数据采集接口(如 Node-Exporter 监控服务器,mysqld-exporter 监控 MySQL)
Service Discovery服务发现,动态识别待监控目标(支持文件、K8s 等多种机制)
Alertmanager告警管理,接收 Prometheus 告警并进行去重、分组、路由(如邮件、钉钉通知)
Pushgateway数据中转站,接收短期任务的 Push 数据,供 Prometheus 拉取
Grafana可视化工具,对接 Prometheus 数据源生成监控面板

常用 Exporters 介绍

  • Node-Exporter:采集服务器 CPU、内存、磁盘、网络等物理指标;
  • mysqld-exporter/nginx-exporter:分别监控 MySQL 数据库和 Nginx 服务;
  • Kube-State-Metrics:采集 Kubernetes 资源(Pod、Deployment 等)的状态指标;
  • cAdvisor:监控容器的 CPU、内存、网络等资源使用情况;
  • blackbox-exporter:监控业务容器的存活性。

五、Prometheus 工作机制

工作模式

  1. Prometheus Server 通过服务发现或静态配置获取监控目标(Target);
  2. 从目标的 Exporter 接口拉取指标数据,或通过 Pushgateway 拉取短期任务数据;
  3. 数据存储于 TSDB,支持通过 PromQL 查询;
  4. 基于告警规则生成告警,发送至 Alertmanager 处理;
  5. Grafana 对接 Prometheus 实现数据可视化。

工作流程

  1. 数据采集:Prometheus 以 Pull 方式从目标拉取数据,或通过 Pushgateway 接收 Push 数据;
  2. 数据存储:采集的时序数据写入本地 TSDB;
  3. 告警生成:基于配置的告警规则,触发告警并发送至 Alertmanager;
  4. 告警分发:Alertmanager 将告警路由到邮件、钉钉等接收方;
  5. 数据查询与展示:通过 Prometheus Web UI(PromQL)或 Grafana 查看监控数据。

六、Prometheus 局限性

  • 非全量监控:专注于指标监控,不适合存储事件或日志,更侧重趋势分析而非精准数据;
  • 本地存储有限:默认仅保存15天数据,长期存储需依赖远端存储(如 InfluxDB);
  • 集群成熟度低:原生集群机制较弱,需通过 Thanos 或 Cortex 实现高可用与联邦集群。

七、实战部署:从 0 到 1 搭建 Prometheus 监控系统

1. 部署 Prometheus Server

步骤1:安装与配置
# 关闭防火墙与SELinux
systemctl stop firewalld
setenforce 0# 解压安装包
cd /opt
tar xf prometheus-2.35.0.linux-amd64.tar.gz
mv prometheus-2.35.0.linux-amd64 /usr/local/prometheus
步骤2:配置启动服务

创建系统服务文件:

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
步骤3:启动并验证
systemctl start prometheus
systemctl enable prometheus# 验证端口(默认9090)
netstat -natp | grep :9090

访问 Web UI:http://IP:9090,通过 Status -> Targets 查看监控目标状态。

2. 部署 Exporters 监控各类目标

(1)Node Exporter:监控服务器指标
安装与配置
# 解压并部署二进制文件
cd /opt
tar xf node_exporter-1.3.1.linux-amd64.tar.gz
mv node_exporter-1.3.1.linux-amd64/node_exporter /usr/local/bin# 创建系统服务
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# 启动服务
systemctl start node_exporter
systemctl enable node_exporter
接入 Prometheus

修改 Prometheus 配置文件 prometheus.yml,添加监控目标:

scrape_configs:- job_name: nodesmetrics_path: "/metrics"static_configs:- targets:- 192.168.10.80:9100  # 替换为实际节点IP- 192.168.10.13:9100labels:service: kubernetes

重载配置:

curl -X POST http://192.168.10.80:9090/-/reload
(2)mysqld-exporter:监控 MySQL
安装与配置
# 部署二进制文件
cd /opt
tar xf mysqld_exporter-0.14.0.linux-amd64.tar.gz
mv mysqld_exporter-0.14.0.linux-amd64/mysqld_exporter /usr/local/bin/# 配置 MySQL 权限(在MySQL服务器执行)
mysql -uroot -p
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost' IDENTIFIED BY 'abc123';
flush privileges;# 修改 MySQL 配置文件
vim /etc/my.cnf
[client]
host=localhost
user=exporter
password=abc123# 创建系统服务
cat > /usr/lib/systemd/system/mysqld_exporter.service <<'EOF'
[Unit]
Description=mysqld_exporter
Documentation=https://prometheus.io/
After=network.target[Service]
Type=simple
ExecStart=/usr/local/bin/mysqld_exporter --config.my-cnf=/etc/my.cnfExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure[Install]
WantedBy=multi-user.target
EOF# 启动服务
systemctl start mysqld_exporter
systemctl enable mysqld_exporter
接入 Prometheus

修改 prometheus.yml 添加 MySQL 监控:

scrape_configs:- job_name: mysqldmetrics_path: "/metrics"static_configs:- targets:- 192.168.10.14:9104  # MySQL服务器IP:端口labels:service: mysqld

重载配置生效。

3. 部署 Grafana 实现可视化

步骤1:安装与启动
# 安装Grafana(以7.4.0为例)
yum install -y grafana-7.4.0-1.x86_64.rpm# 启动服务
systemctl start grafana-server
systemctl enable grafana-server# 验证端口(默认3000)
netstat -natp | grep :3000
步骤2:配置数据源
  1. 访问 Grafana 界面:http://IP:3000,默认账号密码 admin/admin
  2. 进入 Configuration -> Data Sources -> Add data source,选择 Prometheus;
  3. 填写 Prometheus 地址(如 http://192.168.10.80:9090),点击 Save & Test
步骤3:导入监控面板
  1. 访问 Grafana 面板库,搜索适合的面板(如 Node Exporter 面板 ID:1860);
  2. 在 Grafana 中点击 + Create -> Import,输入面板 ID 并加载,即可查看可视化监控数据。

4. 服务发现配置

Prometheus 支持动态发现监控目标,避免静态配置的繁琐,常用方式如下:

(1)基于文件的服务发现

通过 YAML/JSON 文件定义目标,Prometheus 定期加载:

# 创建目标配置文件目录
mkdir /usr/local/prometheus/targets# 定义节点监控目标
vim targets/node-exporter.yaml
- targets:- 192.168.10.80:9100- 192.168.10.14:9100labels:app: node-exporterjob: node

修改 Prometheus 配置:

scrape_configs:- job_name: nodesfile_sd_configs:- files:- targets/node*.yaml  # 支持通配符refresh_interval: 2m  # 每2分钟刷新
(2)基于 Consul 的服务发现

Consul 提供服务注册与健康检查,Prometheus 可通过 Consul 动态发现目标:

  1. 部署 Consul 并启动服务;
  2. 在 Consul 中注册监控目标(如 Node Exporter);
  3. 配置 Prometheus 对接 Consul:
scrape_configs:- job_name: nodesconsul_sd_configs:- server: 192.168.10.80:8500  # Consul地址tags: ["nodes"]  # 过滤标签refresh_interval: 2m

八、总结

Prometheus 凭借其灵活的采集机制、强大的查询能力和丰富的生态,成为云原生监控的首选方案。通过本文的部署实践,可快速搭建一套涵盖服务器、数据库、中间件的全方位监控系统。结合 Grafana 的可视化和 Alertmanager 的告警能力,能有效提升系统的可观测性,及时发现并解决问题。

如需进一步扩展,可探索 Kubernetes 服务发现、远端存储集成或 Prometheus 联邦集群等高级特性。

官网地址:https://prometheus.io
GitHub 地址:https://github.com/prometheus

http://www.dtcms.com/a/511454.html

相关文章:

  • 【Java-集合】Set接口
  • 安卓开发- Log日志工具类
  • 微信链接的微网站怎么做的wordpress注册邮件设置密码
  • 国学大师网站谁做的wordpress dante
  • asp.net网站开发 vs2017手机网站分页
  • 传统决策vs AI决策:效率之争的底层逻辑与正确选择
  • SecurityContext在分布式系统(如微服务)中如何传递?有哪些常见方案?
  • MinIO与HDFS对比测试
  • SAP SD销售订单创建接口分享
  • rabbitMQ 的安装和使用
  • 华为Java专业级科目一通过心得
  • [Android] AutoCMD+ v.1.3.5:安卓自动化工具
  • 从养殖场到实验室:小吉快检BL-08plus如何实现禽病检测效率提升300%?——真实案例深度解析
  • 衡阳手机网站建设外发加工费计入什么科目
  • 【JUnit实战3_06】第三章:JUnit 的体系结构(下)
  • 使用injected Provider在remix中调试合约的坑 -- 时间(或者最新块)更新不及时
  • 丽水市莲都建设分局网站湖南微网站开发
  • 笔试-最小组合数
  • Web UI自动化时,通过autoIT的解决window控件
  • 电商网站建设建议网站前端交互功能案例分析
  • Qt——窗口
  • [人工智能-大模型-20]:对比 Copilot 与国产替代方案(如通义灵码、百度Comate)
  • c语言和网站建设的关系平台网站开发可行性分析
  • gcc编译的过程及每个过程的作用
  • ROS2[Humble] -- URDF Tutorial- 02-multipleshapes
  • C#实现二维码和条形码生成与打印
  • C#WPF如何跳转页面
  • 【高并发服务器】八、Poller描述符监控类实现
  • 用vs2013网站开发四川最好的网络优化公司
  • 如何开发一个 IDEA 插件通过 Ollama 调用大模型为方法生成仙侠风格的注释