Prometheus结合VictoriaMetrics:更高效、稳定的多集群监控方案

云掣YunChe1年前技术文章3409
在Prometheus的架构中,其核心组件包括Prometheus Server、Exporters、Alertmanager等,它采用基于拉的模型收集指标数据,并存储在本地TSDB中,支持通过PromQL查询语言进行数据查询或聚合。作为开源监控系统,Prometheus因其灵活的数据采集、存储、查询和告警功能,在云原生环境中得到了广泛的应用。然而,随着监控规模的不断扩大,Prometheus在数据保留时间、系统稳定性和扩展性等方面面临困境。


VictoriaMetrics作为Prometheus的长期存储解决方案,其架构主要包括vmstorage、vminsert、vmselect等组件,通过一致性hash和副本机制保证数据的可用性和一致性,并采用无共享架构提高集群的可用性。其性能、性价比和易扩展性,可以成为大规模监控任务的强有力替代方案,使用VictoriaMertrics统一维护管理告警,能有效减轻日常维护任务的负担。
因此,在多集群监控的场景中,我们可以将Prometheus和VictoriaMetrics结合,为多集群监控提供有效的解决方案。


 Prometheus集群管理的痛点


数据储存能力缺失
Prometheus仅存指标数据,而监控往往需要采集多样的结构化、半结构化甚至无结构化的数据,这意味着在构建监控方案时,Prometheus只能提供部分存储能力。
数据储存时间短暂
监控系统往往需要考虑数据存留的时间,且在不同场景下存留时间会出现不同的需求,Prometheus设计时并没有针对这些需求做特殊的考虑和设计。
告警操作流程复杂
在管理多个Kubernetes集群时,需要为每个集群单独配置/维护告警,显得尤为繁琐。


 建设方案

方案简介

为了实现将Prometheus和VictoriaMetrics结合的方案,并且尽量减少对集群资源的占用,我们将架构做如下优化:

  • 集群中仅部署Promethues及Exporters,并且尽量减少需要在集群中部署的组件。
  • 通过Promethues的remote_write功能,将监控数据统一写入到VictoriaMetrics。
  • 使用vmalert配置告警,并且发送到alertmanager进行告警推送。


架构图如下所示 ⬇️ :
图片


  建设内容


 Prometheus与VictoriaMetrics的集群部署
部署前准备:


  • 系统环境配置:确保系统满足Prometheus和VictoriaMetrics的运行要求。

  • 网络规划:合理规划网络拓扑,确保各组件间通信顺畅。

  • 资源分配:根据监控规模和数据量,合理分配CPU、内存和存储资源。


Prometheus配置重点:


  • remote_write配置:在Prometheus配置文件中添加remote_write配置,指定VictoriaMetrics集群的地址和认证信息,使Prometheus能够将数据远程写入VictoriaMetrics集群。

  • 服务发现:使用Prometheus的服务发现机制自动发现监控目标。


VictoriaMetrics集群部署:


  • 组件部署:按照官方文档或最佳实践,部署vmstorage、vminsert、vmselect等组件,并配置相应的副本数和资源限制。

  • 配置优化:根据业务需求和数据量,调整组件的配置参数,如复制因子、数据块大小等,以优化存储效率和查询性能。

 Prometheus部署


这里我们采用helm的方式来部署prometheus,具体使用的chart包为kube-prometheus-stack。
添加Helm仓库并获取values文件:




# 添加Helm仓库helm repo add prometheus-community https://prometheus-community.github.io/helm-charts# 获取values文件helm show values prometheus-community/kube-prometheus-stack  > kube-prometheus-stack-values.yaml
修改values文件:
这里不建议开启grafana组件和alertmanager组件,相关组件将会配置到监控集群中以节省资源并统一进行管理,如有需求也可以根据需求进行变化。











