监控告警系统(Prometheus)

应用分类:

一款Google开源的系统监控和告警工具包,帮助您监控网络环境内服务运行状态。

原价为:1.00¥。当前价格为:0.00¥。

监控告警系统 Prometheus 介绍

一、Prometheus 的主要特点及核心功能

Prometheus 是一款开源的系统监控和告警工具包。它以其强大的多维数据模型、灵活的查询语言 (PromQL) 和高效的数据收集方式而广泛应用于云原生环境。

主要特点:

  • 多维数据模型: Prometheus 将所有监控数据存储为时间序列,每个时间序列由指标名称和一组键值对(称为标签)唯一标识。这种灵活的数据模型使得用户可以轻松地对监控数据进行过滤、聚合和查询。
  • 强大的查询语言 (PromQL): PromQL 是一种灵活而强大的查询语言,允许用户实时查询和聚合监控数据。通过 PromQL,用户可以进行各种复杂的分析,例如计算速率、百分位数、预测等。
  • 灵活的数据采集: Prometheus 支持多种数据采集方式:
    • Exporters: Prometheus 通过 Exporters 采集目标服务的指标数据。Exporters 是独立的 HTTP 服务,它们暴露目标服务的指标,Prometheus 定期抓取这些指标。官方和社区提供了大量的 Exporters,用于监控各种系统和服务,如 Linux 系统、Kubernetes、Docker、MySQL、PostgreSQL、HTTP 服务等。
    • Pushgateway: 对于无法被 Prometheus 直接抓取的目标(例如,短生命周期的任务),可以使用 Pushgateway 将指标数据推送到 Prometheus。
    • Service Discovery: Prometheus 可以自动发现需要监控的目标,支持多种服务发现机制,如 Kubernetes 服务发现、Consul 服务发现、DNS 服务发现等。
  • 高效的数据存储: Prometheus 将采集到的时间序列数据存储在本地磁盘上,并采用高效的存储格式,能够处理大规模的时间序列数据。
  • 告警管理: Prometheus 的告警管理器 (Alertmanager) 负责处理 Prometheus 产生的告警。它可以对告警进行分组、抑制、路由,并通过邮件、Slack、PagerDuty 等多种方式发送通知。
  • 可视化: Prometheus 本身提供了一个简单的表达式浏览器,用于查询和可视化监控数据。同时,Prometheus 通常与 Grafana 等可视化工具集成,提供更强大和灵活的仪表盘功能。
  • 易于部署和管理: 作为 Docker 镜像,Prometheus 可以轻松地在各种环境中部署和管理,简化了安装和配置过程。

核心功能:

  • 监控指标采集: 定期从配置的目标抓取指标数据。
  • 数据存储和查询: 高效地存储时间序列数据,并提供强大的 PromQL 查询语言。
  • 告警规则定义: 基于 PromQL 定义告警规则。
  • 告警触发: 当监控数据满足告警规则时触发告警。
  • 与 Alertmanager 集成: 将触发的告警发送给 Alertmanager 进行处理。
  • 数据可视化: 提供基本的表达式浏览器,并常与 Grafana 集成进行更高级的可视化。

