Prometheus直接写入

Prometheus作为Cloud Native Computing Fundation毕业的项目,在性能监控以及K8S性能监控领域有着非常广泛的应用。TDengine提供一个小工具Bailongma,只需在Prometheus做简单配置,无需任何代码,就可将Prometheus采集的数据直接写入TDengine,并按规则在TDengine自动创建库和相关表项。博文用Docker容器快速搭建一个Devops监控Demo即是采用bailongma将Prometheus和Telegraf的数据写入TDengine中的示例,可以参考。

从源代码编译blm_prometheus

用户需要从github下载Bailongma的源码,使用Golang语言编译器编译生成可执行文件。在开始编译前,需要准备好以下条件:

  • Linux操作系统的服务器
  • 安装好Golang, 1.10版本以上
  • 对应的TDengine版本。因为用到了TDengine的客户端动态链接库,因此需要安装好和服务端相同版本的TDengine程序;比如服务端版本是TDengine 2.0.0, 则在bailongma所在的linux服务器(可以与TDengine在同一台服务器,或者不同服务器)

Bailongma项目中有一个文件夹blm_prometheus,存放了prometheus的写入API程序。编译过程如下:

  1. cd blm_prometheus
  2. go build

一切正常的情况下,就会在对应的目录下生成一个blm_prometheus的可执行程序。

安装Prometheus

通过Prometheus的官网下载安装。下载地址

配置Prometheus

参考Prometheus的配置文档,在Prometheus的配置文件中的部分,增加以下配置

  • url: bailongma API服务提供的URL, 参考下面的blm_prometheus启动示例章节

启动Prometheus后,可以通过taos客户端查询确认数据是否成功写入。

启动blm_prometheus程序

blm_prometheus程序有以下选项,在启动blm_prometheus程序时可以通过设定这些选项来设定blm_prometheus的配置。

  1. --tdengine-name
  2. 如果TDengine安装在一台具备域名的服务器上,也可以通过配置TDengine的域名来访问TDengine。在K8S环境下,可以配置成TDengine所运行的service name
  3. --batch-size
  4. blm_prometheus会将收到的prometheus的数据拼装成TDengine的写入请求,这个参数控制一次发给TDengine的写入请求中携带的数据条数。
  5. --dbname
  6. 设置在TDengine中创建的数据库名称,blm_prometheus会自动在TDengine中创建一个以dbname为名称的数据库,缺省值是prometheus
  7. --dbuser
  8. 设置访问TDengine的用户名,缺省值是'root'
  9. --dbpassword
  10. 设置访问TDengine的密码,缺省值是'taosdata'
  11. --port
  12. blm_prometheusprometheus提供服务的端口号。

启动示例

通过以下命令启动一个blm_prometheus的API服务

  1. ./blm_prometheus -port 8088

假设blm_prometheus所在服务器的IP地址为”10.1.2.3”,则在prometheus的配置文件中部分增加url为

  1. remote_write:
  2. - url: "http://10.1.2.3:8088/receive"

查询prometheus写入数据

prometheus产生的数据格式如下:

  1. {
  2. Timestamp: 1576466279341,
  3. Value: 37.000000,
  4. apiserver_request_latencies_bucket {
  5. component="apiserver",
  6. instance="192.168.99.116:8443",
  7. job="kubernetes-apiservers",
  8. le="125000",
  9. resource="persistentvolumes", s
  10. cope="cluster",
  11. verb="LIST",
  12. version=“v1"
  13. }
  14. }

其中,apiserver_request_latencies_bucket为prometheus采集的时序数据的名称,后面{}中的为该时序数据的标签。blm_prometheus会以时序数据的名称在TDengine中自动创建一个超级表,并将{}中的标签转换成TDengine的tag值,Timestamp作为时间戳,value作为该时序数据的值。因此在TDengine的客户端中,可以通过以下指令查到这个数据是否成功写入。

  1. use prometheus;
  2. select * from apiserver_request_latencies_bucket;