跳转到内容

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技术学习平台,从入门到精通的完整学习路径