# 关闭service Monitor选择器serviceMonitorSelectorNilUsesHelmValues: false# 关闭pod Monitor选择器podMonitorSelectorNilUsesHelmValues: false# 添加remotewrite配置# 这里domain为VictoriaMetrics的地址remoteWrite:- url: http://domain.com/api/v1/write# 为集群采集到的数据添加标识externalLabels:datacluster: clustername
其他选项根据自己的需求进行调整即可。


  • service monitor选择器和pod monitor选择器可以不关闭,关闭后Prometheus会识别集群内所有的servermonitor和podmonitor。如果不关闭则servermonitor和podmonitor需要带有特定标签才会被识别。

  • externalLabels是为了在数据采集到VictoriaMetrics后区分监控数据是从那个集群发送的,具体的key: values可自行选择。配置externalLabels所有的监控数据都会带上配置的label。

 VictoriaMetrics部署


这里我们采用helm的方式来部署VictoriaMetrics ,具体使用的chart包为victoria-metrics-single。
添加Helm仓库并获取values文件:





# 添加Helm仓库helm repo add vm https://victoriametrics.github.io/helm-charts/
# 获取values文件helm show values vm/victoria-metrics-single  > victoria-metrics-single-values.yaml
修改values文件:











# 配置存储storageClass:"local-path"size: 50Gi# ingress配置ingress:enabled: trueannotations: {}hosts:- name: vmselect.cefso.onlinepath: /port: http
查看数据:
配置完成后即可在VictoriaMetrics查看prometheus监控数据。
图片

查看监控数据相关的label即可发现,数据上包含设置的externalLabels。

图片


 VictoriaMetricsAlert部署


获取values文件:


# 获取values文件helm show values vm/victoria-metrics-alert  > victoria-metrics-alert-values.yaml
修改values文件(添加告警规则):































# victoria metrics地址datasource:url:"http://vmselect.cefso.online"
# alertmanger地址notifier:alertmanager:url:"http://alertmanager.cefso.online"
#配置ingressingress:enabled: truehosts:- name: vmalert.cefso.onlinepath: /port: http#配置告警规则configMap:""config:alerts:groups:- name: k3s节点状态rules:- alert: k3s节点状态expr: up{datacluster="k3s",job="node-exporter"}<= 0for: 1mlabels:status: warningannotations:summary:"k3s节点状态异常"description:"异常节点{{$labels.instance }}"
查看告警规则:
部署完成后即可登录到vmalert查看相关告警规则,这里需要注意当配置告警规则的时候,可以通过externalLabels来实现不同集群配置不同的告警规则。如果一个告警规则需要在多个集群内同时生效,修改告警规则中的externalLabels匹配范围即可。后续需要增加告警规则,只需要更新 victoria-metrics-alert-values.yaml,并且更新victoria-metrics-alert即可。

图片

图片


 

知识拓展



 优化建议


 Prometheus与VictoriaMetrics数据保留时间调整
由于期望数据由VictoriaMetrics进行保存而不是Prometheus(VictoriaMetrics的数据压缩可以达到10倍以上的压缩率,大大节省存储空间,同时Prometheus官方也不建议使用Promethues自身TSDB作为数据的长期存储),所以Promtheus的数据保留时间可以不进行调整,而VictoriaMetrics的数据保留时间可以根据需求进行调整。



# 修改victoria-metrics-single-values.yaml文件中相关字段# -- Data retention period in monthretentionPeriod: 1
 在Victoria Metrics Alert配置告警
使用Victoria Metrics Alert统一管理告警,避免由于集群数量增加而导致告警难以维护。同时需要合理规划Prometheus的externalLabels 避免后续由于externalLabels 规划不合理导致的监控数据难以维护。










- name: k3s节点状态rules:- alert: k3s节点状态expr: up{datacluster="k3s",job="node-exporter"}<= 0for: 1mlabels:status: warningannotations:summary:"k3s节点状态异常"description:"异常节点{{$labels.instance }}"


  多集群监控实战


