Prometheus简介

Prometheus是目前应用最广泛的监控数据收集和查询系统,底层专门实现了一个时序数据库(TSDB)来保存数据,Prometheus主要用于监控主机、应用服务的状态数据。

相比其它监控系统,Prometheus是Go语言开发的,轻巧高效,部署也非常简单容易。Prometheus最大的有点就是其生态和扩展性,大量开发中常用的服务组件、中间件都对Prometheus积极的进行集成。

官方网站:https://prometheus.io/

核心组件

ServerServer是Prometheus的核心组件,它支持集群部署,负责监控数据的收集、存储和PromQL查询。Server内置了一个图形化界面Express Browser UI,也支持与Grafana等集成。

ExporterExporter负责具体的数据采集,通常部署在需要数据采集的主机等处,Exporter以HTTP服务的形式暴露给Server。Prometheus官方提供了很多好用的Exporter,但Prometheus最强大的就是其扩展能力,很多其它应用和中间件都提供了自己实现的Exporter,我们也很容易定义自己的Exporter

PromQLPromQL是Prometheus自定义的一种查询语言,用于筛选、统计保存在时序数据库中的数据。

Alert Manager:Prometheus支持以PromQL方式定义告警规则,Alert Manager可以和各种软件集成实现告警通知。

Push GatewayExporter暴露的HTTP服务可能不适合直接被Prometheus访问,此时可以使用Push Gateway网关组件进行中转。

除此之外,Prometheus经常和Grafana结合使用作为监控大屏,Grafana内置了对Prometheus的良好支持,很容易配置。

环境搭建

这里我们简单演示一个例子,部署Server和官方提供的Node Exporter组件,并使用PromQL查询采集到的监控数据。

Server

我们可以在官网中找到Prometheus Server的下载链接,我们下载对应版本即可:

https://prometheus.io/download/

其中我们一般主要用到Prometheus的可执行文件,以及prometheus.yml配置文件。默认情况下,Prometheus的时序数据会存储在同一目录下的data文件夹。

启动Prometheus Server

./prometheus

默认情况下,Prometheus会在9090端口提供一个Web页面,供我们查看其中的数据、执行PromQL等操作。

Node Exporter

Node Exporter的Prometheus官方提供的一个主机监控采集器,支持Linux系统,下载地址同上,压缩包中只有一个可执行文件,我们可以直接执行:

./node_exporter

Node Exporter默认会在9100端口提供HTTP服务,Prometheus Server也会通过该端口收集数据,我们这里可以先用浏览器访问查看。

此时虽然Node Exporter已经启动,但我们的Prometheus Server还不知道去哪里采集数据,我们这里可以用配置文件的方式指定:

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

配置文件中,第一个job_name: "prometheus"Prometheus Server本身,我们不需要更改;我们这里添加了配置job_name: "node",其中指定了采集点的主机和端口。配置完成后,需要重启Prometheus服务,此时我们的Prometheus就开始正常采集数据了。

使用PromQL查询监控数据实例

在Prometheus的UI界面中,提供了TableGraph两个视图,其实结合时序数据的结构,我们可以很容易理解这种展现方式。

这里我们可以输入命令up,该命令能够查询所有Export的状态:

其中,1代表状态正常。

输入node_memory_MemFree_bytes,我们可以查看主机当前的内存占用信息:

其实我们可以在Node Exporter的HTTP服务响应中查看到都有哪些信息可以采集,Node Exporter甚至写了相关注释,例如node_memory_MemFree_bytes对应字段如下:

# HELP node_memory_MemFree_bytes Memory information field MemFree_bytes.
# TYPE node_memory_MemFree_bytes gauge
node_memory_MemFree_bytes 1.3162381312e+10

当然PromQL不仅仅是用来查看数据,还支持很多筛选、统计功能,有关PromQL会在后续章节详细介绍。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap