Prometheus是目前应用最广泛的监控数据收集和查询系统,底层专门实现了一个时序数据库(TSDB)来保存数据,Prometheus主要用于监控主机、应用服务的状态数据。
相比其它监控系统,Prometheus是Go语言开发的,轻巧高效,部署也非常简单容易。Prometheus最大的有点就是其生态和扩展性,大量开发中常用的服务组件、中间件都对Prometheus积极的进行集成。
Server:Server
是Prometheus的核心组件,它支持集群部署,负责监控数据的收集、存储和PromQL查询。Server
内置了一个图形化界面Express Browser UI
,也支持与Grafana等集成。
Exporter:Exporter
负责具体的数据采集,通常部署在需要数据采集的主机等处,Exporter
以HTTP服务的形式暴露给Server
。Prometheus官方提供了很多好用的Exporter
,但Prometheus最强大的就是其扩展能力,很多其它应用和中间件都提供了自己实现的Exporter
,我们也很容易定义自己的Exporter
。
PromQL:PromQL
是Prometheus自定义的一种查询语言,用于筛选、统计保存在时序数据库中的数据。
Alert Manager:Prometheus支持以PromQL
方式定义告警规则,Alert Manager
可以和各种软件集成实现告警通知。
Push Gateway:Exporter
暴露的HTTP服务可能不适合直接被Prometheus访问,此时可以使用Push Gateway
网关组件进行中转。
除此之外,Prometheus经常和Grafana结合使用作为监控大屏,Grafana内置了对Prometheus的良好支持,很容易配置。
这里我们简单演示一个例子,部署Server
和官方提供的Node Exporter
组件,并使用PromQL查询采集到的监控数据。
我们可以在官网中找到Prometheus Server
的下载链接,我们下载对应版本即可:
https://prometheus.io/download/
其中我们一般主要用到Prometheus的可执行文件,以及prometheus.yml
配置文件。默认情况下,Prometheus的时序数据会存储在同一目录下的data
文件夹。
启动Prometheus Server
:
./prometheus
默认情况下,Prometheus会在9090
端口提供一个Web页面,供我们查看其中的数据、执行PromQL等操作。
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就开始正常采集数据了。
在Prometheus的UI界面中,提供了Table
和Graph
两个视图,其实结合时序数据的结构,我们可以很容易理解这种展现方式。
这里我们可以输入命令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会在后续章节详细介绍。