大规模集群下 Prometheus 监控架构实战经验分享

1 业务场景描述

在互联网金融业务发展过程中,我们需要对数千台主机、上万容器与微服务实例进行指标监控,并统计历史数据以支持 SLA 报表、告警与容量规划。传统监控系统面临以下挑战:

  • 实例动态扩缩容,IP 地址和端口不断变动。
  • 指标数据量暴增,Prometheus 单节点存储和查询性能瓶颈明显。
  • 高可用需求,对告警推送和报警规则执行有严格响应时效。
  • 历史指标留存周期长达 90 天,单机磁盘成本不可控。

基于上述场景,我们选型 Prometheus 作为度量与告警引擎,结合 Thanos 组件实现长时数据存储与查询叠加,打造高可用、可水平扩展的监控平台。

2 技术选型过程

  1. Prometheus:云原生时代事实标准,支持多种服务发现、告警规则、录制规则,生态成熟。
  2. Thanos:在 Prometheus 之上提供全球视图查询、对象存储长时存储、横向扩容与高可用。
  3. Alertmanager:灵活路由与抑制策略,集成短信、邮件、Webhook 推送。
  4. Pushgateway:支持短命 Job 指标上报,补充拉取模型在批量任务场景的不足。
  5. 服务发现:结合 Kubernetes API、Consul、文件SD、DNS-SD 满足多种环境。

与其他方案对比:

  • InfluxDB+Telegraf:写入吞吐高,但查询语言不标准、告警生态不足。
  • ELK+Metricbeat:日志型指标存储,性能与成本局限明显。

最终决定以 Prometheus+Thanos 为核心技术栈,兼容原生生态与社区方案。

3 实现方案详解

3.1 架构整体设计

+----------------------+      +-------------+      +-----------------+
|  Kubernetes / VM 集群 | <--> | Prometheus  | <--> | Thanos Sidecar  |
+----------------------+      +-------------+      +-----------------+|                      |v                      v+-----------------+      +-----------------+|   Thanos Store  | <--->|  对象存储(S3) |+-----------------+      +-----------------+|v+-----------------+|   Thanos Query  |+-----------------+|v+-----------------+|  Grafana / UI   |+-----------------+
  • Prometheus 多副本部署,Sidecar 与远程存储对接。
  • Thanos Store Gateway 通过对象存储块读取历史数据。
  • Thanos Query 聚合各 Prometheus Server 与 Store,提供统一查询接口。
  • Alertmanager 集群模式,配置多分组通知策略。

3.2 Prometheus 配置示例

global:scrape_interval: 15sevaluation_interval: 30srule_files:- '/etc/prometheus/rules/*.yml'scrape_configs:- job_name: 'kubernetes-pods'kubernetes_sd_configs:- role: podrelabel_configs:- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]regex: trueaction: keep- action: labelmapregex: __meta_kubernetes_pod_label_(.+)- job_name: 'node-exporter'kubernetes_sd_configs:- role: nodemetrics_path: /metricsrelabel_configs:- regex: (.+)action: labelmapreplacement: node_$1# Sidecar remote write
remote_write:- url: 'http://thanos-receive:10908/api/v1/receive'queue_config:max_samples_per_send: 10000batch_send_deadline: 5s

3.3 Thanos 组件部署

  • Sidecar:与 Prometheus 同一 Pod 部署,自动发现和上传 TSDB 块。
  • Store Gateway:读取对象存储中的块,实现长时存储查询。
  • Compactor:定期压缩历史数据,合并小块,提高查询效率。
  • Query:聚合 Prometheus 与 Store,实现全局视图。

示例 Helm Values(简化):

thanos:sidecar:enabled: truestoreGateways:- name: store-gateway-01objstoreConfig:type: S3config:bucket: prometheus-dataendpoint: s3.cn-north-4.myhuaweicloud.comcompactor:retentionResolutionRaw: 6hretentionResolution5m: 30dcompaction:downsample:resolutionLevels: [5m]query:replicas: 2

3.4 告警规则与 Alertmanager

示例告警规则 (/etc/prometheus/rules/alerts.yml)

groups:- name: node.rulesrules:- alert: NodeDiskAlmostFullexpr: node_filesystem_free_bytes / node_filesystem_size_bytes < 0.1for: 5mlabels:severity: warningannotations:summary: "{{ $labels.instance }} 磁盘使用率过高"description: "磁盘剩余少于10%,请及时清理或扩容。"

Alertmanager config

route:receiver: 'team-notify'group_wait: 30sgroup_interval: 5mrepeat_interval: 2h
receivers:- name: 'team-notify'wechat_configs:- to_user: 'devops'api_url: 'https://qyapi.weixin.qq.com/cgi-bin/message/send'