监控目标定义


  • 明确需要监控的多集群环境,包括Kubernetes集群、Docker容器、物理机等。
  • 根据监控目标选择合适的Exporters进行数据采集。


数据采集


  • Prometheus通过配置的Exporters采集监控目标的指标数据。
  • 数据采集完成后,Prometheus将数据通过remote_write接口远程写入VictoriaMetrics集群。


数据存储与查询


  • VictoriaMetrics集群接收Prometheus写入的数据,并将其存储在vmstorage节点中(上面示例中采用单节点部署,所以没有vmstorage节点,生产环境和大规模集群可以使用多节点部署,提高可靠性)。
  • 用户通过vmselect节点使用PromQL或MetricsQL查询语言查询监控数据,实现数据的实时分析和可视化展示。


告警与通知


  • 使用vmalert组件配置告警规则,基于PromQL/MetricsQL表达式监控指标状态。
  • 当指标状态触发告警规则时,vmalert将告警信息发送给Alertmanager进行处理和通知。
  • Alertmanager根据配置的通知渠道(如邮件、Slack等)发送告警通知给相关人员。

  性能优化与故障排查


性能优化


  • 资源分配:根据监控数据量和查询负载动态调整组件的资源分配,确保系统稳定运行。
  • 数据压缩与合并:利用VictoriaMetrics的数据压缩和后台合并机制减少存储空间占用和提高查询效率。
  • 查询优化:通过合理使用PromQL/MetricsQL查询语言的特性和技巧优化查询性能。


故障排查


  • 监控自身健康:通过VictoriaMetrics的内置监控功能监控集群的健康状态及时发现潜在问题。
  • 日志与诊断:利用组件的日志文件进行问题诊断快速定位并解决故障。
  • 数据一致性检查:定期检查数据一致性确保监控数据的准确性和可靠性。



 总结
Prometheus结合VictoriaMetrics的多集群监控方案解决Prometheus在数据保留、系统稳定性和扩展性等方面的问题:通过Prometheus和VictoriaMetrics的结合使用,合理分配资源,有效地提升了数据保留时间,减少数据存储空间占用,大大提高了查询效率;此外,也增强了数据监控系统的稳定性,优化了查询性能,实现更加高效可靠的多集群监控方案。



相关文章

MySQL运维实战之ProxySQL(9.8)SQL镜像

使用proxysql的镜像(mirror)功能,可以将SQL发送到一个额外的后端实例执行。还可以将发送到镜像的SQL进行改写,以测试修改后的SQL是否能正常执行。通过mirror_flagOut字段,...

使用Sqoop将数据从Hive导入MySQL(一)

使用Sqoop将数据从Hive导入MySQL(一)

使用Sqoop将数据从Hive导入MySQL首先查看csv数据类型创建类似的hive表并导入数据CREATE TABLE data (    province STRING,    code INT,...

数据湖Iceberg

数据湖Iceberg

1、概述         Iceberg 是一个面向海量数据分析场景的开放表格式(Table Format)。表格式(Table  Format)可以理解为元数据以及数据文件的一种组织方式,处于计算框...

配置ranger后hive注册永久UDF

配置ranger后hive注册永久UDF

背景:由于有些场景在启用Ranger情况下,客户在分配权限时候对高权限有特别要求,尽可能给用户设置低权限,无法在ranger中设置用户为 is Role admin权限(hive管理员权限)操作流程:...

日志聚合工具loki

1、loki是什么Loki是一个水平可扩展,高可用性,多租户的日志聚合系统,受到Prometheus的启发。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签。...

xx客户大数据相关问题答疑

xx客户大数据相关问题答疑

1、官方发布的补丁是否可以在CDH5.X上patch?如果是cdh的包,需要在cdh官方给出相关补丁包,然后我们可以进行补丁操作。如果是开源的包,是无法进行补丁操作的,因为cdh会对开源有些细节点的适...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。