除了其本地时间序列数据库之外,还可以将Prometheus配置为读取和写入远程存储。这旨在支持监视数据的长期存储。
远程读
配置后,Prometheus存储查询(例如,通过HTTP API)将发送到本地和远程存储,然后合并结果。
请注意,为了在面对远程存储问题时保持可靠性,警报和记录规则评估仅使用本地TSDB。
配置
您可以在Prometheus配置文件的remote_read
部分中配置远程存储读取路径。
最简单的是,您只需为远程存储指定读取的端点URL,再加上身份验证方法。您可以使用HTTP基本认证或承载令牌认证。
您可能需要使用read_recent
标志:设置为true时,将从远程存储和本地存储中回答所有查询。如果为false(默认值),则可以从本地存储完全回答的所有查询都不会发送到远程端点。
您可以指定一组required_matchers
(标签,值对)以将远程读取限制为查询的某些子集。如果例如您只将部分指标写入远程存储(请参见下文)。
对于更复杂的配置,还有用于请求超时,TLS配置和代理设置的选项。
您可以从多个远程端点读取内容,每个端点都有一个remote_read
部分。
远程写
配置后,Prometheus会将其抓取的样本转发到一个或多个远程存储。
远程写工作是通过“定序”将时间序列样本写入本地存储,然后将它们排队以写入远程存储。
队列实际上是一组动态管理的“分片”:任何特定时间序列(即唯一指标)的所有样本最终都将位于同一分片上。
队列会自动按比例增加或减少写入远程存储的分片数量,以跟上传入数据的速率。
这样一来,Prometheus便可以在不使用远程资源的情况下,仅使用必需的资源并且以最少的配置来管理远程存储。
配置
您可以在Prometheus配置文件的remote_write
部分中配置远程存储写路径。
与remote_read
一样,最简单的配置就是远程存储写入URL,再加上身份验证方法。您可以使用HTTP基本认证或承载令牌认证。
您可以使用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
之前制造出该大小的批次,则继续发送;后者很少在繁忙的普罗米修斯实例上发生; -
min_backoff
,max_backoff
,max_retries
:重试管理;注意在当前实现中未使用max_retries
-每个分片只会阻塞并重试发送“ forever”。
与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
动态队列希望更改为新的分片数量,但是重新分片已经在进行中。 -
Failed to flush all samples on shutdown
关闭动态队列时,Prometheus无法将所有样本刷新到远程存储-远程存储端点可能存在问题。
Metrics
远程存储子系统会导出大量指标,这些指标以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
: 发送样品批次到远程存储的持续时间(直方图)
有疑问加站长微信联系(非本文作者)