Prometheus 监控平台详解与部署

一、Prometheus 基本介绍

Prometheus 是一套由 Go 语言开发的开源监控、报警与时间序列数据库组合,随着 Kubernetes 的流行而广泛应用。它能监控主机、服务、容器等多种对象,支持多种 exporter 采集数据,也可通过 pushgateway 进行数据上报,性能足以支撑上万万台规模集群的监控需求。

时间序列数据与优势

时间序列数据是按时间顺序记录系统、设备状态变化的数据,应用场景广泛,如系统日志、无人驾驶车辆运行数据、证券交易数据、运维监控数据等。

时间序列数据库主要优点:

  • 性能优异:相比关系型数据库和普通 NOSQL,在处理大规模数据时 I/O 性能更出色
  • 存储成本低:采用 metrics:key=value 的数据存储方式和高效压缩算法,平均每条数据仅占用约 3.5 字节存储空间

Prometheus 主要特征

  1. 多维度数据模型,支持多维度建模和查询
  2. 灵活的 PromQL 查询语言,提供 HTTP 查询接口,便于与 Grafana 等工具结合
  3. 不依赖分布式存储,支持单节点本地存储,也可对接第三方时序数据库
  4. 默认通过 HTTP 的 pull 模型拉取数据,也可通过中间网关支持 push 模型
  5. 支持服务发现或静态配置发现目标服务
  6. 支持多种图表和界面展示,可集成第三方工具

监控原理

  1. Prometheus Server 定时从目标对象抓取 metrics 数据
  2. 每个被监控目标需暴露 HTTP 服务接口供 Prometheus 抓取

Pull 方式优势:能自动进行上游监控和水平监控,配置少、易扩展、灵活性高、易实现高可用,可降低耦合,避免推送模式中可能出现的监控系统过载问题。

配置文件解析

Prometheus 配置文件包含六个主要配置段:

  • scrape_configs:采集配置段
  • rule_files:告警、预聚合配置文件段
  • remote_read:远程查询段
  • remote_write:远程写入段
  • alerting:Alertmanager 信息段
  • global:全局配置段

各配置段组合可实现不同功能,如采集 + 传输、查询器、采集 + 告警触发等。

二、Prometheus 监控平台部署

部署方式选择

物理主机部署

需下载相关程序包:

bash

运行

复制代码
# Prometheus主程序包
wget https://github.com/prometheus/prometheus/releases/tag/v3.0.0/prometheus-3.0.0.linux-amd64.tar.gz

# 远端主机监控插件
wget https://github.com/prometheus/node_exporter/releases/tag/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz

# 告警插件
wget https://github.com/prometheus/alertmanager/releases/tag/v0.27.0/alertmanager-0.27.0.linux-amd64.tar.gz

# MySQL业务监控插件
wget https://github.com/prometheus/mysqld_exporter/releases/tag/v0.16.0/mysqld_exporter-0.16.0.linux-amd64.tar.gz

# 其他监控插件(haproxy、nginx等)
wget https://github.com/prometheus/haproxy_exporter/releases/tag/v0.15.0/haproxy_exporter-0.15.0.linux-amd64.tar.gz
wget https://github.com/nginxinc/nginx-prometheus-exporter/releases/tag/v1.3.0/nginx-prometheus-exporter_1.3.0_linux_amd64.tar.gz
容器部署

bash

运行

复制代码
docker run --name prometheus -d -p 127.0.0.1:9090:9090 prom/prometheus

具体部署步骤

1. 部署 Prometheus 服务监控端

bash

运行

复制代码
[root@prometheus ~]# tar xf prometheus-3.0.0.linux-amd64.tar.gz -C /home/
[root@prometheus ~]# cd /home/prometheus-3.0.0.linux-amd64/
[root@prometheus prometheus-3.0.0.linux-amd64]# nohup ./prometheus --config.file=prometheus.yml &
# 验证启动
[root@prometheus prometheus-3.0.0.linux-amd64]# netstat -anptu | grep prometheus

启动成功后,可通过http://IP:9090访问 Web 界面,通过http://IP:9090/metrics查看监控数据。

2. 监控远端业务机器

安装监控客户端:

bash

运行

复制代码
[root@server ~]# tar xf node_exporter-1.8.2.linux-amd64.tar.gz -C /home/
[root@server ~]# cd /home/node_exporter-1.8.2.linux-amd64/
[root@server node_exporter-1.8.2.linux-amd64]# nohup /home/node_exporter-1.8.2.linux-amd64/node_exporter &
# 验证
[root@server node_exporter-1.8.2.linux-amd64]# netstat -anptu | grep node

在 Prometheus 添加监控信息:

yaml

复制代码
# 编辑prometheus.yml
  - job_name: 'server'	  # 定义名称
    static_configs:       # 定义具体配置
    - targets: ['192.168.166.13:9100']   # 定义目标

重启 Prometheus 服务后,在 Web 界面的 Status-Targets 页面可查看被监控机状态。

3. 监控 MySQL 服务

部署 MySQL 并创建监控用户:

bash

运行

复制代码
[root@server ~]# dnf -y install mysql-server 
[root@server ~]# systemctl enable --now mysqld

