Prometheus 接收器

Prometheus接收器

此接收器连接器可用于通过Prometheus的远程写入接口,将数据写入与Prometheus兼容的存储中。

与Prometheus兼容的后端必须支持远程写入1.0标准API,并且远程写入端点必须已启用。

此连接器并非用于将Flink内部指标发送到Prometheus。若要发布Flink指标以监控Flink集群的健康状况和运行情况,应使用指标报告器。

要使用该连接器,请在项目中添加以下Maven依赖项:

<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-connector-prometheus</artifactId>
    <version>1.0.0-1.20</version>
</dependency>

用法

Prometheus接收器提供了一个构建器类,用于构建PrometheusSink实例。以下代码片段展示了如何使用基本配置和可选的请求签名器构建PrometheusSink

PrometheusSink sink = PrometheusSink.builder()
        .setPrometheusRemoteWriteUrl(prometheusRemoteWriteUrl)
        .setRequestSigner(new AmazonManagedPrometheusWriteRequestSigner(prometheusRemoteWriteUrl, prometheusRegion)) // 可选
        .build();

唯一必需的配置是prometheusRemoteWriteUrl。其他所有配置都是可选的。

如果接收器的并行度大于1,则需要使用PrometheusTimeSeriesLabelsAndMetricNameKeySelector键选择器对流进行键控,以确保同一时间序列的所有样本都在同一分区中,且顺序不会丢失。更多详细信息,请参阅“接收器并行度和键控流”。

输入数据对象

接收器期望以PrometheusTimeSeries记录作为输入。在将输入数据发送到接收器之前,必须使用mapflatMap操作符将其转换为PrometheusTimeSeries

PrometheusTimeSeries实例是不可变的,不能重复使用。可以使用构建器来创建并填充实例。

一个PrometheusTimeSeries在发送到远程写入接口时代表单个时间序列记录。每个时间序列记录可能包含多个样本。

在Prometheus的语境中,“时间序列”这个术语有多重含义。它既指具有唯一一组标签的一系列样本(即底层时间序列数据库中的时间序列),也指发送到远程写入接口的记录。一个PrometheusTimeSeries实例代表发送到该接口的一条记录。

这两个概念是相关的,因为具有相同标签集的时间序列“记录”会被发送到同一个“数据库时间序列”中。

每个PrometheusTimeSeries记录包含:

  • 一个metricName:一个字符串,会被转换为__name__标签的值。
  • 零个或多个Label条目。每个标签都有一个key和一个value,均为String类型。标签代表样本的额外维度。不允许有重复的标签键。
  • 一个或多个Sample。每个样本都有一个valuedouble类型)代表测量值,以及一个timestamplong类型)代表测量时间,以从纪元开始的毫秒数表示。同一条记录中不允许有重复的时间戳。

以下伪代码表示PrometheusTimeSeries记录的结构:

PrometheusTimeSeries
  + --> metricName <String>
  + --> Label [0..*]
            + name <String>
            + value <String>
  + --> Sample [1..*]
            + timestamp <long>
            + value <double>   

标签集和metricName是数据库时间序列的唯一标识符。所有标签和metricName的组合也是在Flink应用程序内部和上游对数据进行分区时应使用的键,以确保每个时间序列的顺序得以保留。

填充Prometheus时间序列

PrometheusTimeSeries提供了一个构建器接口。

PrometheusTimeSeries inputRecord =
        PrometheusTimeSeries.builder()
                .withMetricName(metricName)
                .addLabel("DeviceID", instanceId)
                .addLabel("RoomID", roomId)
                .addSample(measurement1, time1)
                .addSample(measurement2, time2)
                .build();

每个PrometheusTimeSeries实例可以包含多个样本。为每个样本调用.addSample(...)方法。添加样本的顺序会被保留。每条记录中的最大样本数受maxBatchSizeInSamples配置的限制。

将多个样本聚合到单个PrometheusTimeSeries记录中可能会提高写入性能。

Prometheus远程写入约束

Prometheus对数据格式和顺序施加了严格的约束。任何包含违反这些约束的记录的写入请求都会被拒绝。

有关这些约束的详细信息,请参阅远程写入规范。

在实际应用中,将数据写入与Prometheus兼容的后端时的行为取决于Prometheus的实现和配置。在某些情况下,这些约束会放宽,违反远程写入规范的写入操作可能会被接受。

因此,此连接器不会直接强制执行任何数据约束。用户有责任将不违反Prometheus实际约束的数据发送到接收器。更多详细信息,请参阅“用户职责”。

顺序约束

远程写入规范要求满足多个顺序约束:

  • PrometheusTimeSeries记录中的标签必须按key的字典顺序排列。
  • PrometheusTimeSeries记录中的样本必须按timestamp顺序排列,从旧到新。
  • 属于同一时间序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值