Prometheus 3.x + Grafana 13 + Mimir 3.0:2026 年企业监控体系完整搭建指南
2026 年监控生态迎来多个重要版本:Prometheus 3.12、Grafana 13.1、Grafana Mimir 3.0(横向扩展指标后端)、Grafana Tempo 2.9(AI 辅助链路追踪)。本文从零搭建一套完整的可观测性平台:Prometheus 采集 + Mimir 长期存储 + Grafana 统一展示,覆盖核心配置、告警规则、Recording Rules 性能优化,以及与 OpenTelemetry 的集成方案。
2026 年的监控生态已经非常成熟,但“选什么、怎么搭”仍然是团队经常纠结的问题。
本文给出一套面向生产环境的监控体系搭建方案:Prometheus 负责采集,Mimir 3.0 负责长期存储和水平扩展,Grafana 13 负责统一展示,OpenTelemetry Collector 负责数据汇聚。
2026 年版本速览
Prometheus 3.12.0(2026-05-28)
Remote Write 2.0 正式 GA(更高效的 Mimir 写入协议)
OTLP 接收端口(原生接收 OpenTelemetry 指标)
UTF-8 Label 支持(可以用中文标签名,虽然不推荐)
Grafana 13.1.0(2026-06-23)
AI 辅助 Dashboard 生成(描述需求,自动生成 Panel)
Scene Viz 重构(Dashboard 性能大幅提升)
原生 OpenTelemetry 数据源(不需要转换)
Grafana Mimir 3.0
架构简化(Ingester/Distributor/Querier 组件精简)
存储成本优化(更高效的 Parquet 压缩格式)
Prometheus 和 OTel 双协议原生支持
Grafana Tempo 2.9
AI 辅助的 Trace 异常检测(自动标记异常 Span)
TraceQL 增强(更强的查询语言)
架构设计
推荐架构(中大规模集群):
应用 Pod
│ (metrics endpoint /metrics)
▼
Prometheus(采集层)
│ Remote Write 2.0
▼
Grafana Mimir(长期存储,水平扩展)
│
▼
Grafana(展示与告警)
│
├── Prometheus 数据源(查询 Mimir)
├── Loki 数据源(日志)
├── Tempo 数据源(链路追踪)
└── Alert Manager(告警通知)
对于小规模集群(< 50 节点,< 1000 Pod):
不需要 Mimir,Prometheus 单机存储 30 天足够
简化版:Prometheus + Grafana + AlertManager
使用 kube-prometheus-stack 快速搭建
# kube-prometheus-stack 包含:
# Prometheus Operator + Prometheus + AlertManager +
# Grafana + node-exporter + kube-state-metrics
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
# 创建 values.yaml
cat > monitoring-values.yaml << 'EOF'
grafana:
enabled: true
adminPassword: "your-secure-password"
persistence:
enabled: true
size: 10Gi
service:
type: ClusterIP # 通过 Ingress/Gateway 暴露,不直接用 NodePort
prometheus:
prometheusSpec:
retention: 15d # 本地保留 15 天
retentionSize: 50GB
storageSpec:
volumeClaimTemplate:
spec:
storageClassName: standard
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 100Gi
resources:
requests:
cpu: "500m"
memory: "2Gi"
limits:
cpu: "2"
memory: "8Gi"
# 如果接入 Mimir,开启 Remote Write
remoteWrite:
- url: http://mimir-distributor.monitoring:8080/api/v1/push
remoteWriteVersion: "2.0" # Remote Write 2.0(Prometheus 3.x)
alertmanager:
alertmanagerSpec:
storage:
volumeClaimTemplate:
spec:
storageClassName: standard
resources:
requests:
storage: 10Gi
nodeExporter:
enabled: true
kubeStateMetrics:
enabled: true
EOF
helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack \
--namespace monitoring \
--create-namespace \
--values monitoring-values.yaml \
--wait
# 查看安装结果
kubectl get pods -n monitoring
Mimir 3.0 部署(长期存储)
适合需要保留 6 个月以上指标数据的场景。
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
# Mimir 单体模式(small-scale,开发/测试)
helm install mimir grafana/mimir-distributed \
--namespace monitoring \
--set mimir.structuredConfig.common.storage.backend=filesystem \
--set mimir.structuredConfig.blocks_storage.filesystem.dir=/data/blocks \
--set mimir.structuredConfig.compactor.data_dir=/data/compactor
# Mimir 生产模式(使用对象存储)
cat > mimir-values.yaml << 'EOF'
mimir:
structuredConfig:
common:
storage:
backend: s3 # 或 oss(阿里云)、cos(腾讯云)
s3:
endpoint: oss-cn-hangzhou.aliyuncs.com # 阿里云 OSS 示例
bucket_name: my-mimir-blocks
access_key_id: <ACCESS_KEY>
secret_access_key: <SECRET_KEY>
limits:
ingestion_rate: 100000 # 每秒最多接收 10 万个样本
max_global_series_per_user: 10000000 # 最多 1000 万个时间序列
compactor:
data_dir: /data/compactor
EOF
helm install mimir grafana/mimir-distributed \
--namespace monitoring \
--values mimir-values.yaml
关键指标采集配置
ServiceMonitor(Prometheus Operator 方式)
# 监控自定义应用(推荐方式)
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: myapp-monitor
namespace: monitoring
labels:
release: kube-prometheus-stack # 必须匹配 Prometheus 的 serviceMonitorSelector
spec:
namespaceSelector:
matchNames:
- production
selector:
matchLabels:
app: myapp
monitor: "true" # 需要给 Service 打这个 label
endpoints:
- port: metrics
path: /metrics
interval: 30s
scrapeTimeout: 10s
honorLabels: true
# 给 Service 打上对应 Label
apiVersion: v1
kind: Service
metadata:
name: myapp
namespace: production
labels:
app: myapp
monitor: "true" # 与 ServiceMonitor 匹配
spec:
selector:
app: myapp
ports:
- name: http
port: 80
- name: metrics
port: 9090 # 指标端口
PrometheusRule(告警规则)
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: production-alerts
namespace: monitoring
labels:
release: kube-prometheus-stack
spec:
groups:
- name: pod-alerts
interval: 30s
rules:
# Recording Rule(预计算,加速 Dashboard 查询)
- record: job:container_cpu_usage_seconds_total:rate5m
expr: |
sum by (job) (
rate(container_cpu_usage_seconds_total{container!=""}[5m])
)
# 告警规则
- alert: PodCrashLooping
expr: |
rate(kube_pod_container_status_restarts_total[15m]) * 60 * 15 > 0
for: 5m
labels:
severity: warning
annotations:
summary: "Pod {{ $labels.namespace }}/{{ $labels.pod }} 正在 CrashLoop"
description: "容器 {{ $labels.container }} 在过去 15 分钟重启了 {{ $value | humanize }} 次"
- alert: PodOOMKilled
expr: |
kube_pod_container_status_last_terminated_reason{reason="OOMKilled"} == 1
for: 0m
labels:
severity: critical
annotations:
summary: "Pod {{ $labels.namespace }}/{{ $labels.pod }} 被 OOMKill"
description: "容器 {{ $labels.container }} 因内存不足被系统终止,请检查 Memory Limit 配置"
- alert: HighMemoryUsage
expr: |
(
container_memory_working_set_bytes{container!=""}
/ container_spec_memory_limit_bytes{container!=""}
) > 0.90
for: 5m
labels:
severity: warning
annotations:
summary: "容器内存使用率超过 90%"
description: "{{ $labels.namespace }}/{{ $labels.pod }}/{{ $labels.container }} 内存使用率:{{ $value | humanizePercentage }}"
- name: node-alerts
rules:
- alert: NodeDiskPressure
expr: |
(
node_filesystem_avail_bytes{mountpoint="/",fstype!="tmpfs"}
/ node_filesystem_size_bytes{mountpoint="/"}
) < 0.15
for: 5m
labels:
severity: warning
annotations:
summary: "节点 {{ $labels.instance }} 磁盘使用率超过 85%"
description: "剩余可用空间:{{ $value | humanizePercentage }}"
- alert: NodeHighLoad
expr: node_load15 / count by (instance) (node_cpu_seconds_total{mode="idle"}) > 1.5
for: 15m
labels:
severity: warning
annotations:
summary: "节点 {{ $labels.instance }} 15 分钟负载过高"
AlertManager 通知配置
# alertmanager-config.yaml
apiVersion: monitoring.coreos.com/v1alpha1
kind: AlertmanagerConfig
metadata:
name: production-config
namespace: monitoring
spec:
route:
receiver: default-receiver
groupBy: ['alertname', 'namespace']
groupWait: 30s
groupInterval: 5m
repeatInterval: 4h
routes:
- matchers:
- name: severity
value: critical
receiver: critical-receiver
repeatInterval: 1h
- matchers:
- name: severity
value: warning
receiver: warning-receiver
receivers:
- name: default-receiver
webhookConfigs:
- url: 'http://dingtalk-webhook/send' # 钉钉通知
- name: critical-receiver
webhookConfigs:
- url: 'http://dingtalk-webhook/send'
# 同时发 PagerDuty(如果用的话)
pagerdutyConfigs:
- routingKey: '<pagerduty-key>'
- name: warning-receiver
webhookConfigs:
- url: 'http://dingtalk-webhook/send'
Grafana 13 + AI 辅助 Dashboard
# 访问 Grafana
kubectl port-forward -n monitoring svc/kube-prometheus-stack-grafana 3000:80 &
# 浏览器访问 http://localhost:3000
# Grafana 13 新功能:AI 辅助生成 Panel
# 在 Dashboard 编辑器中,点击 "Generate panel" 按钮
# 输入自然语言描述:
# "显示过去 1 小时内所有命名空间的 Pod CPU 使用率,按命名空间分组"
# Grafana 会自动生成对应的 PromQL 和可视化配置
推荐导入的 Dashboard ID(Grafana 官方):
15760 - Kubernetes / Views / Global(集群整体视图)
13770 - 1 Kubernetes All-in-one Cluster Monitoring(全面)
3119 - Kubernetes cluster monitoring(经典)
6417 - Kubernetes Cluster(资源使用)
导入方式:
Grafana UI → Dashboards → Import → 填入 Dashboard ID
与 OpenTelemetry 集成
Prometheus 3.x 原生支持接收 OTLP 指标,不需要 OTel Collector 中转。
# prometheus.yml 中开启 OTLP 接收
# (在 Prometheus Operator 中通过 additionalScrapeConfigs 配置)
otlp:
promote_resource_attributes:
- service.instance.id
- service.name
- service.namespace
- service.version
# 应用直接把 OTel 指标发到 Prometheus
# OTEL_EXPORTER_OTLP_ENDPOINT=http://prometheus:9090/api/v1/otlp/v1/metrics
小结
2026 年的 Prometheus + Grafana 生态已经非常成熟。对于中小规模集群,kube-prometheus-stack 一键安装就能获得完整的监控体系;对于需要长期保留数据或多 Prometheus 实例聚合的场景,Mimir 3.0 提供了经过生产验证的水平扩展能力。
Grafana 13 的 AI 辅助功能让 Dashboard 创建门槛降低了,但理解 PromQL 和指标体系依然是运维工程师的核心能力——AI 生成的 Panel 需要人工验证逻辑是否正确。
