一、Prometheus 基本介绍
Prometheus 是一套由 Go 语言开发的开源监控、报警与时间序列数据库组合,随着 Kubernetes 的流行而广泛应用。它能监控主机、服务、容器等多种对象,支持多种 exporter 采集数据,也可通过 pushgateway 进行数据上报,性能足以支撑上万万台规模集群的监控需求。
时间序列数据与优势
时间序列数据是按时间顺序记录系统、设备状态变化的数据,应用场景广泛,如系统日志、无人驾驶车辆运行数据、证券交易数据、运维监控数据等。
时间序列数据库主要优点:
- 性能优异:相比关系型数据库和普通 NOSQL,在处理大规模数据时 I/O 性能更出色
- 存储成本低:采用 metrics:key=value 的数据存储方式和高效压缩算法,平均每条数据仅占用约 3.5 字节存储空间
Prometheus 主要特征
- 多维度数据模型,支持多维度建模和查询
- 灵活的 PromQL 查询语言,提供 HTTP 查询接口,便于与 Grafana 等工具结合
- 不依赖分布式存储,支持单节点本地存储,也可对接第三方时序数据库
- 默认通过 HTTP 的 pull 模型拉取数据,也可通过中间网关支持 push 模型
- 支持服务发现或静态配置发现目标服务
- 支持多种图表和界面展示,可集成第三方工具
监控原理
- Prometheus Server 定时从目标对象抓取 metrics 数据
- 每个被监控目标需暴露 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 配置
设置数据源
- 登录后点击 "Add data source"
- 选择 Prometheus
- 配置 Prometheus 地址
- 点击 "Save & Test" 完成配置
绘制图形
- 添加仪表板
- 选择 "添加可视化"
- 配置查询指标
- 设置图表样式
导入模板
可从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 监控平台,实现对主机、服务的全面监控、可视化展示和告警通知。