一、普罗米修斯监控系统概述

普罗米修斯(Prometheus)是一款开源的系统监控和警报工具包,最初由SoundCloud开发,现在已成为Cloud Native Computing Foundation的毕业项目。它采用多维数据模型和灵活的查询语言,特别适合监控容器化环境和微服务架构 。

1.1 核心特性对比

特性 描述 优势
多维数据模型 通过指标名称和键值对标识时间序列 支持灵活的数据查询和聚合
PromQL查询语言 强大的查询和聚合语言 可进行复杂的数据分析和计算
拉取模型 主动从目标拉取指标数据 简化了服务发现和配置管理
服务发现 自动发现监控目标 适合动态变化的云环境
可视化集成 与Grafana深度集成 提供丰富的仪表板展示

二、普罗米修斯架构与组件

2.1 核心架构组成

普罗米修斯监控系统主要由以下组件构成:

  • Prometheus Server:核心服务器,负责数据采集、存储和查询
  • Exporters:数据导出器,将各种系统的指标暴露给Prometheus
  • Alertmanager:处理警报通知和路由
  • Pushgateway:支持短生命周期任务的指标推送
  • Web UI:简单的内置查询界面

2.2 数据流架构示例

# 简化的数据流配置示例
scrape_configs:
  - job_name: 'node_exporter'
    static_configs:
      - targets: ['localhost:9100']
  - job_name: 'mysql_exporter'
    static_configs:
      - targets: ['localhost:9104']

三、安装与配置实战

3.1 在CentOS 7上安装普罗米修斯

# 下载普罗米修斯
wget https://github.com/prometheus/prometheus/releases/download/v2.30.3/prometheus-2.30.3.linux-amd64.tar.gz

# 解压安装包
tar xvfz prometheus-2.30.3.linux-amd64.tar.gz
cd prometheus-2.30.3.linux-amd64

# 创建系统用户
useradd --no-create-home --shell /bin/false prometheus

# 创建配置目录
mkdir /etc/prometheus
mkdir /var/lib/prometheus

# 复制二进制文件和配置文件
cp prometheus promtool /usr/local/bin/
cp -r consoles console_libraries /etc/prometheus/

# 设置权限
chown prometheus:prometheus /usr/local/bin/prometheus
chown -R prometheus:prometheus /etc/prometheus
chown prometheus:prometheus /var/lib/prometheus

3.2 配置普罗米修斯主配置文件

# prometheus.yml 配置文件示例
global:
  scrape_interval: 15s  # 默认抓取间隔
  evaluation_interval: 15s  # 规则评估间隔

rule_files:
  - "first_rules.yml"
  - "alert_rules.yml"

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
    # 监控普罗米修斯自身 

  - job_name: 'node_exporter'
    static_configs:
      - targets: ['192.168.1.100:9100', '192.168.1.101:9100']
    scrape_interval: 30s
    # 监控服务器节点指标 

  - job_name: 'mysql_exporter'
    static_configs:
      - targets: ['192.168.1.102:9104']
    # 监控MySQL数据库 

四、常用Exporters安装与配置

4.1 Node Exporter - 系统监控

# 安装Node Exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
tar xvfz node_exporter-1.3.1.linux-amd64.tar.gz
cd node_exporter-1.3.1.linux-amd64

# 启动Node Exporter
./node_exporter --web.listen-address=":9100"

4.2 MySQL Exporter - 数据库监控

# 安装MySQL Exporter
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz
tar xvfz mysqld_exporter-0.14.0.linux-amd64.tar.gz
cd mysqld_exporter-0.14.0.linux-amd64

# 配置MySQL连接
export DATA_SOURCE_NAME='username:password@(localhost:3306)/'
./mysqld_exporter

五、PromQL查询语言深度解析

5.1 基础查询语法

# 查询节点CPU使用率
100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

# 查询内存使用情况
node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes

# 查询磁盘IO
rate(node_disk_read_bytes_total[5m])

# 查询网络流量
rate(node_network_receive_bytes_total[5m])

5.2 高级查询示例

# 计算5分钟内HTTP请求错误率
sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) * 100