二、Prometheus 的基础使用流程

  1. 配置监控目标 (Exporters): Prometheus 通过 Exporters 采集监控数据。您需要部署并配置与您要监控的服务或系统相对应的 Exporters。例如,要监控 Linux 系统,您需要部署 Node Exporter;要监控 Kubernetes 集群,您可以使用 kube-state-metrics 和 cAdvisor 等。

  2. 配置 Prometheus 抓取任务: Prometheus 需要知道从哪些 Exporters 获取指标数据。您需要在 Prometheus 的配置文件 (prometheus.yml) 中定义抓取任务 (scrape_configs)。每个抓取任务指定了要抓取的目标地址、抓取间隔、标签重写规则等。

    一个简单的 scrape_config 示例 (假设 Node Exporter 运行在 localhost:9100):

    YAML

    scrape_configs:
      - job_name: 'node'
        static_configs:
          - targets: ['localhost:9100']
    
  3. 启动 Prometheus 服务: 在配置好 prometheus.yml 文件后,启动 Prometheus 服务。Prometheus 将会按照配置文件中的定义,定期地从配置的目标抓取指标数据。

  4. 使用 Prometheus 表达式浏览器查询数据: Prometheus 提供了一个内置的表达式浏览器,通常通过 Prometheus 服务运行的 9090 端口访问(例如 http://localhost:9090)。您可以在表达式输入框中输入 PromQL 查询语句,并查看实时的监控数据和图表。

    • 输入指标名称,例如 node_cpu_seconds_total,可以查看该指标的所有时间序列。
    • 使用标签进行过滤,例如 node_cpu_seconds_total{instance="your-node", mode="user"}
    • 使用聚合函数,例如 sum(rate(node_cpu_seconds_total[5m])) by (instance) 计算每个节点的 CPU 使用率。
    • 点击 “Execute” 按钮执行查询,并可以在 “Graph” 选项卡中查看图表。
  5. 定义告警规则: 您可以在 Prometheus 的配置文件中或者独立的告警规则文件中定义告警规则。告警规则基于 PromQL 表达式,当表达式的计算结果为真时,Prometheus 会触发告警。

    一个简单的告警规则示例 (alert.rules):

    YAML

    groups:
    - name: NodeHighCPU
      rules:
      - alert: HighCPUUsage
        expr: sum(rate(node_cpu_seconds_total[5m])) by (instance) > 0.8
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "High CPU usage detected on {{ $labels.instance }}"
          description: "CPU usage on {{ $labels.instance }} is above 80% for more than 5 minutes."
    
  6. 配置 Alertmanager (可选但推荐): Prometheus 本身只负责触发告警,通常需要与 Alertmanager 集成来处理告警的通知。您需要配置 Prometheus 将触发的告警发送给 Alertmanager,并在 Alertmanager 中配置告警的接收者和通知方式。

  7. 使用 Grafana 进行可视化 (可选但常用): Grafana 是一款流行的开源数据可视化工具,可以与 Prometheus 集成,创建功能强大的监控仪表盘。您需要在 Grafana 中添加 Prometheus 作为数据源,并创建各种图表来展示您关心的监控指标。

三、生成一个简单的使用实例

假设我们已经运行了一个 Node Exporter 实例,它暴露了主机的系统指标,并且 Prometheus 服务也已经启动并配置了抓取该 Node Exporter 的任务(如第二部分的示例配置)。

目标: 使用 Prometheus 表达式浏览器查询主机的 CPU 使用率。

步骤:

  1. 确认 Node Exporter 正在运行: 假设 Node Exporter 运行在 localhost:9100。您可以在浏览器中访问 http://localhost:9100/metrics,如果看到类似 # HELP node_cpu_seconds_total Time spent in seconds in each CPU mode. 的指标数据,则表示 Node Exporter 正在正常工作。

  2. 访问 Prometheus 表达式浏览器: 在浏览器中打开 Prometheus 的 Web 界面,通常是 http://localhost:9090

  3. 输入 PromQL 查询: 在表达式输入框中输入以下 PromQL 查询,以计算所有 CPU 核心在用户模式下的平均使用率(以百分比表示):

    avg by (instance) (rate(node_cpu_seconds_total{mode="user"}[5m])) * 100
    

    解释:

    • node_cpu_seconds_total{mode="user"}: 筛选出 CPU 在用户模式下消耗的总时间(累积值)。
    • rate(...[5m]): 计算在过去 5 分钟内该指标的每秒增长率,即每秒的 CPU 使用量。
    • avg by (instance) (...): 按 instance 标签(通常是主机名或 IP 地址)计算平均值。
    • * 100: 将结果转换为百分比。
  4. 执行查询并查看结果: 点击 “Execute” 按钮。Prometheus 将会显示一个包含每个被监控主机的 CPU 用户使用率的时间序列数据。

  5. 查看图表: 切换到 “Graph” 选项卡,Prometheus 将会绘制出 CPU 用户使用率随时间变化的图表。您可以调整时间范围以查看不同时间段的监控数据。

进阶 (定义一个简单的告警规则):

假设我们要创建一个告警,当主机的平均 CPU 使用率超过 80% 持续 5 分钟时触发。

  1. 编辑 Prometheus 告警规则文件 (alert.rules): 添加以下规则:

    groups:
    - name: HostCPUAlerts
      rules:
      - alert: HighAverageCPUUsage
        expr: avg by (instance) (rate(node_cpu_seconds_total[5m])) * 100 > 80
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "High average CPU usage detected"
          description: "Average CPU usage on {{ $labels.instance }} is above 80% for more than 5 minutes."
    
  2. 配置 Prometheus 加载告警规则文件: 确保您的 prometheus.yml 文件中配置了 rule_files 来加载该告警规则文件:

    rule_files:
      - 'alert.rules'
    
  3. 重启 Prometheus 服务: 使配置更改生效。

现在,当被监控主机的平均 CPU 使用率持续超过 80% 达 5 分钟时,Prometheus 将会触发一个名为 HighAverageCPUUsage 的告警。这个告警可以被 Alertmanager 进一步处理和通知。

这个简单的实例展示了如何通过 Prometheus 表达式浏览器查询基本的监控数据,并定义一个简单的告警规则。在实际应用中,您需要根据您监控的具体服务和系统配置相应的 Exporters 和更复杂的查询和告警规则。