Prometheus入门

学习如何安装 Prometheus 监控和警报系统并编写查询。
334 位读者喜欢这篇文章。
Tools for the sysadmin

opensource.com

Prometheus 是一个开源的监控和警报系统,它直接从目标主机上运行的代理程序中抓取指标,并将收集到的样本集中存储在其服务器上。 指标也可以使用诸如 collectd_exporter 之类的插件来推送,虽然这不是 Prometheus 的默认行为,但在某些主机位于防火墙后面或安全策略禁止打开端口的环境中,这可能很有用。

Prometheus 是 云原生计算基金会 的一个项目,它使用联邦模型进行扩展,该模型使一个 Prometheus 服务器可以抓取另一个 Prometheus 服务器。 这允许创建分层拓扑,其中中央系统或更高级别的 Prometheus 服务器可以抓取已从下属实例收集的聚合数据。

除了 Prometheus 服务器之外,其最常见的组件是 Alertmanager 和导出器。

可以在 Prometheus 中创建警报规则,并将其配置为将自定义警报发送到 Alertmanager。 然后,Alertmanager 处理这些警报,包括通过电子邮件或诸如 PagerDuty 之类的第三方服务发送通知。

Prometheus 的导出器可以是库、进程、设备或任何其他暴露指标的东西,这些指标将被 Prometheus 抓取。 这些指标在 /metrics 端点可用,这允许 Prometheus 直接抓取它们,而无需代理。 本文中的教程使用 node_exporter 来暴露目标主机的硬件和操作系统指标。 导出器的输出是纯文本且高度可读的,这是 Prometheus 的优势之一。

此外,您可以配置 Grafana 以使用 Prometheus 作为后端来提供数据可视化和仪表板功能。

理解 Prometheus 的配置文件

抓取 /metrics 之间的时间间隔(以秒为单位)控制时间序列数据库的粒度。 这在配置文件中定义为 scrape_interval 参数,默认设置为 60 秒。

目标是在 scrape_configs 部分中为每个抓取作业设置的。 每个作业都有其自己的名称和一组标签,这些标签可以帮助过滤、分类并使其更容易识别目标。 一个作业可以有多个目标。

安装 Prometheus

在本教程中,为简单起见,我们将使用 docker 安装 Prometheus 服务器和 node_exporter。 Docker 应该已经在您的系统上正确安装和配置。 对于更深入、自动化的方法,我推荐 Steve Ovens 的文章 如何使用 Ansible 设置 Prometheus 系统监控

在开始之前,请在您的工作目录中创建 Prometheus 配置文件 prometheus.yml,如下所示

global:
  scrape_interval: 	15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'

	static_configs:
	- targets: ['localhost:9090']

  - job_name: 'webservers'

	static_configs:
	- targets: ['<node exporter node IP>:9100']

使用 Docker 运行以下命令启动 Prometheus

$ sudo docker run -d -p 9090:9090 -v 
/path/to/prometheus.yml:/etc/prometheus/prometheus.yml 
prom/prometheus

默认情况下,Prometheus 服务器将使用端口 9090。如果此端口已被使用,您可以通过在上一条命令的末尾添加参数 --web.listen-address="<机器的 IP 地址>:<端口>" 来更改它。

在您要监控的机器上,使用以下命令下载并运行 node_exporter 容器

$ sudo docker run -d -v "/proc:/host/proc" -v "/sys:/host/sys" -v 
"/:/rootfs" --net="host" prom/node-exporter --path.procfs 
/host/proc --path.sysfs /host/sys --collector.filesystem.ignored-
mount-points "^/(sys|proc|dev|host|etc)($|/)"

出于本学习练习的目的,您可以将 node_exporter 和 Prometheus 安装在同一台机器上。 请注意,在生产环境中在 Docker 下运行 node_exporter 并不明智——这仅用于测试目的。

要验证 node_exporter 是否正在运行,请打开您的浏览器并导航到 http://<Node exporter 主机的 IP 地址>:9100/metrics。 将显示所有收集到的指标; 这些是 Prometheus 将抓取的相同指标。

Checking node_exporter

要验证 Prometheus 服务器安装,请打开您的浏览器并导航到 http://localhost:9090

您应该会看到 Prometheus 界面。 单击 Status 然后是 Targets。 在 State 下,您应该看到您的机器被列为 UP

Target machine status

使用 Prometheus 查询

现在是熟悉 PromQL, Prometheus 的查询语法及其图形 Web 界面的时候了。 转到您 Prometheus 服务器上的 http://localhost:9090/graph。 您将看到一个查询编辑器和两个选项卡:Graph 和 Console。

Prometheus 将所有数据存储为时间序列,并使用指标名称标识每一个。 例如,指标 node_filesystem_avail_bytes 显示可用的文件系统空间。 指标的名称可以在表达式框中使用,以选择具有此名称的所有时间序列并生成即时向量。 如果需要,可以使用选择器和标签(一组键值对)过滤这些时间序列,例如

node_filesystem_avail_bytes{fstype="ext4"}

在过滤时,您可以匹配“完全相等”(=)、“不相等”(!=)、“正则匹配”(=~) 和“不正则匹配”(!~)。 以下示例说明了这一点

要过滤 node_filesystem_avail_bytes 以同时显示 ext4 和 XFS 文件系统

node_filesystem_avail_bytes{fstype=~"ext4|xfs"}

排除匹配

node_filesystem_avail_bytes{fstype!="xfs"}

您还可以使用方括号从当前时间取回一系列样本。 您可以使用 s 表示秒,m 表示分钟,h 表示小时,d 表示天,w 表示周,y 表示年。 使用时间范围时,返回的向量将是范围向量。

例如,以下命令生成从五分钟到现在的样本

node_memory_MemAvailable_bytes[5m]

Prometheus 还包括允许高级查询的函数,例如

100 * (1 - avg by(instance)(irate(node_cpu_seconds_total{job='webservers',mode='idle'}[5m])))

请注意如何使用标签来过滤作业和模式。 指标 node_cpu_seconds_total 返回一个计数器,并且 irate() 函数基于范围间隔的最后两个数据点计算每秒变化率(意味着该范围可以小于五分钟)。 要计算总 CPU 使用率,可以使用 node_cpu_seconds_total 指标的空闲模式。 处理器的空闲百分比与繁忙的处理器相反,因此 irate 值从 1 中减去。要将其转换为百分比,请将其乘以 100。

CPU usage graph

了解更多

Prometheus 是一个功能强大、可扩展、轻量级且易于使用和部署的监控工具,对于每个系统管理员和开发人员来说都是必不可少的。 由于这些和其他原因,许多公司正在实施 Prometheus 作为其基础设施的一部分。

要了解更多关于 Prometheus 及其功能的信息,我推荐以下资源

标签
User profile image.
Michael Zamot 是一位开源爱好者,他的热情始于 2004 年,当时他发现了 Linux。 从那时起,他一直在处理各种开源项目,包括 Linux、OpenStack、OpenShift/Kubernetes 等等,并通过教学、举办研讨会和提供技术支持和指导来参与社区活动。

评论已关闭。

Creative Commons License本作品采用知识共享署名 - 相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.