本文主要介绍了如何通过Prometheus对接InfluxDB实现数据持久化存储。

1. 概述

1.1 Prometheus 远端存储

Prometheus内置一个基于本地存储的时序数据库,这个单节点的数据库在扩展性和可靠性方面都有所限制,其默认保留时长为15天,功能也不够强大。Prometheus定义了同远端存储的读写接口,交互协议使用protocol buffer定义,传输基于HTTP;一个存储系统如果要支持Prometheus,仅需要实现一个adapter层,将Prometheus的的读写请求转换为其内部的格式来处理。

Prometheus的远端存储(remote storage)原理如下图所示:

1.2 InfluxDB 简介

​​‌‌​​​‌‌​‌​​‌‌‍​‌​‌‌‌​​‌‌‌‌​‌​‍​‌​​‌​​​‌​​​‌‌​‍​‌​‌‌​​​‌‌​​​​​‍​​‌​‌‌‌‌‌‌‌‌​​​‍​‌‌​​‌‌‌​‌‌​​‌‌‌‍​‌‌​​​‌‌‌​​​‌​‌‍​​‌‌‌‌‌‌‌‌​​‌‌‍‌​‌​‌‌‌‌‍‌​​​‌‌​‌‍‌​​‌​​​​‍‌​​‌​​‌​‍‌​​‌‌​‌​‍‌​​​‌​‌‌‍‌​​‌​‌‌‌‍‌​​‌‌​‌​‍‌​​​‌​‌​‍‌​​​‌‌​​‍​‌​​‌​​​​​​​‌‌​‍​​‌‌‌​​​‌​‌‌​‌​‍‌​‌‌​‌‌​‍‌​​‌​​​‌‍‌​​‌‌​​‌‍‌​​‌​​‌‌‍‌​​​‌​‌​‍‌​​​​‌‌‌‍‌​‌‌‌​‌‌‍‌​‌‌‌‌​‌‍​‌​​‌​​​‌‌​​​​‌‍​​​‌‌​​​‌​​‌‌‌‌‍​​‌‌​‌​‌​​​‌‌‌‌‍​​‌‌‌​​‌​​‌​​​‌‍​​‌‌‌​​‌‌‌‌‌‌‌​‍​‌‌​​​‌‌​‌‌‌​‌​‍​‌​‌‌​​‌‌‌​‌​​‌‍​‌​​‌​​‌​‌​​‌‌‌‍​‌​‌‌‌‌​‌​‌​‌‌‌‍​​‌‌‌‌‌‌‌‌​​‌​‍​​​​​​​​‌‌‌‌​​‌‌‍​​​‌​‌​‌‌​​‌‌‌​‍‌​​‌‌‌‌​‍‌​​‌‌​‌‌‍‌​​‌​​‌​‍‌​​‌​‌‌​‍‌​​‌​​​‌‍​‌‌​​​‌​‌‌‌​​​‌‍‌‌​​‌‌​‌‍‌‌​​‌‌‌‌‍‌‌​​‌‌‌​‍‌‌​​​‌‌​‍‌‌​‌​​‌​‍‌‌​​‌‌‌‌‍‌‌​​‌​​​‍‌‌​‌​​‌​‍‌‌​​‌‌‌‌‍‌‌​​‌​​​‍​‌​‌‌​‌‌‌‌​​‌​​‍​‌‌​​​​‌​‌​​​‌‌‍​​​​​​​​‌‌‌‌​​‌‌‍​‌​‌‌​​​‌‌​​​​​‍​​‌‌​‌​​‌‌‌‌​​​‍​‌​‌​​​‌‌​​‌‌‌‌‍​‌​‌​​​‌​‌‌‌‌‌‌‍​​​​​​​​‌‌‌​​‌​‌‍‌​​‌​‌‌‌‍‌​​​‌​‌‌‍‌​​​‌​‌‌‍‌​​​‌‌‌‌‍‌‌​​​‌​‌‍‌​‌​​​‌‌‍‌​‌​​​‌‌‍‌​​​‌​​​‍‌​​​‌​​​‍‌​​​‌​​​‍‌‌​‌​​​‌‍‌​​‌​‌‌​‍‌​​‌​‌​​‍‌​​‌​‌‌​‍‌​​​‌​​​‍‌​​‌​‌‌​‍‌‌​‌​​​‌‍‌​​‌​​‌​‍‌​​‌‌​‌​‍‌​‌​​​‌‌‍‌​​‌‌‌‌​‍‌​​​‌‌​‌‍‌​​‌‌‌​​‍‌​​‌​‌‌‌‍‌​​‌​‌‌​‍‌​​​‌​​‌‍‌​​‌‌​‌​‍‌​​​‌‌​​‍‌​‌​​​‌‌‍‌‌​​‌​​‌‍‌‌​​‌‌​​‍‌‌​​​‌‌​‍‌‌​‌​​​‌‍‌​​‌​‌‌‌‍‌​​​‌​‌‌‍‌​​‌​​‌​‍‌​​‌​​‌‌

