# Prometheus Operator Prometheus数据丢失排查实操
技术栈:Prometheus Operator v0.73.x + Prometheus v2.51.x + Grafana v10.4.x + Kubernetes v1.32.13
操作环境 / 对接原理 / 详细步骤 / 完整命令 / 配置文件 / 验证流程 / 排错方案
# Prometheus Operator Prometheus数据丢失排查实操
## 操作环境
- K8s 集群版本 v1.32.13,已部署 kube-prometheus-stack v0.73.x
- 命名空间 monitoring,包含 Prometheus、Alertmanager、Grafana、node-exporter、kube-state-metrics
- Prometheus 持久化存储 50Gi,数据保留 15 天
- Grafana 已配置 Prometheus 数据源,导入 K8s 监控仪表盘
- Alertmanager 已配置邮件和企业微信通知渠道
## 对接原理
Prometheus Operator 通过 CRD(Prometheus、Alertmanager、ServiceMonitor、PodMonitor、PrometheusRule)声明式管理 Prometheus 监控栈。Operator 监听这些 CRD,自动生成 Prometheus 配置文件并以 StatefulSet 运行 Prometheus。ServiceMonitor 通过标签选择器发现 Service,自动生成 scrape 配置抓取 /metrics 端点。PrometheusRule 定义告警规则和记录规则,Operator 自动加载到 Prometheus。Alertmanager 处理 Prometheus 触发的告警,通过路由分组、抑制、静默后发送到通知渠道。Grafana 通过 Prometheus 数据源查询指标,以仪表盘可视化展示。
## 详细步骤
**1. Prometheus 基础操作**
```bash
# 查看监控组件
kubectl get pods -n monitoring
# 访问 Prometheus UI
kubectl -n monitoring port-forward svc/kps-prometheus 9090:9090
# 查看 Targets
# Status > Targets,确认所有端点 UP
# 查看告警
# Alerts 页面查看触发的告警规则
# 执行 PromQL 查询
# Graph 页面输入 up,点击 Execute
```
**2. Grafana 基础操作**
```bash
kubectl -n monitoring port-forward svc/kps-grafana 3000:80
# 访问 http://localhost:3000
# 查看已导入仪表盘
# 浏览 K8s 集群监控、节点监控、Pod 监控
# 查看告警状态
# Alerting > Alert rules
```
## 验证流程
```bash
# 1. 验证监控组件运行
kubectl get pods -n monitoring
# prometheus、alertmanager、grafana、node-exporter、kube-state-metrics 均为 Running
# 2. 验证 Prometheus Targets
kubectl -n monitoring port-forward svc/kps-prometheus 9090:9090 &
curl -s http://localhost:9090/api/v1/targets | jq '.data.activeTargets | length'
# 返回活跃 Target 数量
# 3. 验证指标采集
curl -s 'http://localhost:9090/api/v1/query?query=up' | jq '.data.result | length'
# 返回 up 指标时间序列数量
# 4. 验证告警规则
curl -s 'http://localhost:9090/api/v1/rules' | jq '.data.groups | length'
# 返回规则组数量
# 5. 验证 Grafana
kubectl -n monitoring port-forward svc/kps-grafana 3000:80 &
curl -s http://admin:admin123@localhost:3000/api/datasources
# 返回已配置的 Prometheus 数据源
# 6. 验证 Alertmanager
kubectl -n monitoring port-forward svc/kps-alertmanager 9093:9093 &
curl -s http://localhost:9093/api/v2/status | jq '.config.original'
# 返回 Alertmanager 配置
```
## 排错方案
- Prometheus Target DOWN:检查 ServiceMonitor 标签选择器是否匹配 Service,metrics 端口是否正确,网络是否可达,RBAC 权限是否允许 endpoints 发现
- 指标缺失:确认应用暴露 /metrics 端点,ServiceMonitor 的 port 名称匹配 Service 端口名称,interval 间隔内是否有数据
- 告警未触发:检查 PromQL 表达式是否正确,for 持续时间是否满足,PrometheusRule 标签是否被 Prometheus 选择(release: kps)
- 告警通知未收到:检查 Alertmanager 路由配置,receiver 配置是否正确,通知渠道(SMTP/Webhook)是否可达,告警是否被抑制或静默
- Grafana 无数据:检查 Prometheus 数据源配置,URL 是否正确,查询是否返回数据,时间范围选择是否正确
- Prometheus OOM:检查 scrape 指标基数,减少高基数标签,增加 resources.limits.memory,调整 retention 时间
- Prometheus 重启后数据丢失:检查是否配置持久化存储(PVC),storageClassName 是否可用,PV 是否绑定成功
- ServiceMonitor 不生效:确认 namespaceSelector 配置,matchNames 是否包含目标命名空间,Prometheus CRD 的 serviceMonitorSelector 是否匹配