Prometheus 与 Grafana 深度技术研究报告 摘要 本报告旨在为读者提供关于 Prometheus 和 Grafana 这两大云原生监控核心工具的全面技术分析。作为现代可观测性技术栈的基石,Prometheus 负责指标的收集、存储和告警,而 Grafana 则专注于数据可视化和仪表盘展示。本报告将从架构原理、核心组件、高可用部署、安全加固、告警体系等多个维度进行深入探讨,并结合 Kubernetes 环境下的实际部署场景,为生产环境实施提供详尽的最佳实践指导。
第一章:引言与背景 1.1 云原生监控的演进 在现代微服务架构和容器化技术的推动下,传统的监控系统已经难以满足动态、弹性、分布式环境下的可观测性需求。Prometheus 作为云原生计算基金会(CNCF)的毕业项目,已经成为 Kubernetes 环境中监控的事实标准。Grafana 则以其强大的可视化能力和多数据源支持,成为展示监控数据的首选平台。
Prometheus 的设计理念深受 Borgmon 启发,采用拉取模式的指标采集方式,配合多维数据模型和强大的查询语言 PromQL,为监控带来了全新的范式。Grafana 则通过插件化架构,支持从 Prometheus、InfluxDB、Elasticsearch 等多种数据源获取数据,并将其转化为直观的仪表盘和告警 [[1]][[2]][[3]]。
1.2 研究范围与目标 本报告将覆盖以下核心研究领域:
Prometheus 技术深度分析 :包括数据模型、存储引擎、远程读写能力、查询优化
Grafana 架构与可视化能力 :组件交互、插件生态、多实例支持
高可用性与灾难恢复 :Kubernetes 环境下的部署策略、Thanos 集成、数据持久化
安全加固实践 :TLS 加密、认证授权、RBAC 策略、密钥管理
告警与通知体系 :规则设计、Alertmanager 配置、多渠道通知集成
第二章:Prometheus 核心架构与技术深度解析 2.1 架构总览 Prometheus 采用模块化的架构设计,主要包含以下核心组件:
Prometheus Server 是整个系统的核心,负责指标的抓取、存储和查询。它由三个主要部分组成:Retrieval 负责从目标拉取指标数据;TSDB(Time Series Database)负责时序数据的本地存储;HTTP Server 提供 PromQL 查询接口和 Web UI [[4]][[5]][[6]]。
Exporters 是指标的暴露者,将应用程序或系统的内部状态转换为 Prometheus 可以抓取的格式。常见的 Exporter 包括 Node Exporter(主机指标)、kube-state-metrics(Kubernetes 状态指标)、MySQL Exporter 等。
Pushgateway 用于支持短期任务或无法被直接抓取的服务推送指标,但需要注意,Pushgateway 可能成为单点故障和潜在的资源瓶颈 [[7]]。
Alertmanager 处理来自 Prometheus Server 的告警,负责去重、分组、路由和通知发送。它支持多种通知渠道,包括邮件、Slack、PagerDuty 等 [[8]][[9]][[10]]。
2.2 数据模型与时序数据库 2.2.1 多维数据模型 Prometheus 采用多维数据模型,每个时序数据由指标名称和一组键值对(称为标签)唯一标识。这种设计允许用户通过 PromQL 对数据进行灵活的切片和聚合。
1 http_requests_total{method="GET", handler="/api/v1/users", status="200"}
上述示例中,http_requests_total 是指标名称,method、handler、status 是标签,共同定义了一个唯一的时序数据流。
2.2.2 存储引擎演进 Prometheus 2.0 引入了全新的存储引擎,这是一个重大的架构变革。新存储引擎显著提升了性能,包括更快的启动时间、减少内存使用、提高查询性能和降低资源消耗 [[11]][[12]][[13]]。新存储引擎的设计理念包括:
分层存储结构 :数据按时间窗口组织为”块”(Block),每个块包含该时间范围内的所有数据。这种设计使得数据压缩和过期清理更加高效。
内存映射文件 :使用 mmap 将数据文件映射到内存空间,减少内存拷贝,提高查询效率。
预写日志(WAL) :所有写入操作首先记录到 WAL,确保数据持久性和崩溃恢复能力 [[14]][[15]]。
Prometheus 2.0 版本的性能改进是革命性的,在 CPU 和磁盘空间使用率方面有显著降低,并能更好地适应动态环境 [[16]]。
2.3 远程读写能力深度解析 2.3.1 远程写入机制 远程写入允许 Prometheus 将收集到的指标数据异步发送到远程存储系统或其他系统 [[17]][[18]][[19]]。这一功能对于实现更好的可扩展性、持久性和数据存储外包至关重要 [[20]]。
配置结构 :
1 2 3 4 5 6 7 8 9 remote_write: - url: "http://thanos-sidecar:10908/api/v1/receive" queue_config: max_samples_per_send: 1000 capacity: 2500 write_relabel_configs: - source_labels: [__name__ ] regex: 'go_.*' action: drop
远程写入配置中的关键参数包括:
URL :远程存储端点的地址
Queue Config :控制发送队列行为,优化吞吐量和延迟
Write Relabel Configs :在发送前对指标进行重标记或过滤
性能考量 :远程写入可能增加 Prometheus 的内存使用率 [[21]]。在 Prometheus 2.13.0 及后续版本中,针对读取 API 的资源瓶颈问题进行了修复,流式远程读 API 也得到了改进 [[22]][[23]]。多个版本(如 2.7.0, 2.33.0)对远程写入性能进行了优化,包括优化内存分配、处理积压、修复错误等 [[24]][[25]][[26]]。
2.3.2 远程读取机制 远程读取允许 Prometheus 从远程存储中查询原始指标 [[27]][[28]][[29]]。这使得 Prometheus 可以作为统一查询入口,同时访问本地和远程数据。
配置示例 :
1 2 3 4 5 remote_read: - url: "http://thanos-query:19192/api/v1/read" read_recent: true required_matchers: job: "critical-service"
远程读取支持 read_recent 参数,控制是否优先从远程存储读取最近的数据。这在数据迁移或联邦场景中非常有用。
2.4 PromQL 查询语言深度解析 PromQL(Prometheus Query Language)是 Prometheus 的核心查询语言,提供了强大的时序数据查询和聚合能力。
2.4.1 数据类型 PromQL 支持四种数据类型:
即时向量 :返回一组时序数据,每个时序包含一个最新的样本值。
区间向量 :返回一组时序数据,每个时序包含指定时间范围内的样本值。
标量 :一个简单的数字值,如 10 或 2.5。
字符串 :字符串值,在查询中较少直接使用。
2.4.2 操作符与函数 PromQL 提供了丰富的操作符和函数:
二元操作符 :支持算术(+、-、*、/、%)、比较(==、!=、>、<)、逻辑,如 sum()、avg()、max()、min()、count(),以及特殊的聚合操作符,如 topk()、bottomk()。
函数 :包括 rate()(计算速率)、irate()(计算瞬时速率)、increase()(计算增长量)、histogram_quantile()(计算分位数)等。
查询性能优化 :多个 Prometheus 版本持续改进 PromQL 查询性能,包括正则表达式匹配器性能提升 [[30]][[31]]。用户应避免在高基数标签上进行聚合,合理使用 recording rules 预计算常用查询。
2.5 服务发现机制 Prometheus 支持多种服务发现机制,能够动态发现监控目标:
Kubernetes 服务发现 :自动发现 Kubernetes 集群中的 Pod、Service、Node、Endpoint 等资源。配置示例:
1 2 3 4 5 6 7 8 scrape_configs: - job_name: 'kubernetes-pods' kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape ] action: keep regex: true
其他服务发现 :支持 Consul、Etcd、DNS SRV、EC2、Azure、GCE 等多种云平台和配置中心的服务发现。
2.6 版本演进与特性概览 虽然搜索结果中没有直接提及 Prometheus 2.50 版本的具体细节 [[32]][[33]]但 Prometheus 持续在每个版本中引入改进。以下是基于搜索结果整理的主要版本演进:
Prometheus 2.0.0 :引入全新的存储引擎,实现重大性能突破,包括更快的启动时间、减少内存使用、提高查询性能 [[34]][[35]][[36]]。
Prometheus 2.5.0 - 2.6.0 :持续的性能优化,包括 WAL 读取速度提升、内存使用减少 [[37]][[38]]。
Prometheus 2.13.0 :修复读取 API 的资源瓶颈问题,引入流式远程读 API [[39]][[40]]。
Prometheus 2.17.0 - 2.20.0 :远程写入性能改进、查询优化、新功能引入 [[41]][[42]]。
Prometheus 2.33.0 :进一步的远程写入性能优化和正则表达式性能提升 [[43]]。
每个版本都在存储效率、查询性能、远程读写能力等方面持续改进,体现了 Prometheus 项目对生产环境稳定性和性能的持续关注。
第三章:Grafana 架构与可视化技术深度解析 3.1 Grafana 架构总览 Grafana 是一个跨平台的开源度量分析和可视化工具,能够将采集的数据可视化展示,并提供灵活的交互式可视化能力 [[44]][[45]]。作为前端应用,Grafana 主要用于数据源的交互和可视化后端 [[46]][[47]][[48]]。
3.1.1 核心组件架构 Grafana Server 是核心组件,处理用户认证、仪表盘创建、数据源交互、Web 界面和 API [[49]][[50]]。Server 组件采用 Go 语言编写,具有轻量、高性能的特点。
数据源层 :Grafana 与各种数据源通信以获取数据,Prometheus 是 Grafana 的内置支持数据源之一 [[51]][[52]][[53]]。Grafana 支持多种数据源,包括 Prometheus、Graphite、InfluxDB、Elasticsearch 等 [[54]][[55]]。
仪表盘和面板系统 :用户创建和自定义仪表盘来显示来自选定数据源的数据可视化 [[56]][[57]][[58]]。仪表盘由多个面板组成,每个面板是一个主要可视化元素,用于展示指标,每种面板类型有自己的查询编辑器 [[59]][[60]][[61]]。
查询编辑器 :允许用户查询数据源中的指标,并对数据进行筛选和聚合 [[62]][[63]][[64]]。针对 Prometheus 数据源,Grafana 提供了专门的 PromQL 查询编辑器,支持语法高亮、自动补全、查询验证等功能。
插件架构 :Grafana 支持插件架构,允许与多种数据源交互,无需创建数据副本 [[65]][[66]]。插件系统扩展了 Grafana 的能力,包括数据源插件、面板插件和应用插件。
3.2 与 Prometheus 的集成交互 3.2.1 集成架构流程 Grafana 与 Prometheus 的集成遵循清晰的架构流程:应用程序或导出器暴露指标,Prometheus 按照特定时间间隔抓取指标并存储在本地数据库,Grafana 通过 PromQL 查询 Prometheus 进行可视化 [[67]][[68]]。
数据格式对接 :Prometheus 将指标以时间序列格式存储 [[69]][[70]]Grafana 通过 PromQL(Prometheus Query Language)查询这些指标 [[71]][[72]][[73]]。
多实例支持 :Grafana 可以显示来自多个 Prometheus 实例的指标,并将其组合到一个仪表盘中 [[74]]。这一能力对于跨集群、跨数据中心的监控场景至关重要。
3.2.2 配置步骤详解 步骤一:部署 Grafana
在 Kubernetes 环境中,可以通过 Helm 安装 Grafana:
1 2 helm repo add grafana https://grafana.github.io/helm-charts helm install grafana grafana/grafana --namespace monitoring
步骤二:连接 Prometheus 数据源
安装后,需要连接 Grafana 到 Prometheus 作为数据源 [[75]][[76]][[77]]。配置示例:
1 2 3 4 5 6 7 8 apiVersion: 1 datasources: - name: Prometheus type: prometheus access: proxy url: http://prometheus-server:9090 isDefault: true editable: true
步骤三:创建和配置仪表板
Grafana 仪表板由面板组成,用户可以自定义仪表板,将原始指标数据转换为图表、热图等可视化形式 [[78]][[79]][[80]]。Grafana 提供了丰富的仪表板模板和预构建可视化 [[81]][[82]][[83]]。
3.3 Kubernetes 监控插件与面板类型 3.3.1 推荐插件 DevOpsProdigy KubeGraf :这是一个非常优秀的 Grafana Kubernetes 插件,用于可视化和分析 Kubernetes 集群的性能 [[84]][[85]][[86]]。它包括主要服务指标、特征、应用程序生命周期和错误日志。该插件是官方 Kubernetes 插件的升级版本,要求 Grafana 版本大于 5.0.0,并且依赖于 Grafana-piechart-panel 插件。
Kubernetes Monitoring :Grafana 提供了 “Kubernetes Monitoring” 解决方案,用于监控集群、性能和成本 [[87]]。这一解决方案提供了预构建的仪表板和告警规则。
Grafana Kubernetes Plugin :官方 Grafana Kubernetes 插件可以查看集群、节点、Pod 和容器的指标,如内存、CPU、磁盘容量和使用情况,并支持过滤和查找相关 Pod 指标 [[88]]。
Polystat Panel Plugin :Grafana Polystat 面板插件可以创建热图(六边形形式)来表示特定指标 [[89]],适合概览大量资源的状态。
3.3.2 面板类型选择 时间序列图 :最常用的面板类型,适合展示指标随时间变化的趋势。
热图 :适合展示分布数据,如请求延迟分布、资源使用分布。
仪表盘 :适合展示单值指标,如当前 CPU 使用率、错误率。
饼图 :适合展示比例数据,需要安装 piechart-panel 插件。
表格 :适合展示结构化数据,支持排序、过滤和链接。
3.4 高可用性架构 在 Kubernetes 中实现高可用的 Grafana 架构需要考虑以下方面 [[90]]:
数据库支持 :使用 MySQL 或 PostgreSQL 作为 Grafana 的后端数据库,支持高可用架构。配置示例:
1 2 3 4 5 6 [database] type = mysqlhost = mysql-primary:3306 name = grafanauser = grafanapassword = ${GRAFANA_DB_PASSWORD}
配置持久化 :通过配置 grafana.ini 确保高可用性,包括会话存储、仪表板存储等。
多副本部署 :在 Kubernetes 中部署多个 Grafana 副本,配合负载均衡器实现高可用:
1 2 3 4 5 6 7 8 9 10 11 apiVersion: apps/v1 kind: Deployment metadata: name: grafana spec: replicas: 2 selector: matchLabels: app: grafana template:
第四章:高可用性与灾难恢复架构 4.1 高可用性设计原则 在 Kubernetes 环境中实施 Prometheus 和 Grafana 的高可用性需要遵循以下原则 [[91]]:
高可用性设计 :部署多个副本,消除单点故障。
自动扩展 :利用 HPA(Horizontal Pod Autoscaler)和 ASG(Auto Scaling Group)实现资源弹性 [[92]]。
备份恢复 :通过备份数据存储和定期测试确保恢复能力 [[93]]。
监控预警 :建立全面的监控和告警体系,及时发现和处理问题 [[94]][[95]][[96]]。
4.2 Prometheus 高可用方案 4.2.1 基础高可用架构 最基本的 Prometheus 高可用方案是运行多个 Prometheus 实例,并使用负载均衡器和故障转移 [[97]]。但这种方案存在挑战:
4.2.2 Thanos 方案深度解析 Thanos 是一个开源项目,旨在解决 Prometheus 在大规模 Kubernetes 集群中的存储、查询和数据合并问题,提供高可用性、长期存储能力和全局查询视图 [[98]][[99]][[100]]。
Thanos 核心组件 :
Sidecar :作为 Prometheus 的 sidecar 进程运行,与 Prometheus 同一 Pod 中 [[101]][[102]][[103]]。它负责将 Prometheus 的数据备份到对象存储(如 S3),并提供 gRPC API 接口供 Thanos 其他组件访问 [[104]][[105]][[106]]。
Query(Querier) :实现 Prometheus HTTP API,通过 Sidecar 或 Store Gateway 从多个数据源查询数据 [[107]][[108]]。
Store Gateway :从对象存储中提供历史数据查询 [[109]][[110]]。
Compactor :压缩对象存储中的数据,优化存储和查询性能 [[111]]。
Receiver :接收来自 Prometheus 的远程写入数据,并将其存储到对象存储中 [[112]][[113]]。
Thanos 架构优势 :
长期存储 :利用对象存储(如 S3)实现无限存储空间和长期保留指标 [[114]][[115]][[116]]。
全局查询视图 :支持跨多个 Prometheus 实例的查询,实现全局监控视图 [[117]][[118]]。
高可用性 :组件化设计实现灵活性和可扩展性 [[119]][[120]][[121]]。
4.3 Thanos 与 Prometheus 集成部署 4.3.1 Sidecar 部署模式 Thanos 可以无缝集成到现有的 Prometheus 部署中,通过与 Prometheus 共享同一主机或 Pod 的 Sidecar 进行集成 [[122]][[123]][[124]]。Prometheus 需要开启特定的 API 以允许 Thanos Sidecar 获取元数据和重新加载配置 [[125]]。
Prometheus 配置要求 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 apiVersion: apps/v1 kind: StatefulSet metadata: name: prometheus spec: template: spec: containers: - name: prometheus image: prom/prometheus:v2.x.x args: - "--config.file=/etc/prometheus/prometheus.yml" - "--storage.tsdb.path=/prometheus" - "--storage.tsdb.retention.time=15d" - "--web.enable-admin-api" - "--web.enable-lifecycle" - name: thanos-sidecar image: thanosio/thanos:v0.x.x args: - "sidecar" - "--tsdb.path=/prometheus" - "--prometheus.url=http://localhost:9090" - "--objstore.config-file=/etc/thanos/bucket-config.yaml"
对象存储配置 :
Thanos 需要配置对象存储(如 AWS S3)来存储长期数据 [[126]][[127]]。配置示例:
1 2 3 4 5 6 type: S3 config: bucket: "thanos-bucket" endpoint: "s3.amazonaws.com" access_key: "${AWS_ACCESS_KEY_ID}" secret_key: "${AWS_SECRET_ACCESS_KEY}"
4.3.2 远程写入集成 Prometheus 的 prometheus.yml 配置文件中需要添加 remote_write 部分,指向 Thanos Sidecar 或 Receiver 的地址 [[128]][[129]][[130]]:
1 2 3 4 5 remote_write: - url: "http://thanos-sidecar:10908/api/v1/receive" queue_config: max_samples_per_send: 1000 capacity: 2500
Thanos Receiver 配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 apiVersion: apps/v1 kind: Deployment metadata: name: thanos-receiver spec: template: spec: containers: - name: thanos-receiver image: thanosio/thanos:v0.x.x args: - "receive" - "--tsdb.path=/thanos/receive" - "--remote-write.address=0.0.0.0:10908" - "--receive.local-endpoint=<receiver-endpoint>" - "--objstore.config-file=/etc/thanos/bucket-config.yaml"
4.4 Kubernetes 环境高可用部署 4.4.1 部署架构 在 Kubernetes 集群中实现高可用 Prometheus 架构需要以下组件 [[131]]:
多副本部署 :部署多个 Prometheus 副本确保系统的高可用性和容错能力 [[132]]。
数据持久化 :使用 PV/PVC 和 SSD 存储确保数据持久化 [[133]]。
Thanos Query 高可用 :部署多个 Thanos Query 实例,前端配置负载均衡。
对象存储 :使用 S3 兼容存储作为长期存储后端。
4.4.2 Helm 部署方案 使用 Helm Chart 是部署 Prometheus-Thanos 高可用架构的推荐方式 [[134]][[135]][[136]]。
kube-prometheus-stack 配置示例 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 prometheus: prometheusSpec: replicas: 2 retention: "15d" thanos: baseImage: thanosio/thanos version: v0.x.x objectStorageConfig: key: bucket-config.yaml name: thanos-objectstorage externalLabels: cluster: "production" replica: "$(POD_NAME)" serviceMonitorSelector: matchLabels: release: prometheus thanos: query: replicas: 2 stores: - dnssrv+_grpc._tcp.prometheus-operated.monitoring.svc.cluster.local - dnssrv+_grpc._tcp.thanos-store.monitoring.svc.cluster.local storeGateway: replicas: 1 compactor: replicas: 1
安装命令 :
1 2 3 4 helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm install prometheus prometheus-community/kube-prometheus-stack \ --namespace monitoring \ -f values.yaml
4.5 RBAC 权限配置 在 Kubernetes 环境中,Prometheus 和 Thanos 需要适当的 RBAC 权限 [[137]]。
Prometheus RBAC 示例 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 apiVersion: v1 kind: ServiceAccount metadata: name: prometheus namespace: monitoring --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: prometheus rules: - apiGroups: ["" ] resources: - nodes - nodes/proxy - nodes/metrics - services - endpoints - pods verbs: ["get" , "list" , "watch" ] - apiGroups: ["extensions" , "networking.k8s.io" ] resources: - ingresses verbs: ["get" , "list" , "watch" ] - nonResourceURLs: ["/metrics" , "/metrics/cadvisor" ] verbs: ["get" ] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: prometheus roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: prometheus subjects: - kind: ServiceAccount name: prometheus namespace: monitoring
4.6 灾难恢复策略 4.6.1 数据备份策略 Prometheus 数据备份 :
定期备份 Prometheus 数据目录(TSDB 数据)
使用 Velero 等工具备份 PV 数据
配置 Thanos 将数据备份到对象存储
Grafana 数据备份 :
备份 Grafana 数据库(SQLite/MySQL/PostgreSQL)
备份仪表板配置(导出 JSON)
备份数据源配置和告警规则
4.6.2 恢复流程 灾难恢复测试 :通过备份数据存储和定期测试确保恢复能力 [[138]]。
版本控制 :将配置文件(Prometheus 规则、Grafana 仪表板)存储在 Git 中,实现 GitOps 管理 [[139]]。
多区域部署 :考虑跨区域部署,实现地理冗余。
第五章:安全加固最佳实践 5.1 安全架构概述 在生产环境中保护 Prometheus 和 Grafana 需要多层次的安全措施 [[140]][[141]]。安全加固涵盖以下关键领域:
传输层安全(TLS 加密)
身份认证与授权
基于角色的访问控制(RBAC)
密钥管理
网络隔离
审计日志
5.2 TLS 加密配置 5.2.1 TLS 重要性 TLS 加密是保护监控数据和配置文件安全的关键措施 [[142]][[143]][[144]]。建议在生产环境中为所有组件启用 TLS 加密通信 [[145]][[146]]。
5.2.2 Prometheus TLS 配置 Prometheus 配置文件中可以配置 SSL/TLS 参数 [[147]][[148]]:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 global: external_labels: monitor: 'production' tls_server_config: cert_file: /etc/prometheus/ssl/cert.pem key_file: /etc/prometheus/ssl/key.pem client_ca_file: /etc/prometheus/ssl/ca.pem client_auth_type: VerifyClientCertIfGiven web: tls_server_config: cert_file: /etc/prometheus/ssl/cert.pem key_file: /etc/prometheus/ssl/key.pem
5.2.3 Grafana TLS 配置 Grafana 可以通过配置文件或 ConfigMap 指定证书文件 [[149]]:
1 2 3 4 5 6 7 8 [server] protocol = httpscert_file = /etc/grafana/ssl/cert.pemcert_key = /etc/grafana/ssl/key.pem[database] ssl_mode = require
5.2.4 反向代理方案 由于 Prometheus 和 Grafana 本身可能不直接内置 TLS 支持,可通过反向代理(如 Nginx、Traefik)来实现加密通信 [[150]][[151]][[152]]。
Nginx 反向代理配置示例 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 upstream prometheus { server prometheus-server:9090 ; } server { listen 443 ssl; server_name prometheus.example.com; ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/key.pem; ssl_protocols TLSv1.2 TLSv1.3 ; location / { proxy_pass http://prometheus; proxy_set_header Host $host ; proxy_set_header X-Real-IP $remote_addr ; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; proxy_set_header X-Forwarded-Proto $scheme ; } }
5.3 身份认证与授权 5.3.1 认证方法 Prometheus 和 Grafana 支持多种认证方式 [[153]][[154]]:
基本认证 :用户名/密码认证,最简单的认证方式。
LDAP 集成 :与企业目录服务集成,实现统一身份管理。
OAuth2/OIDC :支持 SAML、Okta OAuth2、GitHub OAuth2 等 [[155]]。
API 密钥 :通过 API 密钥或环境变量注入敏感信息 [[156]]。
5.3.2 Grafana 认证配置 Grafana 支持配置 SAML、Okta OAuth2、GitHub OAuth2、数据库加密、数据库密钥加密(使用 HashiCorp Vault、AWS KMS、Azure Key Vault)以及与 HashiCorp Vault 集成 [[157]]。
OAuth2 配置示例 :
1 2 3 4 5 6 7 8 9 10 11 12 [auth.generic_oauth] enabled = true name = OAuthallow_sign_up = true client_id = ${OAUTH_CLIENT_ID} client_secret = ${OAUTH_CLIENT_SECRET} scopes = openid email profileauth_url = https://oauth-provider.com/oauth2/v1/authorizetoken_url = https://oauth-provider.com/oauth2/v1/tokenapi_url = https://oauth-provider.com/oauth2/v1/userinfoteam_ids =allowed_organizations =
LDAP 配置示例 :
1 2 3 4 [auth.ldap] enabled = true config_file = /etc/grafana/ldap.tomlallow_sign_up = true
5.3.3 Prometheus 认证限制 需要注意的是,Prometheus 本身可能不直接提供多用户或登录支持 [[158]][[159]]。可以通过以下方式实现认证:
使用反向代理添加认证层
集成 SSO 或外部工具
使用 OAuth 或 TLS 客户端证书进行身份验证 [[160]]
5.4 基于角色的访问控制(RBAC) 5.4.1 Kubernetes RBAC 在 Kubernetes 环境中,RBAC 是关键的安全功能,用于限制访问范围 [[161]][[162]][[163]]。通过配置服务账户、最小权限原则、Kubernetes Secrets 管理敏感信息 [[164]][[165]][[166]]。
Grafana RBAC 配置 :Grafana 可配置用户和组权限以限制对仪表板的访问 [[167]][[168]]。
权限角色设计 :
5.4.2 最小权限原则 遵循最小权限原则配置 RBAC 权限 [[169]][[170]]:
1 2 3 4 5 6 7 8 9 10 apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: prometheus-config-reader namespace: monitoring rules: - apiGroups: ["" ] resources: ["configmaps" ] resourceNames: ["prometheus-config" ] verbs: ["get" ]
5.5 密钥管理 5.5.1 敏感信息管理 安全管理敏感信息(如密码、API 密钥)至关重要 [[171]][[172]][[173]]。
Kubernetes Secrets :使用 Kubernetes Secrets 存储敏感信息 [[174]]:
1 2 3 4 5 6 7 8 9 apiVersion: v1 kind: Secret metadata: name: grafana-admin-credentials namespace: monitoring type: Opaque stringData: admin-user: admin admin-password: ${GRAFANA_ADMIN_PASSWORD}
环境变量注入 :通过环境变量注入敏感信息 [[175]][[176]]。
5.5.2 HashiCorp Vault 集成 可以将数据库密钥加密存储到 HashiCorp Vault [[177]]。Vault Secrets Operator 用于在中央 HashiCorp Vault 和 Kubernetes 秘密存储之间同步密钥,并且可以使用 Prometheus Operator 和 Grafana 进行可观测性监控 [[178]]。
Vault 集成示例 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 apiVersion: external-secrets.io/v1beta1 kind: ExternalSecret metadata: name: grafana-secrets spec: refreshInterval: 1h secretStoreRef: name: vault-backend kind: ClusterSecretStore target: name: grafana-secrets data: - secretKey: admin-password remoteRef: key: secret/grafana property: admin-password
5.6 网络策略隔离 5.6.1 网络策略配置 实施网络策略和防火墙规则限制访问 [[179]][[180]]。创建网络策略控制 Prometheus 和 Grafana 的网络访问 [[181]]。
NetworkPolicy 示例 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: prometheus-network-policy namespace: monitoring spec: podSelector: matchLabels: app: prometheus policyTypes: - Ingress - Egress ingress: - from: - podSelector: matchLabels: app: grafana - podSelector: matchLabels: app: alertmanager ports: - protocol: TCP port: 9090 egress: - to: - podSelector: matchLabels: app: kube-state-metrics - podSelector: matchLabels: app: node-exporter ports: - protocol: TCP port: 9100
5.6.2 其他安全措施 防火墙和 IP 限制 :限制访问 IP 范围,限制 Prometheus 的暴露范围,使用 VPN 或私有网络 [[182]][[183]][[184]]。
端口转发和白名单 :使用防火墙、端口转发、白名单控制访问 [[185]][[186]][[187]]。
WireGuard 安全连接 :使用 WireGuard 等工具进行安全连接 [[188]]。
5.7 审计与合规 审计日志 :定期审计用户操作日志 [[189]][[190]]。
配置备份 :加密存储敏感信息,定期备份配置 [[191]][[192]]。
定期更新 :定期更新软件版本以修复安全漏洞 [[193]][[194]]。
强密码策略 :实施强密码策略,定期审查用户权限 [[195]]。
第六章:告警体系深度构建 6.1 告警架构概述 Prometheus 的告警体系由两部分组成:
Prometheus Server :负责定义告警规则,根据 PromQL 表达式评估告警条件,产生告警并发送到 Alertmanager。
Alertmanager :负责处理、分组、去重、路由和抑制告警,并管理通知渠道 [[196]][[197]][[198]]。
6.2 告警规则设计模式 6.2.1 告警规则配置 Prometheus 允许通过 PromQL 表达式定义告警条件 [[199]][[200]][[201]]。告警规则文件中可以定义告警名称、表达式、等待时间、标签、严重性、摘要和描述 [[202]][[203]][[204]]。
基础告警规则示例 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 groups: - name: node_alerts rules: - alert: HighCPUUsage expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100 ) > 80 for: 5m labels: severity: warning annotations: summary: "High CPU usage on {{ $labels.instance }} " description: "CPU usage is above 80% (current: {{ $value }} %)" - alert: MemoryUsageHigh expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 85 for: 5m labels: severity: warning annotations: summary: "High memory usage on {{ $labels.instance }} " description: "Memory usage is above 85%"
6.2.2 高级告警规则模式 多条件告警 :结合多个指标判断告警条件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 - alert: HighErrorRate expr: | ( sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) ) > 0.05 and sum(rate(http_requests_total[5m])) > 100 for: 5m labels: severity: critical annotations: summary: "High error rate detected" description: "Error rate is {{ $value | humanizePercentage }} "
预测性告警 :使用 predict_linear 函数预测资源使用趋势。
1 2 3 4 5 6 7 8 - alert: DiskSpacePredicted expr: predict_linear(node_filesystem_free_bytes[1h], 4 *3600) < 0 for: 5m labels: severity: warning annotations: summary: "Disk will be full in 4 hours" description: "Disk {{ $labels.mountpoint }} will be full in approximately 4 hours"
分层告警 :根据严重性级别定义不同的告警阈值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 groups: - name: response_time_alerts rules: - alert: ResponseTimeSlow expr: histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m])) > 1 for: 5m labels: severity: warning annotations: summary: "95th percentile response time is slow" - alert: ResponseTimeCritical expr: histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m])) > 5 for: 2m labels: severity: critical annotations: summary: "95th percentile response time is critical"
6.3 Alertmanager 配置详解 6.3.1 核心功能 Alertmanager 支持:
分组 :将相似告警分组,避免通知风暴
抑制 :当某些告警触发时,抑制其他告警
静默 :临时静默特定告警
路由 :根据标签将告警路由到不同接收器
去重 :消除重复告警 [[205]][[206]][[207]]
6.3.2 配置示例 路由配置 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 global: resolve_timeout: 5m smtp_smarthost: 'smtp.example.com:587' smtp_from: 'alertmanager@example.com' smtp_auth_username: 'alertmanager' smtp_auth_password: '${SMTP_PASSWORD}' route: group_by: ['alertname' , 'cluster' , 'service' ] group_wait: 30s group_interval: 5m repeat_interval: 4h receiver: 'default-receiver' routes: - match: severity: critical receiver: 'critical-receiver' continue: false - match: severity: warning receiver: 'warning-receiver' receivers: - name: 'default-receiver' email_configs: - to: 'team@example.com' send_resolved: true - name: 'critical-receiver' pagerduty_configs: - service_key: '${PAGERDUTY_KEY}' severity: critical slack_configs: - api_url: '${SLACK_WEBHOOK_URL}' channel: '#alerts-critical' - name: 'warning-receiver' slack_configs: - api_url: '${SLACK_WEBHOOK_URL}' channel: '#alerts-warning' inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname' , 'cluster' , 'service' ]
6.4 Grafana 告警集成 6.4.1 Grafana 与 Alertmanager 关系 Grafana 依赖 Alertmanager 处理告警,Grafana 本身不直接处理告警,而是通过 Alertmanager 进行告警管理 [[208]][[209]][[210]]。
Grafana 支持创建告警规则并定义通知方式,但核心告警逻辑由 Prometheus 和 Alertmanager 处理 [[211]]。
6.4.2 Webhook 集成 Alertmanager 可以通过 Webhook 将告警发送到外部系统 [[212]][[213]][[214]]。Grafana 也可以通过简单的 Webhook 将告警发送到 Alertmanager [[215]]。
Webhook 接收器配置 :
1 2 3 4 5 6 7 receivers: - name: 'webhook-receiver' webhook_configs: - url: 'http://your-webhook-endpoint/alerts' send_resolved: true http_config: bearer_token: '${WEBHOOK_TOKEN}'
6.4.3 Grafana OnCall 集成 Grafana OnCall 可以通过集成 Alertmanager 来接收 Prometheus 告警 [[216]][[217]][[218]]。
配置步骤 :
在 Grafana OnCall 中创建集成
复制 Webhook URL
在 Alertmanager 中配置 Webhook 接收器
调整路由配置
设置心跳监控
Alertmanager 配置 :
1 2 3 4 5 receivers: - name: 'grafana-oncall' webhook_configs: - url: 'https://oncall.example.com/integrations/v1/alertmanager/YOUR_KEY/' send_resolved: true
6.5 通知渠道配置 Alertmanager 支持多种通知方式 [[219]][[220]][[221]]:
邮件通知 :
1 2 3 4 5 6 7 8 receivers: - name: 'email-receiver' email_configs: - to: 'team@example.com' from: 'alertmanager@example.com' smarthost: 'smtp.example.com:587' auth_username: 'alertmanager' auth_password: '${SMTP_PASSWORD}'
Slack 通知 :
1 2 3 4 5 6 7 8 receivers: - name: 'slack-receiver' slack_configs: - api_url: '${SLACK_WEBHOOK_URL}' channel: '#alerts' title: '{{ .GroupLabels.alertname }}' text: '{{ range .Alerts }}{{ .Annotations.summary }}{{ end }}' send_resolved: true
钉钉通知 :
1 2 3 4 5 receivers: - name: 'dingtalk-receiver' webhook_configs: - url: 'http://dingtalk-webhook/alerts' send_resolved: true
第七章:生产环境最佳实践 7.1 部署规划 7.1.1 资源规划 Prometheus 资源需求 :
CPU:取决于抓取目标和查询负载
内存:主要受时间序列数量和查询复杂度影响
存储:取决于指标保留时间和数据压缩率
经验公式 :
1 2 内存需求 ≈ 时间序列数量 × 每序列内存开销 + 查询缓存 存储需求 ≈ 每秒样本数 × 每样本大小 × 保留时间 × 压缩比
7.1.2 高可用部署建议 Prometheus 高可用 :
部署多个 Prometheus 实例(至少 2 个)
使用相同的配置,抓取相同的目标
配置外部标签区分实例
1 2 3 4 global: external_labels: cluster: 'production' replica: 'prometheus-1'
Grafana 高可用 :
部署多个 Grafana 副本
使用外部数据库
配置共享会话存储
7.2 性能优化 7.2.1 Prometheus 性能优化 抓取优化 :
合理设置抓取间隔(建议 15-60 秒)
使用 scrape_timeout 控制超时
避免抓取高基数指标
存储优化 :
设置合理的保留时间(--storage.tsdb.retention.time)
使用 SSD 存储提高 I/O 性能
定期压缩和清理历史数据
查询优化 :
使用 Recording Rules 预计算常用查询
避免高基数标签聚合
使用 rate() 而非 increase() 计算速率
远程写入优化 :
1 2 3 4 5 6 7 remote_write: - url: "http://remote-storage/api/v1/receive" queue_config: max_samples_per_send: 1000 max_shards: 200 capacity: 2500 batch_send_deadline: 5s
7.2.2 Grafana 性能优化 数据库优化 :
使用 MySQL 或 PostgreSQL 替代 SQLite
配置数据库连接池
定期清理会话和仪表板版本历史
查询缓存 :
1 2 3 4 5 6 [dataproxy] timeout = 30 dial_timeout = 10 keep_alive = 90 max_idle_connections = 100 idle_conn_timeout = 90
仪表板优化 :
避免单仪表板过多面板
合理设置刷新间隔
使用变量减少重复查询
7.3 监控监控 7.3.1 自监控指标 Prometheus 自身暴露了丰富的监控指标:
prometheus_tsdb_head_samples_appended_total:写入样本数
prometheus_tsdb_head_series:当前时间序列数量
prometheus_scrape_duration_seconds:抓取耗时
prometheus_rule_evaluation_duration_seconds:规则评估耗时
7.3.2 监控告警规则 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 groups: - name: prometheus_self_monitoring rules: - alert: PrometheusDown expr: up{job="prometheus"} == 0 for: 1m labels: severity: critical annotations: summary: "Prometheus instance is down" - alert: PrometheusScrapeSlow expr: histogram_quantile(0.99, rate(prometheus_scrape_duration_seconds_bucket[5m])) > 10 for: 5m labels: severity: warning annotations: summary: "Prometheus scrape is slow" - alert: PrometheusTSDBCompactionsFailing expr: increase(prometheus_tsdb_compactions_failed_total[1h]) > 0 for: 0m labels: severity: critical annotations: summary: "Prometheus TSDB compactions failing" - alert: PrometheusRemoteWriteQueueFull expr: prometheus_remote_storage_shards_max / prometheus_remote_storage_shards > 0.9 for: 5m labels: severity: warning annotations: summary: "Remote write queue is near full"
7.4 配置管理 7.4.1 GitOps 实践 将 Prometheus 和 Grafana 配置存储在 Git 仓库中,实现版本控制和自动化部署:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ├── prometheus/ │ ├── rules/ │ │ ├── node-alerts.yaml │ │ ├── kubernetes-alerts.yaml │ │ └── application-alerts.yaml │ ├── prometheus.yml │ └── alertmanager.yml ├── grafana/ │ ├── dashboards/ │ │ ├── kubernetes-overview.json │ │ └── application-metrics.json │ └── datasources/ │ └── prometheus.yaml └── kubernetes/ ├── prometheus-deployment.yaml ├── grafana-deployment.yaml └── configmaps.yaml
7.4.2 使用 kube-prometheus-stack kube-prometheus-stack 是一个集成了 Prometheus、Grafana 和 Alertmanager 的综合解决方案 [[222]]:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 prometheus: prometheusSpec: retention: 15d storageSpec: volumeClaimTemplate: spec: storageClassName: ssd resources: requests: storage: 100Gi resources: requests: cpu: 500m memory: 2Gi limits: cpu: 2 memory: 8Gi grafana: replicas: 2 persistence: enabled: true size: 10Gi adminPassword: "${GRAFANA_ADMIN_PASSWORD}" alertmanager: alertmanagerSpec: replicas: 2
7.5 运维清单 7.5.1 日常运维
7.5.2 定期维护
第八章:总结与展望 8.1 核心要点回顾 本报告深入分析了 Prometheus 和 Grafana 的技术架构、部署实践、安全加固和告警体系。核心要点包括:
架构层面 :
Prometheus 采用拉取模式采集指标,配合多维数据模型和 PromQL 提供强大的查询能力
Grafana 通过插件架构支持多种数据源,提供丰富的可视化能力
Thanos 为 Prometheus 提供高可用和长期存储解决方案
部署层面 :
Kubernetes 环境中推荐使用 Helm Chart 部署
多副本部署实现高可用
对象存储作为长期数据后端
安全层面 :
TLS 加密保护通信安全
多种认证方式支持企业集成
RBAC 实现细粒度访问控制
密钥管理保护敏感信息
告警层面 :
规则设计遵循分级、预测、多条件原则
Alertmanager 实现分组、去重、路由
多渠道通知支持灵活响应
8.2 技术发展趋势 可观测性融合 :Prometheus 和 Grafana 正在与日志、链路追踪等可观测性领域融合,形成统一的全栈监控平台。
云原生集成 :与 Kubernetes、Service Mesh 的深度集成,提供更自动化的监控能力。
AI/ML 增强 :引入机器学习能力进行异常检测、根因分析和智能告警。
边缘计算 :支持边缘场景的轻量级部署和联邦查询。
8.3 实践建议
从小规模开始 :先部署基础架构,逐步扩展监控范围
重视指标设计 :遵循 RED(Rate、Errors、Duration)和 USE(Utilization、Saturation、Errors)原则设计指标
合理规划容量 :根据业务规模和增长预期规划资源
建立运维流程 :建立完整的监控、告警、响应流程
持续优化 :定期审查告警规则、仪表板和存储策略
附录:常用配置模板 A. Prometheus 完整配置示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 global: scrape_interval: 15s evaluation_interval: 15s external_labels: cluster: 'production' replica: 'prometheus-1' alerting: alertmanagers: - static_configs: - targets: - alertmanager:9093 rule_files: - /etc/prometheus/rules/*.yml scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090' ] - job_name: 'kubernetes-apiservers' kubernetes_sd_configs: - role: endpoints scheme: https tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token relabel_configs: - source_labels: [__meta_kubernetes_namespace , __meta_kubernetes_service_name , __meta_kubernetes_endpoint_port_name ] action: keep regex: default;kubernetes;https - job_name: 'kubernetes-nodes' kubernetes_sd_configs: - role: node scheme: https tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token relabel_configs: - action: labelmap regex: __meta_kubernetes_node_label_(.+) - job_name: 'kubernetes-pods' kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape ] action: keep regex: true - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path ] action: replace target_label: __metrics_path__ regex: (.+) - source_labels: [__address__ , __meta_kubernetes_pod_annotation_prometheus_io_port ] action: replace regex: ([^:]+)(?::\d+)?;(\d+) replacement: $1:$2 target_label: __address__ remote_write: - url: http://thanos-sidecar:10908/api/v1/receive queue_config: max_samples_per_send: 1000 capacity: 2500 remote_read: - url: http://thanos-query:19192/api/v1/read read_recent: true
B. Alertmanager 完整配置示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 global: resolve_timeout: 5m smtp_smarthost: 'smtp.example.com:587' smtp_from: 'alertmanager@example.com' smtp_auth_username: '${SMTP_USER}' smtp_auth_password: '${SMTP_PASSWORD}' slack_api_url: '${SLACK_WEBHOOK_URL}' templates: - '/etc/alertmanager/templates/*.tmpl' route: group_by: ['alertname' , 'cluster' , 'service' ] group_wait: 30s group_interval: 5m repeat_interval: 4h receiver: 'default-receiver' routes: - match: severity: critical receiver: 'critical-team' continue: false - match: severity: warning receiver: 'warning-team' inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname' , 'cluster' , 'service' ] receivers: - name: 'default-receiver' email_configs: - to: 'team@example.com' send_resolved: true - name: 'critical-team' pagerduty_configs: - service_key: '${PAGERDUTY_KEY}' slack_configs: - channel: '#alerts-critical' title: '{{ .GroupLabels.alertname }}' text: '{{ range .Alerts }}{{ .Annotations.summary }}{{ end }}' send_resolved: true - name: 'warning-team' slack_configs: - channel: '#alerts-warning' title: '{{ .GroupLabels.alertname }}' text: '{{ range .Alerts }}{{ .Annotations.summary }}{{ end }}' send_resolved: true
C. Kubernetes 部署清单示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 apiVersion: v1 kind: ConfigMap metadata: name: prometheus-config namespace: monitoring data: prometheus.yml: | global: scrape_interval: 15s evaluation_interval: 15s --- apiVersion: apps/v1 kind: StatefulSet metadata: name: prometheus namespace: monitoring spec: serviceName: prometheus replicas: 2 selector: matchLabels: app: prometheus template: metadata: labels: app: prometheus spec: serviceAccountName: prometheus containers: - name: prometheus image: prom/prometheus:v2.x.x args: - "--config.file=/etc/prometheus/prometheus.yml" - "--storage.tsdb.path=/prometheus" - "--storage.tsdb.retention.time=15d" - "--web.enable-admin-api" - "--web.enable-lifecycle" ports: - containerPort: 9090 volumeMounts: - name: prometheus-config mountPath: /etc/prometheus - name: prometheus-storage mountPath: /prometheus - name: thanos-sidecar image: thanosio/thanos:v0.x.x args: - "sidecar" - "--tsdb.path=/prometheus" - "--prometheus.url=http://localhost:9090" - "--objstore.config-file=/etc/thanos/bucket-config.yaml" volumeMounts: - name: prometheus-storage mountPath: /prometheus - name: thanos-config mountPath: /etc/thanos volumes: - name: prometheus-config configMap: name: prometheus-config - name: thanos-config secret: secretName: thanos-objectstorage volumeClaimTemplates: - metadata: name: prometheus-storage spec: accessModes: ["ReadWriteOnce" ] storageClassName: ssd resources: requests: storage: 100Gi
结语 Prometheus 和 Grafana 作为云原生监控的核心组件,其深度学习和实践对于构建现代化的可观测性平台至关重要。本报告从架构原理到部署实践,从安全加固到告警体系,提供了全面的技术指导和最佳实践。
随着技术的不断发展,建议读者持续关注 Prometheus 和 Grafana 的版本更新和新特性,结合实际业务需求不断优化监控策略,为系统的稳定运行提供坚实保障。