Prometheus入门教程

Prometheus入门 | Prometheus

Prometheus是一个系统监控和告警系统。它由SoundCloud在2012年开源,并且是继Kubernetes之后第二个加入并毕业的云原生计算基金会项目。Prometheus将所有指标数据存储为时间序列,即指标信息与记录它的时间戳一起存储,还可以存储可选的键值对标签。

什么是指标,为什么它很重要?

用外行的话来说,指标是一种测量标准。我们想要测量的内容取决于不同的应用程序。对于一个Web服务器来说,它可以是请求时间,对于数据库来说,它可以是CPU使用率或活动连接数等。

指标在理解你的应用程序为何以某种方式工作方面扮演着重要角色。如果你运行一个Web应用程序,有人告诉你应用程序很慢,你需要一些信息来找出你的应用程序发生了什么。例如,当请求数量高时,应用程序可能会变慢。如果你有请求计数指标,你可以发现原因并增加服务器数量以处理重负载。每当你为应用程序定义指标时,你必须戴上侦探帽并问这个问题:
如果应用程序出现任何问题,哪些信息对我来说是重要的,以便调试?

Prometheus的基本组件包括:

  • Prometheus服务器(抓取并存储指标数据的服务器)。

  • 要抓取的目标,例如一个暴露其指标的仪表化应用程序,或者一个暴露其他应用程序指标的导出器。

  • Alertmanager根据预设规则触发告警。

(注:除了这些,Prometheus还有push_gateway,这里不涉及)。

让我们以一个Web服务器为例,我们想要提取一个特定的指标,比如Web服务器处理的API调用数量。因此我们使用Prometheus客户端库添加了一些仪表代码并暴露了指标信息。现在我们的Web服务器暴露了它的指标,我们可以配置Prometheus来抓取它。现在Prometheus配置为从Web服务器抓取指标,Web服务器在xyz IP地址端口7500上监听,在特定的时间间隔内,比如说,每分钟一次。

在11:00:00时我将服务器公开供消费,应用程序计算请求计数并暴露它,Prometheus同时抓取计数指标并将值存储为0。

到11:01:00时,处理了一个请求。服务器中的仪表逻辑将计数增加到1。当Prometheus抓取指标时,计数的值现在是1。

到11:02:00时,又处理了两个请求,请求计数现在是1+2=3。类似地,指标被抓取并存储。

用户可以控制Prometheus抓取指标的频率。

(注:此表仅为理解目的的表示。Prometheus不以这种确切格式存储值)

Prometheus还有一个API,允许查询通过抓取存储的指标。这个API用于查询指标,在其上创建仪表板/图表等。PromQL用于查询这些指标。

一个简单的基于请求计数指标创建的折线图看起来像这样:

人们可以抓取多个有用的指标来理解应用程序中发生了什么,并在它们上面创建多个图表。将图表分组到仪表板中,并使用它来获得应用程序的概览。

让我们开始实际操作并设置Prometheus。Prometheus是用Go语言编写的,你只需要为你的操作系统编译的二进制文件。从这里下载对应你操作系统的二进制文件,并将二进制文件添加到你的路径中。

Prometheus暴露它自己的指标,可以被它自己或其他Prometheus服务器消费。

现在我们已经安装了Prometheus,下一步是运行它。我们只需要二进制文件和一个配置文件。Prometheus使用yaml文件进行配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
```
global:
scrape_interval: 15s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ["localhost:9090"]
```

```

在上面的配置文件中,我们提到了
`scrape_interval`,即我们希望Prometheus抓取指标的频率。我们添加了
`scrape_configs`,它有一个名称和目标来抓取指标。Prometheus默认监听端口9090。所以将它添加到目标中。

```

prometheus --config.file=prometheus.yml

1
2
3
4
5
6
7
8
  
```

现在我们已经让Prometheus运行起来,并且每15秒抓取它自己的指标。Prometheus有标准的导出器可供导出指标。接下来我们将运行一个节点导出器,这是一个用于机器指标的导出器,并使用Prometheus抓取它。(下载节点指标导出器)。

在终端中运行节点导出器。

```

./node_exporter

1
2
3
4
5
6
7
8
  
```

![](/images/blog/1742927618198_image_4.png)

接下来,将节点导出器添加到抓取配置列表中:

```

global:
scrape_interval: 15s
scrape_configs:

  • job_name: prometheus
    static_configs:
    • targets: [“localhost:9090”]
  • job_name: node_exporter
    static_configs:
    • targets: [“localhost:9100”]
  

在这个教程中,我们讨论了什么是指标以及它们为什么重要,Prometheus的基本架构以及如何运行Prometheus。

江达小记