InfluxDB 现已原生支持 Prometheus 远程读取和写入

导航到

上个月我参加了在慕尼黑举办的年度 Prometheus 会议——PromCon。会议内容包括用户到实施者的各种演讲,主题从如何做和案例研究到 Prometheus 2.0 存储引擎的细节。我发表了关于 整合 InfluxDB 和 Prometheus 的演讲。演讲结束后,有多个人来找我,表示对 Prometheus 和 InfluxDB 之间更多整合感兴趣。这激励我们的团队投入更多精力,将原生 Prometheus 支持引入 InfluxDB。我兴奋地宣布,这一过程的第一个阶段现已完成:InfluxDB 1.4 的夜间构建现在已原生支持 Prometheus 远程读取和写入 API。我将在本文后面详细说明。

为什么支持 Prometheus,它们不是在做类似的事情吗?

我经常会遇到这个问题,所以让我来解答一下。Prometheus服务器专注于指标数据,旨在成为一个短暂的基于拉取的存储和监控系统。与此同时,InfluxDB专注于时序数据(指标和事件),旨在用作短暂的存储或永久数据的存储。这种区别很重要,对每个项目的适用用例有着深远的影响。如果您想保留数据或向数据库推送单个事件,InfluxDB是一个更合适的选择。对于短暂的基于拉取的数据,任一服务器都足够使用。

但Prometheus远不止服务器这么简单。我认为Prometheus是一套标准和项目的集合,服务器只是更大整体的一部分。从这个角度来看,我认为我们有多种方式可以与Prometheus生态系统合作,并做出有意义的贡献。

Prometheus作为标准指标格式

Prometheus开发了一种出色的标准展示格式客户端库,以及超过100个导出器,这些导出器以Prometheus格式公开指标。Prometheus中的服务发现代码也被其他项目使用,包括我们自己的Kapacitor。除此之外,Prometheus还有一个Alert Manager项目。我们认为这是一项高质量的工作,我们打算将Prometheus展示格式作为InfluxData生态系统中的第一公民来支持。

将Prometheus远程API添加到InfluxDB中

Prometheus支持远程读取和写入API,允许它在其他数据存储中存储抓取的数据。写入被转发到远程存储。对于读取,功能相当基本,它将Prometheus查询的开始和结束时间以及查询想要的标签匹配(Influx中的标签)推送到远程。所有这些数据都通过网络传输,Prometheus服务器执行计算,然后将结果返回给用户。

之前,为了将Prometheus与InfluxDB集成,您必须使用示例远程存储适配器。这种方法的缺点是它被标记为实验性示例,不适用于生产。这也意味着您将需要管理和维护另一个基础设施组件。最后,它还引入了不必要的序列化开销。

在劳动节周末,我决定将Prometheus读取和写入API的原生支持引入InfluxDB。实现方式与示例Prometheus实现略有不同。所有标签都被转换为标签,而指标名称被转换为一个类似于底层Prometheus实现的标签名称。一切都被写入一个测量值_,字段名为f64。基本上,我们正在忽略测量和字段,而是将所有内容放入标签中。这反映了我们在新数据模型和查询语言中的方向。

在短期内,这种模型可能在InfluxQL中操作起来有些笨拙,但它对从Prometheus远程读取方面拉回数据来说更加理想。并且随着新的“IFQL”语言,它将以与语言和引擎完美配合的结构存在。这项功能目前应被视为测试版。

要开始使用这项功能,您将需要使用夜间InfluxDB构建,并设置Prometheus配置中的远程部分。以下是一个配置示例

# Remote write configuration (for Graphite, OpenTSDB, or InfluxDB).
remote_write:
- url: "https://127.0.0.1:8086/api/v1/prom/write?u=paul&p=foo&db=prometheus"
# Remote read configuration (for InfluxDB only at the moment).
remote_read:
- url: "https://127.0.0.1:8086/api/v1/prom/read?u=paul&p=foo&db=prometheus"

从示例中您可以看到,新的端点是 /api/v1/prom/read 和 /api/v1/prom/write。您使用查询参数来传递写入数据的数据库以及可选的用户名和密码。将密码保留在配置文件中并不理想,因此最好更新 Prometheus 以使其能够从环境变量中读取这些信息。

一旦这项功能集成到我们的 InfluxDB 云服务中,我们的客户将能够使用我们的云产品作为其本地 Prometheus 服务器长期存储。对于我们的 InfluxDB 企业客户,他们将有一个集群化、高可用的长期数据存储来存储 Prometheus 数据。

我们将探讨其他方式,以便为开源 Prometheus 社区做出贡献,并努力将更多对 Prometheus 标准和 API 的支持添加到 Influx 堆栈中。PromCon 2017 是一场精彩的会议,我受到了启发,要推动我们的产品在这个新工具生态系统中的良好运行。