您的位置:

Prometheus监控系统教程

一、介绍

Prometheus是一个开源的监控系统,它由SoundCloud开发并于2016年加入了Cloud Native Computing Foundation。Prometheus旨在收集和处理来自各种来源的指标数据,包括服务器应用程序和服务。

Prometheus可通过HTTP处理指标收集请求,并使用自定义查询语言PromQL执行查询。它还提供可视化UI、报警、警报分组、集成API等功能。Prometheus使用Pushgateway允许进行临时的机器指标。

Prometheus的生成模型非常实用。使用PromQL进行度量指标查询而不依赖于多个存储节点,给了它一个非常标准化的视角,其中每个维度的是具有意义的变体。因此,基本上,我们可以通过内置的工具和集成API对其进行任何操作。

二、安装和配置

1. 安装

Prometheus使用Go编写,可以从其GitHub仓库中的tar包或源代码构建中获取。

wget https://github.com/prometheus/prometheus/releases/download/v2.15.2/prometheus-2.15.2.linux-amd64.tar.gz
tar xfz prometheus-*.tar.gz
cd prometheus-*
./prometheus

默认情况下,它会在当前目录下查找prometheus.yml并使用它来配置它自己。如果您将其放在不同的位置。您将必须使用命令行标志-prometheus.config.file=/path/to/prometheus.yml指定配置文件的位置。

2. 配置

Prometheus的配置文件是YAML格式的。Prometheus使用此文件配置如何抓取和处理指标。以下是一个示例配置文件:

global:
  scrape_interval:     15s      
  evaluation_interval: 15s      

scrape_configs:
  - job_name: 'prometheus'    
    static_configs:
      - targets: ['localhost:9090']
  - job_name: 'node'           
    static_configs:
      - targets: ['localhost:9100']

在上面的示例中,Prometheus将每15秒抓取已配置的作业。您可以在任何您需要监控的应用程序实例或节点上配置Prometheus客户端进行抓取进而获得指标数据。通过检查节点的IP地址和端口号,Prometheus可以轻松地抓取每个节点的指标。

三、PromQL查询语言

1. 基本查询

PromQL是Prometheus Query Language的简称,是一种基于SQL的语法,用于从Prometheus监控数据源中提取指标数据。

以下是示例查询:

http_requests_total

上述查询将返回http_requests_total指标的时间序列数据,该指标表示所有发往webserver的请求的总数。

2. 归并聚合

最常用的函数有count,sum,avg,min和max,它们可以应用于时间系列。以下是一个示例:

sum(http_requests_total)

上述查询将返回所有类型中的http_requests_total的聚合值。您还可以将多个指标组合在一起进行操作,例如:

sum(http_requests_total) by (job)

上述查询将返回按作业名称分组的所有http_requests_total的聚合值。

四、报警和警报分组

1. 报警规则

Prometheus的报警规则是由基于PromQL的表达式形成的。

以下是一个示例报警规则:

alert: TargetDown
expr: up == 0
for: 5m
labels:
  severity: critical
annotations:
  summary: "Instance {{ $labels.instance }} down"

上述规则将在目标不可用时发出警报,并将匹配的标签设置为“critical”。

2. 警报分组

警报分组使您可以将警报分组到单个警报通知中,而不是为每个警报生成自己的通知。

以下是一个示例警报规则:

groups:
  - name: Disk space
    rules:
      - alert: DiskUsageCritical
        expr: node_filesystem_utilisation{mountpoint="/"}/>
          node_filesystem_utilisation{mountpoint="/"} > 0.8
        for: 15m
        labels:
          severity: critical
        annotations:
          summary: Instance {{ $labels.instance }} - high disk usage
  - name: Another group
    rules:
      - alert: AnotherAlert
        expr: another_expression
        labels:
          severity: high
        annotations:
          summary: Another alert
          description: Yet another alert for testing purposes

上述示例定义了两个警报分组。第一个组计算可用磁盘空间的百分比,并在剩余磁盘空间低于80%时向管理员发送警报。

五、可视化工具

1. Grafana

Grafana是一种基于web的开源分析和可视化解决方案,可在Prometheus数据源的基础上进行构建和展示。

以下是一个示例配置文件:

apiVersion: 1

datasources:
- name: prometheus
  type: prometheus
  url: http://localhost:9090
  access: direct
  isDefault: true

dashboards:
- name: Example dashboard
  dataSource: prometheus
  panels:
  # ...
  templating:
  # ...

2. Prometheus Web UI

Prometheus附带一个内置的Web UI,可用于查看可用的度量。您可以通过以下网址访问它:

http://localhost:9090/graph

此界面允许您执行PromQL查询,可视化和绘制时间序列,并创建警报规则并查看它们的状态。