Prometheus

注意
本文最后更新于 2024-01-19,文中内容可能已过时。

Prometheus

GitHub 仓库:GitHub - prometheus/prometheus: The Prometheus monitoring system and time series database.

官网:prometheus.io

系统架构图:

本质上,Prometheus 首先是一个指标的时序数据存储引擎,提供了灵活的查询语句,然后围绕这个数据库提供跟指标相关的功能,比如指标接入、监控报警、Web 页面展示等。

指标接入

指标接入方面,提供两种方式,服务发现(service discovery)或者 静态配置(static configuration),

静态配置很简单,Prometheus 提供了 scrape_configs 配置如何从 endpoint 抽取监控数据,通常只需要修改 static_configs 中的 targets 配置为 目标应用的 的 endpoint 地址即可。

更多配置信息请参考 Prometheus 配置文档

以 Prometheus 接入 TDengine 为例,修改scrape_configs配置如下即可接入 TDengine 的指标,Prometheus 会以给定的时间间隔从配置的目标收集指标。

参考TDengine 文档

1
2
3
4
5
6
7
8
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  - job_name: "taoskeeper"
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    static_configs:
      - targets: ["localhost:6043"]

优缺点

Prometheus 的优点是其实际已经为指标监控领域的标准,已经成为了默认的指标数据存储数据库,一个应用只要是提供指标监控功能,就一定会提供符合 Prometheus 格式要求的 endpoint 指标采集接口,这也就导致了 Prometheus 的适配面很广,市面上的应用都能向 Prometheus 提供指标数据。

但是 Prometheus 的体积很大,性能很差,跟一些后起之秀相比,在性能方面没有优势,比如跟Netdata 的性能对比,作为一个监控服务,本身就不应该占用太多的服务器性能。

而且 Netdata 支持从符合 Prometheus 格式要求的 endpoint 指标采集接口中收集数据,而且还提供了默认了一个默认的采集列表,以实现不需要手动配置就可以自动采集指标,如果你想采集的应用不在这个列表里,你可以手动添加进来。

参考博客:prometheus-endpoint

而且 Netdata 也可以将数据导出到 Prometheus 或者其他的时序库。

等等这些因素,都导致了现在的指标监控方案一般都是,netdata 采集数据,并导出到 prometheus 中,使用 prometheus 充当数据库缓存时序数据。使用 grafana 抓取 prometheus 中时序数据进行可视化。

0%