# 创建监控用户
mysql> create user 'hello'@'localhost' identified by '123456';
mysql> grant select,replication client,process on *.* to 'hello'@'localhost';
mysql> flush privileges;

部署监控插件:

bash

运行

复制代码
[root@server ~]# tar xf mysqld_exporter-0.16.0.linux-amd64.tar.gz -C /usr/local
[root@server ~]# vim /home/mysqld_exporter-0.16.0.linux-amd64/.my.cnf
[client]
user=hello
password=123456

# 启动
[root@server ~]# nohup /home/mysqld_exporter-0.16.0.linux-amd64/mysqld_exporter --config.my-cnf=/home/mysqld_exporter-0.16.0.linux-amd64/.my.cnf &

在 Prometheus 配置文件中添加监控:

yaml

复制代码
  - job_name: 'mysql'
    static_configs:
    - targets: ['192.168.166.13:9104']

重启 Prometheus 后即可在 Web 界面查看 MySQL 监控状态。

三、Prometheus 与 Grafana 集成

Grafana 是一款功能强大的操作性仪表板,可将多个数据源的数据集成到统一界面,支持丰富的可视化选项和灵活的告警功能。

部署 Grafana

物理主机部署

bash

运行

复制代码
# yum安装
sudo yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-11.3.1-1.x86_64.rpm

# 服务启动
[root@grafana ~]# systemctl enable grafana-server
[root@grafana ~]# systemctl start grafana-server

# 验证启动
[root@grafana ~]# lsof -i :3000

启动成功后,通过http://IP:3000访问,默认账号密码为 admin/admin。

Grafana 配置

设置数据源
  1. 登录后点击 "Add data source"
  2. 选择 Prometheus
  3. 配置 Prometheus 地址
  4. 点击 "Save & Test" 完成配置
绘制图形
  1. 添加仪表板
  2. 选择 "添加可视化"
  3. 配置查询指标
  4. 设置图表样式
导入模板

可从https://github.com/percona/grafana-dashboards下载 MySQL 监控模板,通过 Web 界面导入使用。

配置告警

修改 Grafana 配置文件设置 SMTP:

ini

复制代码
[smtp]
enabled = true
host = "smtp.163.com:25"
user = "your-email@163.com"
password = "your-password"
from_address = "your-email@163.com"
from_name = Grafana

重启 Grafana 后,在图形设置中配置告警规则和通知方式。

四、配置 Alertmanager 告警

部署 Alertmanager

bash

运行

复制代码
[root@grafana ~]# tar xf alertmanager-0.27.0.linux-amd64.tar.gz -C /usr/local

配置 Alertmanager

yaml

复制代码
global:
  smtp_smarthost: 'smtp.163.com:25'
  smtp_from: 'your-email@163.com'
  smtp_auth_username: 'your-email@163.com'
  smtp_auth_password: 'your-password'
  smtp_require_tls: false
route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 1h
  receiver: 'default'
receivers:
  - name: 'default'
    email_configs:
    - to: 'recipient@qq.com'
      send_resolved: true
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

启动服务:

bash

运行

复制代码
[root@grafana alertmanager-0.27.0.linux-amd64]# nohup ./alertmanager --web.listen-address=:9093 --config.file=/home/alertmanager-0.27.0.linux-amd64/alertmanager.yml &

关联 Prometheus 与 Alertmanager

修改 Prometheus 配置文件:

yaml

复制代码
alerting:
  alertmanagers:
    - static_configs:
        - targets:
           - 192.168.166.9:9093

rule_files:
  - "/etc/prometheus/rules/*.yml"

定义告警规则

创建/etc/prometheus/rules目录,添加告警规则文件,例如 CPU 使用率过高告警:

yaml

复制代码
groups:
- name: cpu-alerts
  rules:
  - alert: HighCPUUsage
    expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "High CPU Usage on {{ $labels.instance }}"
      description: "CPU usage has been above 80% for the last 2 minutes on instance {{ $labels.instance }}."

通过以上步骤,可构建一个功能完善的 Prometheus 监控平台,实现对主机、服务的全面监控、可视化展示和告警通知。

相关推荐
我爱学习好爱好爱12 小时前
Prometheus监控栈 监控Springboot2+Vue3+redis项目
数据库·redis·prometheus
一枚正在学习的小白1 天前
prometheus监控对外服务
运维·prometheus
我爱学习好爱好爱3 天前
Prometheus监控栈 监控java程序springboot
java·spring boot·prometheus
忍冬行者4 天前
redis8.0三主三从集群基于prometheus+grafana监控
grafana·prometheus
我爱学习好爱好爱4 天前
Docker Compose 一键部署 Prometheus + Alertmanager + Grafana 完整监控方案
docker·grafana·prometheus
无心水4 天前
【神经风格迁移:性能】24、神经风格迁移全链路监控实战:基于Prometheus+Grafana的性能调优指南
数据库·人工智能·深度学习·机器学习·grafana·prometheus·神经风格迁移:性能
cui_win4 天前
Prometheus实战教程 - Redis 监控
数据库·redis·prometheus
BullSmall4 天前
普罗米修斯 的学习路径及建议
学习·prometheus
我爱学习好爱好爱4 天前
Prometheus监控栈 监控数据库mysql
docker·grafana·prometheus