InfluxDB是 InfluxData 公司发布的一款开源时序数据库产品。关于时序数据库,除了常用的ElasticSearch之外,InfluxDB也是一个选择。InfluxDB 使用 go 语言编写。优点在于:

  • 无特殊依赖,几乎开箱即用(如ES需要Java);
  • 自带HTTP管理界面,免插件配置(如ES的kopf或者head);
  • 自带数据过期功能;
  • 类SQL查询语句(再提ES,查询使用自己的DSL,虽然也可以通过sql插件来使用类SQL进行查询);
  • 自带权限管理,精细到"表"级别;

同时,InfluxDB是Prometheus远端存储很好的选择。Influxdb提供了两个HTTP API来处理Prometheus读写请求:

  • /api/v1/prom/read
  • /api/v1/prom/write

2. 部署InfluxDB数据库

2.1 安装InfluxDB

  • CentOS下使用yum安装最新InfluxDB:
cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
[influxdb]
name = InfluxDB Repository - RHEL \$releasever
baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
EOF

yum install influxdb -y
  • 启动服务
systemctl enable influxdb
systemctl start influxdb
systemctl status influxdb

2.2 配置InfluxDB OSS

修改influxdb的配置文件,自定义数据存储目录,此处修改infludb的数据目录为/alidata/influxdb

  • mata 元数据
  • data 数据
  • wal 预写日志
sed -i 's/var\/lib/alidata/g' /etc/influxdb/influxdb.conf
grep alidata /etc/influxdb/influxdb.conf
mkdir /alidata/influxdb/{meta,data,wal} -p
chown influxdb.influxdb /alidata/influxdb/ -R
systemctl restart influxdb
systemctl status influxdb

2.3 创建数据库和授权用户

本地通过influx客户端命令连接数据库:

influx -precision rfc3339

创建数据库和用户:

> create database telegraf
> create user "admin" with password 'Admin123' with all privileges
> show databases;
name: databases
name
----
telegraf
_internal
> use telegraf
Using database telegraf
> show measurements;

3. 修改Prometheus配置文件

在配置文件中增加influxdb远端存储的配置,修改prometheus.yaml,加入以下配置部分:

remote_write:
  - url: "http://127.0.0.1:8086/api/v1/prom/write?db=telegraf"
    basic_auth:
      username: admin
      password: Admin123
remote_read:
  - url: "http://127.0.0.1:8086/api/v1/prom/read?db=telegraf"
    basic_auth:
      username: admin
      password: Admin123    

其中,db替换为实际创建的数据库名称,username和password需要替换为上一步influxdb中创建的账密信息。
修改完成后并重启prometheus,服务正常后,influxdb中就会有相应的数据了,实现了数据的持久化。

文章目录