4 踩过的坑与解决方案

  1. 高基数(cardinality)爆炸

    • 问题:错误地将动态标签(如用户 ID、订单号)暴露给 Prometheus,导致 TSDB 索引暴涨。
    • 解决:通过 relabel_configs 丢弃非必需标签,使用 drop_labels 清洗。
    relabel_configs:- source_labels: [order_id]action: labeldrop
    
  2. 查询延迟与内存溢出

    • 问题:PromQL 聚合大范围时间窗口时,Prometheus 内存占用剧增。
    • 解决:
      • 使用 Thanos Query 限制下推参数;
      • 针对复杂报表提前录制录制规则(Recording Rules);
      • 合理设置 max_concurrent_queries
  3. 对象存储 IO 瓶颈

    • 问题:Compactor 与 Store Gateway 同时访问 S3,带宽耗尽。
    • 解决:
      • 引入缓存层,如 MinIO 网关;
      • 拆分 Compactor 时段,与高峰查询时段错峰执行;
      • 使用网络带宽 QoS 分流。
  4. Alertmanager 集群状态不一致

    • 问题:多副本间配置信息不同步,导致告警漏报。
    • 解决:统一配置存储(GitOps 管理),并使用 Consul 或 KV 存储做服务发现与配置同步。

5 总结与最佳实践

  • 统一指标规范:提前设计 Label 维度,避免高基数。
  • 录制规则优先:Apdex、率类指标预先计算,降低在线计算资源消耗。
  • 分层架构:将短期数据留存在本地 Prometheus,长时数据交给 Thanos 压缩与存储。
  • 异步告警:告警与主链路隔离,避免监控系统自身故障导致告警丢失。
  • 监控自检:Prometheus 自身指标也要纳入监控,如 prometheus_target_interval_length_seconds

完整项目结构示例:

prometheus-stack/
├─ prometheus/
│  ├─ config/
│  │  ├─ prometheus.yml
│  │  └─ rules/
│  │     └─ alerts.yml
│  └─ Dockerfile
├─ thanos/
│  ├─ compactor/
│  ├─ store-gateway/
│  └─ query/
└─ helm-values.yaml

通过上述设计与优化,我们在生产环境中实现了秒级发现、数小时内查询 TB 级别历史指标、子服务告警 15s 内送达的目标,为业务运维与容量规划提供了有力支撑。


本文结合真实生产案例,旨在帮助中大型团队快速上手并优化 Prometheus 监控架构。欢迎在评论区交流更多实战经验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/913995.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/913995.shtml
英文地址,请注明出处:http://en.pswp.cn/news/913995.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

主流消息队列技术总结和对比

消息队列&#xff08;Message Queue&#xff0c;简称 MQ&#xff09;作为构建分布式互联网应用的关键组件&#xff0c;松耦合的架构设计能显著提升系统的可用性与可扩展性。在分布式系统中扮演着至关重要的角色&#xff0c;主要承担着实现异步消息传递、应用解耦、流量削峰以及…

数据结构 顺序表(3)---顺序表的应用

在之间的两篇文章中&#xff0c;我们着重讲了顺序表及顺序表的实现。今天这篇文章我们将简单讲解关于顺序表的三个算法题。这三个题也都属于力扣上的经典例题。1.例题1:移除元素例题来源(力扣) : https://leetcode.cn/problems/remove-element/description/这是一道数组操作算法…

逆向入门(9)汇编篇-bound指令的学习

看程序的时候碰到这么一行没见过的代码&#xff0c;简单记录一下 00427AC8 |. 6215 3C7B4200 |bound edx,qword ptr ds:[0x427B3C]这里是用到了bound指令&#xff0c;这是 x86 汇编中的指令&#xff0c;用于检查数组索引是否在有效范围内。 指令解析 bound edx, qword ptr ds…

【web应用】若依框架中,使用Echarts导出报表为PDF文件

文章目录前言一、Echarts准备工作1、查看是否安装了Echarts2、Echarts导入script 中3、使用Echarts创建图表二、报表制作打印html2canvas和jsPDF准备工作1、安装html2canvas和jsPDF依赖包2、html2canvas和jsPDF引用到script中3、制作并打印报表三、导出结果前言 若依框架前端中…

优选算法 --(双指针算法 1~8)

引言&#xff1a;此专栏为记录算法学习&#xff0c;本专题作为算法学习的第一部分&#xff0c;优选算法专题共计100题&#xff0c;分为不同小模块进行&#xff0c;算法学习需坚持积累&#xff0c;时代不会辜负长期主义者&#xff0c;仅以此句&#xff0c;与君共勉。 讲解算法分…

XRDMatch代码复现与分析报告

XRDMatch代码复现与分析报告 1. 项目概述 XRDMatch是一个用于X射线衍射(XRD)数据匹配和分析的开源工具,由zhengwan-chem开发并托管在GitHub上。本项目旨在复现XRDMatch的核心功能,并对其实现进行详细分析。 X射线衍射是材料科学中用于确定晶体结构的重要技术,通过分析衍射…

SpringAI×Ollama:Java生态无缝集成本地大模型实践指南

摘要 随着大语言模型(LLM)的普及,数据隐私和技术栈统一性成为企业级AI应用的核心挑战。本文系统阐述如何通过SpringAI框架与Ollama本地化模型引擎的结合,构建安全高效的生成式AI应用。通过实战案例解析配置优化、流式响应、工具调用等关键技术,为Java开发者提供零Python依…

从采购申请到报废核销:如何用数字化缝合企业物资管理的“断点”?