# 预测磁盘空间耗尽时间
predict_linear(node_filesystem_free_bytes{mountpoint="/"}[6h], 3600*24) / 3600

# 服务响应时间百分位统计
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))

六、警报规则配置与管理

6.1 基础警报规则配置

# alert_rules.yml 警报规则文件
groups:
- name: node_alerts
  rules:
  - alert: HighCPUUsage
    expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "高CPU使用率告警"
      description: "实例 {{ $labels.instance }} 的CPU使用率持续5分钟高于80%,当前值为 {{ $value }}%"

  - alert: OutOfMemory
    expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 10
    for: 2m
    labels:
      severity: critical
    annotations:
      summary: "内存不足告警"
      description: "实例 {{ $labels.instance }} 可用内存不足10%,当前值为 {{ $value }}%"

6.2 Alertmanager配置

# alertmanager.yml 配置文件
global:
  smtp_smarthost: 'smtp.example.com:587'
  smtp_from: 'alertmanager@example.com'
  smtp_auth_username: 'username'
  smtp_auth_password: 'password'

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'email-notifications'

receivers:
- name: 'email-notifications'
  email_configs:
  - to: 'admin@example.com'
    send_resolved: true

七、Java应用监控集成

7.1 Spring Boot应用集成

<!-- Maven依赖配置 -->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
    <version>1.8.5</version>
</dependency>
// Spring Boot配置类
@Configuration
public class PrometheusConfig {
    
    @Bean
    public MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {
        return registry -> registry.config().commonTags("application", "my-spring-app");
    }
}

// 应用配置
management:
  endpoints:
    web:
      exposure:
        include: prometheus,health,metrics
  endpoint:
    prometheus:
      enabled: true

7.2 自定义业务指标监控

// 自定义业务指标示例
@Component
public class OrderServiceMetrics {
    
    private final Counter orderCounter;
    private final Timer orderProcessingTimer;
    private final Gauge activeOrders;
    
    public OrderServiceMetrics(MeterRegistry registry) {
        this.orderCounter = Counter.builder("orders.total")
            .description("总订单数量")
            .register(registry);
            
        this.orderProcessingTimer = Timer.builder("orders.processing.time")
            .description("订单处理时间")
            .register(registry);
            
        this.activeOrders = Gauge.builder("orders.active")
            .description("活跃订单数量")
            .register(registry);
    }
    
    public void recordOrder() {
        orderCounter.increment();
    }
    
    public void recordProcessingTime(Runnable task) {
        orderProcessingTimer.record(task);
    }
}

八、Grafana可视化配置

8.1 数据源配置

# Grafana数据源配置示例
apiVersion: 1

datasources:
  - name: Prometheus
    type: prometheus
    access: proxy
    url: http://prometheus:9090
    isDefault: true

8.2 常用仪表板配置

仪表板类型 监控指标 适用场景
系统资源监控 CPU、内存、磁盘、网络 基础设施监控
应用性能监控 请求量、响应时间、错误率 业务应用监控
数据库监控 连接数、查询性能、锁状态 数据库性能分析
业务指标监控 订单量、用户活跃度、收入 业务运营分析

九、生产环境最佳实践

9.1 监控策略规划

关键监控指标分类:

# 按重要性划分监控层级
monitoring_levels:
  level1:  # 关键业务指标
    - service_availability
    - revenue_metrics
    - user_experience
    
  level2:  # 系统性能指标
    - response_time
    - throughput
    - error_rate
    
  level3:  # 资源使用指标
    - cpu_usage
    - memory_usage
    - disk_io

9.2 容量规划与优化

  • 存储优化:根据数据保留策略合理配置存储空间
  • 查询优化:使用记录规则预计算复杂查询
  • 高可用部署:部署多个Prometheus实例实现冗余

9.3 安全配置

# 安全配置示例
basic_auth_users:
  - username: admin
    password: $2y$12$hashed_password

tls_config:
  cert_file: /path/to/cert.pem
  key_file: /path/to/key.pem

通过系统化的学习路径和实践指南,从基础的安装配置到高级的监控策略,可以全面掌握普罗米修斯监控系统的使用,构建稳定可靠的生产环境监控体系。


参考来源

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