主题
Prometheus监控详解
课程介绍
Prometheus是一个开源的监控系统,用于收集和存储时间序列数据。本课程将带你学习Prometheus的安装、配置、数据采集、查询和告警等核心功能,帮助你搭建完整的监控平台。
1. Prometheus概述
1.1 什么是Prometheus
Prometheus是一个开源的监控和告警系统,用于收集和存储时间序列数据。
Prometheus的特点:
| 特点 | 说明 |
|---|---|
| 多维数据模型 | 支持多维度的数据模型 |
| 时间序列数据 | 专注于时间序列数据 |
| Pull模式 | 采用Pull模式采集数据 |
| 服务发现 | 支持多种服务发现机制 |
| 查询语言 | 提供强大的查询语言PromQL |
| 告警管理 | 内置告警管理功能 |
1.2 Prometheus的架构
Prometheus采用分布式架构。
Prometheus架构:
Prometheus Server(Prometheus服务器)
↓
Exporter(数据导出器)
↓
Pushgateway(推送网关)
↓
Alertmanager(告警管理器)
↓
Grafana(可视化工具)组件说明:
| 组件 | 说明 |
|---|---|
| Prometheus Server | 核心组件,负责采集和存储数据 |
| Exporter | 数据导出器,负责采集指标数据 |
| Pushgateway | 推送网关,用于短期任务 |
| Alertmanager | 告警管理器,负责告警处理 |
| Grafana | 可视化工具,负责数据展示 |
2. Prometheus安装
2.1 系统要求
Prometheus对系统有一定要求。
| 要求 | 说明 |
|---|---|
| 操作系统 | Linux、Windows、macOS |
| 内存 | 至少2GB |
| 磁盘 | 至少10GB |
| 网络 | 需要网络连接 |
2.2 在Ubuntu上安装Prometheus
在Ubuntu上安装Prometheus的步骤。
步骤1:下载Prometheus
bash
# 下载Prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
# 解压Prometheus
tar -xzf prometheus-2.45.0.linux-amd64.tar.gz
# 移动到安装目录
sudo mv prometheus-2.45.0.linux-amd64 /opt/prometheus步骤2:创建Prometheus用户
bash
# 创建Prometheus用户
sudo useradd -m -s /bin/bash prometheus
# 设置Prometheus用户密码
sudo passwd prometheus步骤3:配置Prometheus
bash
# 创建Prometheus配置目录
sudo mkdir -p /etc/prometheus
# 复制配置文件
sudo cp /opt/prometheus/prometheus.yml /etc/prometheus/
# 修改配置文件权限
sudo chown -R prometheus:prometheus /etc/prometheus步骤4:创建Prometheus服务
bash
# 创建Prometheus服务文件
sudo vim /etc/systemd/system/prometheus.service服务文件内容:
ini
[Unit]
Description=Prometheus
After=network.target
[Service]
User=prometheus
Group=prometheus
ExecStart=/opt/prometheus/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus \
--web.console.templates=/opt/prometheus/consoles \
--web.console.libraries=/opt/prometheus/console_libraries
[Install]
WantedBy=multi-user.target步骤5:启动Prometheus
bash
# 创建Prometheus数据目录
sudo mkdir -p /var/lib/prometheus
sudo chown -R prometheus:prometheus /var/lib/prometheus
# 重载systemd
sudo systemctl daemon-reload
# 启动Prometheus
sudo systemctl start prometheus
# 设置Prometheus开机自启
sudo systemctl enable prometheus
# 查看Prometheus状态
sudo systemctl status prometheus步骤6:访问Prometheus
打开浏览器,访问:http://localhost:90902.3 使用Docker安装Prometheus
使用Docker安装Prometheus的步骤。
步骤1:拉取Prometheus镜像
bash
# 拉取Prometheus镜像
docker pull prom/prometheus:latest步骤2:运行Prometheus容器
bash
# 运行Prometheus容器
docker run -d \
--name prometheus \
-p 9090:9090 \
-v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
-v /opt/prometheus/data:/prometheus \
prom/prometheus:latest步骤3:访问Prometheus
打开浏览器,访问:http://localhost:90903. Prometheus配置
3.1 配置文件概述
Prometheus使用YAML格式的配置文件。
配置文件结构:
yaml
# 全局配置
global:
scrape_interval: 15s
evaluation_interval: 15s
# 告警规则文件
rule_files:
- "alerts/*.yml"
# 数据采集配置
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']3.2 全局配置
全局配置用于设置Prometheus的全局参数。
全局配置示例:
yaml
global:
# 数据采集间隔
scrape_interval: 15s
# 规则评估间隔
evaluation_interval: 15s
# 外部标签
external_labels:
cluster: 'my-cluster'
environment: 'production'3.3 数据采集配置
数据采集配置用于设置数据采集的参数。
数据采集配置示例:
yaml
scrape_configs:
# Prometheus自身监控
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# Node Exporter监控
- job_name: 'node'
static_configs:
- targets: ['192.168.1.10:9100', '192.168.1.11:9100']
# Nginx Exporter监控
- job_name: 'nginx'
static_configs:
- targets: ['192.168.1.10:9113']
# MySQL Exporter监控
- job_name: 'mysql'
static_configs:
- targets: ['192.168.1.10:9104']3.4 服务发现配置
服务发现配置用于自动发现监控目标。
服务发现配置示例:
yaml
scrape_configs:
# Kubernetes服务发现
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: true
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
action: replace
target_label: __metrics_path__
regex: (.+)
- source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
action: replace
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
target_label: __address__
# Consul服务发现
- job_name: 'consul'
consul_sd_configs:
- server: 'localhost:8500'
services: []4. Exporter
4.1 Node Exporter
Node Exporter用于采集主机指标。
安装Node Exporter:
bash
# 下载Node Exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
# 解压Node Exporter
tar -xzf node_exporter-1.6.1.linux-amd64.tar.gz
# 移动到安装目录
sudo mv node_exporter-1.6.1.linux-amd64 /opt/node_exporter
# 创建Node Exporter用户
sudo useradd -m -s /bin/bash node_exporter
# 创建Node Exporter服务
sudo vim /etc/systemd/system/node_exporter.service服务文件内容:
ini
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
Group=node_exporter
ExecStart=/opt/node_exporter/node_exporter
[Install]
WantedBy=multi-user.target启动Node Exporter:
bash
# 重载systemd
sudo systemctl daemon-reload
# 启动Node Exporter
sudo systemctl start node_exporter
# 设置Node Exporter开机自启
sudo systemctl enable node_exporter
# 查看Node Exporter状态
sudo systemctl status node_exporter4.2 Nginx Exporter
Nginx Exporter用于采集Nginx指标。
安装Nginx Exporter:
bash
# 下载Nginx Exporter
wget https://github.com/nginxinc/nginx-prometheus-exporter/releases/download/v0.11.0/nginx-prometheus-exporter_0.11.0_linux_amd64.tar.gz
# 解压Nginx Exporter
tar -xzf nginx-prometheus-exporter_0.11.0_linux_amd64.tar.gz
# 移动到安装目录
sudo mv nginx-prometheus-exporter /opt/nginx_exporter
# 创建Nginx Exporter用户
sudo useradd -m -s /bin/bash nginx_exporter
# 创建Nginx Exporter服务
sudo vim /etc/systemd/system/nginx_exporter.service服务文件内容:
ini
[Unit]
Description=Nginx Exporter
After=network.target
[Service]
User=nginx_exporter
Group=nginx_exporter
ExecStart=/opt/nginx_exporter/nginx-prometheus-exporter \
-nginx.scrape-uri=http://localhost/nginx_status
[Install]
WantedBy=multi-user.target启动Nginx Exporter:
bash
# 重载systemd
sudo systemctl daemon-reload
# 启动Nginx Exporter
sudo systemctl start nginx_exporter
# 设置Nginx Exporter开机自启
sudo systemctl enable nginx_exporter
# 查看Nginx Exporter状态
sudo systemctl status nginx_exporter4.3 MySQL Exporter
MySQL Exporter用于采集MySQL指标。
安装MySQL Exporter:
bash
# 下载MySQL Exporter
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.0/mysqld_exporter-0.15.0.linux-amd64.tar.gz
# 解压MySQL Exporter
tar -xzf mysqld_exporter-0.15.0.linux-amd64.tar.gz
# 移动到安装目录
sudo mv mysqld_exporter-0.15.0.linux-amd64 /opt/mysql_exporter
# 创建MySQL Exporter用户
sudo useradd -m -s /bin/bash mysql_exporter
# 创建MySQL Exporter配置文件
sudo vim /opt/mysql_exporter/.my.cnf配置文件内容:
ini
[client]
user=exporter
password=exporter_password
host=localhost
port=3306创建MySQL Exporter服务:
bash
# 创建MySQL Exporter服务
sudo vim /etc/systemd/system/mysql_exporter.service服务文件内容:
ini
[Unit]
Description=MySQL Exporter
After=network.target
[Service]
User=mysql_exporter
Group=mysql_exporter
ExecStart=/opt/mysql_exporter/mysqld_exporter \
--config.my-cnf=/opt/mysql_exporter/.my.cnf
[Install]
WantedBy=multi-user.target启动MySQL Exporter:
bash
# 重载systemd
sudo systemctl daemon-reload
# 启动MySQL Exporter
sudo systemctl start mysql_exporter
# 设置MySQL Exporter开机自启
sudo systemctl enable mysql_exporter
# 查看MySQL Exporter状态
sudo systemctl status mysql_exporter5. PromQL查询
5.1 PromQL基础
PromQL是Prometheus的查询语言。
PromQL语法:
sql
# 查询所有指标
up
# 查询特定指标
node_cpu_seconds_total
# 查询特定标签的指标
node_cpu_seconds_total{mode="idle"}
# 查询特定标签的指标(正则匹配)
node_cpu_seconds_total{mode=~"idle|iowait"}
# 查询特定标签的指标(反向匹配)
node_cpu_seconds_total{mode!="idle"}5.2 PromQL函数
PromQL提供了丰富的函数。
常用函数:
| 函数 | 说明 |
|---|---|
rate() | 计算速率 |
irate() | 计算瞬时速率 |
increase() | 计算增量 |
delta() | 计算差值 |
avg() | 计算平均值 |
sum() | 计算总和 |
max() | 计算最大值 |
min() | 计算最小值 |
函数示例:
sql
# 计算CPU使用率
100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# 计算内存使用率
(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100
# 计算磁盘使用率
(node_filesystem_size_bytes - node_filesystem_free_bytes) / node_filesystem_size_bytes * 100
# 计算网络流量
rate(node_network_receive_bytes_total[5m])
rate(node_network_transmit_bytes_total[5m])6. 告警规则
6.1 告警规则概述
告警规则用于定义告警条件。
告警规则示例:
yaml
groups:
- name: node_alerts
rules:
# CPU使用率告警
- alert: HighCPUUsage
expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "High CPU usage detected"
description: "CPU usage is above 80% for more than 5 minutes."
# 内存使用率告警
- alert: HighMemoryUsage
expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 80
for: 5m
labels:
severity: warning
annotations:
summary: "High memory usage detected"
description: "Memory usage is above 80% for more than 5 minutes."
# 磁盘使用率告警
- alert: HighDiskUsage
expr: (node_filesystem_size_bytes - node_filesystem_free_bytes) / node_filesystem_size_bytes * 100 > 80
for: 5m
labels:
severity: warning
annotations:
summary: "High disk usage detected"
description: "Disk usage is above 80% for more than 5 minutes."6.2 配置告警规则
配置告警规则的步骤。
步骤1:创建告警规则目录
bash
# 创建告警规则目录
sudo mkdir -p /etc/prometheus/alerts步骤2:创建告警规则文件
bash
# 创建告警规则文件
sudo vim /etc/prometheus/alerts/node.yml步骤3:配置Prometheus
bash
# 编辑Prometheus配置文件
sudo vim /etc/prometheus/prometheus.yml配置文件内容:
yaml
# 告警规则文件
rule_files:
- "alerts/*.yml"步骤4:重启Prometheus
bash
# 重启Prometheus
sudo systemctl restart prometheus课程总结
这节课我们学习了Prometheus监控详解。
核心内容:
- Prometheus概述
- Prometheus安装
- Prometheus配置
- Exporter
- PromQL查询
- 告警规则
重要命令:
wget:下载Prometheustar:解压Prometheussystemctl start prometheus:启动Prometheussystemctl stop prometheus:停止Prometheussystemctl status prometheus:查看Prometheus状态
Prometheus是最流行的开源监控系统之一,掌握这些知识后,我们将在后续课程中学习Grafana可视化配置、监控告警配置等内容。
实战应用
学完 Prometheus 的理论知识后,推荐通过以下方式进行实践:
Kubernetes 环境实战:在 Kubernetes 集群中部署 Prometheus,监控云咖啡应用系统。详见 云咖啡 K8S 实战课程 - 第六阶段:监控和日志
相关内容:
课后练习
练习1(基础)
在Ubuntu上安装Prometheus,并完成初始化配置。
练习2(进阶)
安装Node Exporter,并配置Prometheus采集Node Exporter数据。
练习3(拓展)
配置Prometheus告警规则,实现CPU、内存、磁盘使用率告警。