1、方案选型
prometheus常见的高可用方案有两种:
VictoriaMetrics
(VM) 相比 Thanos (灭霸) 。这里我选择了VictoriaMetrics ,因为它更加轻量,性能更好。
详细对比如下:
对比项 | VictoriaMetrics | Thanos |
---|---|---|
架构复杂度 | 轻量:单体架构,核心功能都封装在一个二进制文件中;资源消耗低 | 复杂:模块化架构,功能被拆分成多个组件 |
查询效率 | 高:直接对存储的数据进行查询,路径较短,延迟低,采用了高效的索引机制和预计算缓存,可以快速响应查询请求 | 低: 在进行全局查询时,需要聚合来自多个 Prometheus 实例的数据,这种分布式查询需要协调和汇总,增加了复杂性和延迟 |
选型: 综合考虑选择VictoriaMetrics 作为prometheus高可用方案
2、实现原理
VictoriaMetrics 可以从多个 Prometheus 实例接收数据,并根据配置进行去重,确保数据的一致性;
在使用 VictoriaMetrics 时,数据去重通常是在查询时进行的,而不是在写入时。VictoriaMetrics 支持通过配置标签的方式来实现数据去重,从而保证在从多个 Prometheus 实例收集数据时,查询结果不会出现重复数据。这种数据去重的配置方式类似于 Thanos 的去重机制。
数据去重的目的是处理多个 Prometheus 实例同时采集同一组指标数据的情况,防止在查询时出现重复的时间序列。通常,我们会为每个 Prometheus 实例添加一个唯一的标签(如 replica 标签),以区分来自不同实例的数据。然后,在查询时,VictoriaMetrics 可以忽略这些标签,从而实现去重
3、配置说明
例如,如果有两个 Prometheus 实例,分别命名为 prometheus-A 和 prometheus-B,您可以在每个实例的配置文件中这样设置:
global:
scrape_interval: 15s
external_labels:
replica: prometheus-A # 对于 Prometheus A 实例
------------------------------------------------
global:
scrape_interval: 15s
external_labels:
replica: prometheus-B # 对于 Prometheus B 实例
配置远程写入(两个节点都要配置)
remote_write:
- url: "http://victoriametrics:8428/api/v1/write"
queue_config:
max_samples_per_send: 10000
capacity: 25000
VictoriaMetrics配置查询去重
deduplication.label=replica
重启服务
vmalert配置告警:vmalert去对接alertmanager
./vmalert \
-rule=/path/to/rules.yml \
-datasource.url=http://victoriametrics:8428 \
-notifier.url=http://alertmanager:9093 \
-remoteWrite.url=http://victoriametrics:8428/api/v1/write