【Prometheus】克服弱点,实现对Prometheus数据的长期存储方法

Prometheus可以配置为进行远程存储的读取和写入操作,以支持监控数据的长期保存,并且可以和本地的时间序列数据库结合使用。

远程阅读

当发起请求时,Prometheus存储查询(通过HTTP API等方式)会同时发送到本地存储和远程存储,并将结果进行合并。

image.png

请记住,在评估报警和记录规则时,要确保维持远程存储的可靠性,只使用本地TSDB。

远程读取配置

远程存储的读取路径需要在Prometheus配置文件的remote_read部分进行配置。

最简单的方法是指定远程存储的读取终端点URL和授权方式。可以使用HTTP基本授权或承载令牌授权。

您可以使用read_recent标志。将其设置为true时,所有查询都会从本地存储中以及远程服务器响应。而当设置为false(默认值)时,可以完全从本地存储中响应的查询将不会发送到远程端点。

可以通过指定一系列的required_matchers(即标签-值对)来将远程读取限制在查询的子集上,并且例如在下述情况下只将指标的子集写入远程存储。

如果结构更复杂,还可以使用超时、TLS配置和代理设置选项,并通过每个选项具有一个remote_read部分来从多个远程端点读取。

远程写入

当构建完成后,Prometheus可以将其爬取的样本传输到一个或多个远程存储。

image.png

远程写入功能通过“捕捉”本地存储中的时序样本,并将其排入队列以进行远程存储的写入操作来实现。

队列是一个实际上在动态管理的“分片”集合。特定时间序列的所有样本(即独特的指标)都会被放置在同一个分片中。

队列会自动地根据输入数据的速率,调整要写入远程存储的分片数量,实现自动扩缩容。

通过这样做,Prometheus可以使用必要的资源,在最小的配置下管理远程存储。

远程写入的配置

远程存储的写入路径可在Prometheus配置文件的remote_write部分进行配置。

与 remote_read 相似,最简单的配置是使用远程存储的写入URL和认证方法,可以使用HTTP基本认证或Bearer令牌认证。

使用write_relabel_configs可以更改或限制要写入到远程存储的指标标签,一般用法是删除指标的某些部分。

在queue_config部分,您可以在一定程度上控制上述动态队列。通常情况下,您不需要进行任何更改,可以使用Prometheus的默认设置。

capacity:各シャードはそれ自体がキューであり、これはシャードがさらに追加を「ブロック」する前にキューに入れられたサンプルの数です。

min_shards、max_shards:動的キューが使用する最小および最大のシャード。

max_samples_per_send、batch_send_deadline:各シャードは、サンプルをmax_samples_per_sendのブロックにバッチ処理します。または、batch_send_deadlineの前にそのサイズのバッチを作成できない場合は、とにかく送信します。この後者は、ビジー状態のPrometheusインスタンスではめったに発生しません。

min_backoff、max_backoff、max_retries:管理を再試行します。現在の実装ではmax_retriesは使用されていないことに注意してください。各シャードはブロックし、送信を「永久に」再試行します。

就像remote_read一样,您还可以配置请求的超时、TLS配置和代理设置选项。

每个都可以有一个remote_write部分,以便将数据写入多个远程终端。

日志消息

有时候,日志中可能会显示来自远程存储子系统的消息。

    dropped sample for series that was not explicitly dropped via relabelling

由于重新标签和其他原因,远程写入通道上的系列现在没有标签。我们将放弃这个系列。

    Remote storage resharding from N to M

动态队列的大小导致了分片的数量的变化。为了适应接收样本数和发送远程存储的写入速度,它会增加或缩小分片的数量,以避免分片过多。

    Currently resharding, skipping

动态队列正试图将新的数值分片更改为re-sharding, 但重新分片已经在进行中。

    Failed to flush all samples on shutdown

当动态队列被关闭时,Prometheus无法将所有样本刷新到远程存储中。可能是由于远程存储终端存在问题。

度量

远程存储子系统导出了许多以prometheus_remote_storage_或prometheus_wal_watcher_为前缀的指标。以下是一些可能引起兴趣的选项。

prometheus_remote_storage_samples_in_total:

将样本输入到远程存储中,并将其与队列管理器(柜台)的样本输出进行比较。

prometheus_remote_storage_succeeded_samples_total:

成功发送到远程存储器(柜台)的样本总数。

prometheus_remote_storage_pending_samples:

在远程存储(仪表)发送的、在队列分片中挂起的样本数量。

prometheus_remote_storage_shards:

用于并行发送到远程存储(仪表)的分片数量。

prometheus_remote_storage_sent_batch_duration_seconds:

远程存储的样本批量传输调用时长(直方图)。

bannerAds