在企业的日常运营中&#xff0c;物资管理是一项至关重要的工作。从采购申请到物资的入库、使用&#xff0c;再到最终的报废核销&#xff0c;这一系列流程就像一条长长的链条&#xff0c;环环相扣。然而&#xff0c;在传统管理模式下&#xff0c;这条链条上却存在着诸多“断点”…

AVL平衡二叉树

01. 初始AVL树 AVL树是最早发明的自平衡二叉搜索树。在AVL树中&#xff0c;任何节点的两个子树的高度差&#xff08;平衡因子&#xff09;最多为1&#xff0c;这使得AVL树能够保持较好的平衡性&#xff0c;从而保证查找、插入和删除操作的时间复杂度都是O(log n)。包含n个节点…

教育行业可以采用Html5全链路对视频进行加密?有什么优势?

文章目录前言一、什么是Html5加密&#xff1f;二、使用Html5对视频加密的好处三、如何采用Html5全链路对视频进行加密&#xff1f;四、教育行业采用Html5全链路视频加密有什么优势&#xff1f;总结前言 面对优质课程盗录传播的行业痛点&#xff0c;教育机构如何守护核心知识产…

Vue3 tailwindcss

1、安装tailwindcsspnpm i -D tailwindcss postcss autoprefixer # yarn add -D tailwindcss postcss autoprefixer # npm i -D tailwindcss postcss autoprefixer2、 创建TailwindCSS配置文件npx tailwindcss init -ptailwind.config.js/** type {import(tailwindcss).Config}…

提示工程:解锁大模型潜力的核心密码

以下是对Lilian Weng的提示工程权威指南&#xff08;原文链接&#xff09;的深度解析与博客化重构&#xff0c;融入最新行业实践&#xff1a; 提示工程&#xff1a;解锁大模型潜力的核心密码 ——从基础技巧到工业级解决方案全解析 一、重新定义人机交互范式 传统编程 vs 提示…

Python3邮件发送全指南:文本、HTML与附件

在 Python3 中&#xff0c;使用内置的 smtplib 库和 email 模块发送邮件是一个常见的需求。以下是更详细的实现指南&#xff0c;包含各种场景的解决方案和技术细节&#xff1a;一、发送纯文本邮件的完整实现准备工作&#xff1a;确保已开通 SMTP 服务&#xff08;各邮箱开启方式…

CSS和CSS3区别对比

CSS&#xff08;层叠样式表&#xff09;与CSS3&#xff08;CSS的第三个版本&#xff09;的区别主要体现在功能扩展、语法特性以及应用场景等方面。以下是两者的核心对比&#xff1a; 一、核心概念与版本关系CSS&#xff1a;是基础样式表语言&#xff0c;用于分离网页内容与样式…

JVM--监控和故障处理工具

一、命令行工具 1. jps (Java Process Status) 作用&#xff1a;列出当前系统中所有的 Java 进程 常用命令&#xff1a; jps -l # 显示进程ID和主类全名 jps -v # 显示JVM启动参数 输出示例&#xff1a; 1234 com.example.MainApp 5678 org.apache.catalina.startup.Bootstra…

推荐 7 个本周 yyds 的 GitHub 项目。

01.开源的 CRM 软件这是一个开源的客户关系管理&#xff08;CRM&#xff09;系统&#xff0c;现在又 32.5K 的 Star。为企业和团队提供比肩 Salesforce 等商业产品的功能&#xff0c;同时强调用户自主权、数据自由与高度可定制性。开源地址&#xff1a;https://github.com/twen…

linux网络编程之单reactor模型(一)

Reactor 是一种事件驱动的设计模式&#xff08;Event-Driven Pattern&#xff09;&#xff0c;主要用于处理高并发 I/O&#xff0c;特别适合网络服务器场景。它通过一个多路复用机制监听多个事件源&#xff08;如 socket 文件描述符&#xff09;&#xff0c;并在事件就绪时将事…

浏览器重绘与重排

深入解析浏览器渲染&#xff1a;重排(Reflow)与重绘(Repaint)的性能陷阱与优化策略作为一名前端开发者&#xff0c;你是否遇到过界面突然卡顿、滚动时页面抖动或输入框响应迟钝&#xff1f;这些常见性能问题背后&#xff0c;往往是重排与重绘在作祟。本文将深入剖析浏览器渲染机…

day049-初识Ansible与常用模块

文章目录0. 老男孩思想-人脉的本质1. Ansible1.1 密钥认证1.2 安装ansible1.3 添加ansible配置文件1.4 配置主机清单文件&#xff08;Inventory&#xff09;1.5 测试1.6 ansible的模块思想1.7 command模块1.8 需求&#xff1a;每台服务器的密码都不同&#xff0c;怎么批量执行业…

力扣网编程134题:加油站(双指针)

一. 简介 前面两篇文章使用暴力解法&#xff0c;或者贪心算法解决了力扣网的加油站问题&#xff0c;文章如下&#xff1a; 力扣网编程150题&#xff1a;加油站&#xff08;暴力解法&#xff09;-CSDN博客 力扣网编程150题&#xff1a;加油站&#xff08;贪心解法&#xff09…