一、介绍
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查询,可视化和绘制时间序列,并创建警报规则并查看它们的状态。