跳转到内容

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:9090

2.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:9090

3. 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_exporter

4.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_exporter

4.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_exporter

5. 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:下载Prometheus
  • tar:解压Prometheus
  • systemctl start prometheus:启动Prometheus
  • systemctl stop prometheus:停止Prometheus
  • systemctl status prometheus:查看Prometheus状态

Prometheus是最流行的开源监控系统之一,掌握这些知识后,我们将在后续课程中学习Grafana可视化配置、监控告警配置等内容。

实战应用 ​

学完 Prometheus 的理论知识后,推荐通过以下方式进行实践:

Kubernetes 环境实战:在 Kubernetes 集群中部署 Prometheus,监控云咖啡应用系统。详见 云咖啡 K8S 实战课程 - 第六阶段:监控和日志

相关内容:

课后练习 ​

练习1(基础) ​

在Ubuntu上安装Prometheus,并完成初始化配置。

练习2(进阶) ​

安装Node Exporter,并配置Prometheus采集Node Exporter数据。

练习3(拓展) ​

配置Prometheus告警规则,实现CPU、内存、磁盘使用率告警。

评论区

专业的Linux技术学习平台,从入门到精通的完整学习路径