Prometheus入门 | Opensource.com


Prometheus是一个功能强大,可扩展,轻量级,易于使用和部署的监视工具,对于每个系统管理员和开发人员来说都是必不可少的。出于这些原因和其他原因,许多公司正在将Prometheus作为其基础设施的一部分。本文将学习安装和编写Prometheus普罗米修斯监控和警报系统的查询。
Prometheus是一个开源监控和警报系统,可直接从目标主机上运行的代理程序中删除指标,并将收集的样本集中存储在其服务器上。度量也可以使用像插件collectd_exporter进行推送, -尽管这不是Promethius的默认行为,它可能在某些环境中有用:比如主机在防火墙后或由安全策略禁止端口访问。
Prometheus是Cloud Native Computing Foundation的一个项目,它使用联合模型进行扩展,该模型使一个Prometheus服务器能够抓取另一个Prometheus服务器。这允许创建分层拓扑,其中中央系统或更高级别的Prometheus服务器可以抓取已从下级实例收集的聚合数据。
除Prometheus服务器外,其最常见的组件是Alertmanager及其exporters。
警报规则可以在Prometheus中创建,并配置为向Alertmanager发送自定义警报。然后,Alertmanager处理和处理这些警报,包括通过电子邮件或第三方服务(如PagerDuty)等不同机制发送通知。
Prometheus的exporters可以是库包,流程,设备或任何其他公开Prometheus将要删除的指标的东西。这些指标可在端点/指标处获得,这使得Prometheus可以直接抓取它们而无需代理。本文中的教程使用  node_exporter来公开目标主机的硬件和操作系统指标。exporters的输出是明文和高度可读的,这是Prometheus的优势之一。
此外,您可以将Grafana配置为使用Prometheus作为后端来提供数据可视化和仪表板功能。

理解Prometheus的配置文件
控制抓取时间间隔的粒度在配置文件中定义为scrape_interval参数,默认情况下设置为60秒。
需要为scrape_configs部分中的每个scrape作业设置目标。每个作业都有自己的名称和一组标签,可以帮助您过滤,分类并更轻松地识别目标。一项工作可以有很多目标。

安装Prometheus
在本教程中,为简单起见,我们将使用docker安装Prometheus服务器和node_exporter。Docker应该已经在您的系统上正确安装和配置。

在开始之前,在工作目录中创建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 of machine>:<port>”来更改它。

在要监视的计算机中,使用以下命令下载并运行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 of node exporter host>:9100 / metrics。将显示收集的所有指标; 这些是Prometheus将要采取的相同指标。

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

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

使用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指标的空闲模式。处理器的空闲百分比与繁忙的处理器相反,因此从1中减去irate值。要使其为百分比,请将其乘以100。