多迈知识库
第二套高阶模板 · 更大气的阅读体验

Kubernetes集群Prometheus监控实战指南

发布时间:2025-12-25 21:41:29 阅读:132 次

为什么要在ref="/tag/2020/" style="color:#3D6345;font-weight:bold;">Kubernetes里用Prometheus做监控

跑在Kubernetes上的服务一多,光靠肉眼盯着kubectl get pods根本没法及时发现问题。比如某个Pod内存占用突然飙升,或者API响应变慢,等用户投诉了再处理就晚了。这时候就得有个能实时抓指标、还能告警的工具,Prometheus就是干这个的。

Prometheus天生适合容器环境,它主动拉取(pull)指标的方式和Kubernetes的标签体系配合得很顺。加上社区生态成熟,像Node Exporter、cAdvisor这些组件一装,CPU、内存、网络、磁盘数据立马就能看到。

快速搭建Prometheus监控系统

最简单的办法是用Helm一键部署。先加个Prometheus社区的仓库:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

然后直接安装kube-prometheus-stack,它把Prometheus、Alertmanager、Grafana全都打包好了:

helm install kube-prometheus prometheus-community/kube-prometheus-stack -n monitoring --create-namespace

等几分钟,所有组件跑起来后,可以用端口转发访问Prometheus界面:

kubectl port-forward -n monitoring service/kube-prometheus-prometheus 9090

浏览器打开 http://localhost:9090,就能看到Targets页面,里面列出了所有被监控的目标实例。

采集自定义应用指标

你的Go服务暴露了/metrics接口?Prometheus默认就能抓。但得告诉它去哪找。给Deployment加个ServiceMonitor:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: myapp-monitor
namespace: default
spec:
selector:
matchLabels:
app: myapp
endpoints:
- port: web
interval: 15s

只要你的Service有app: myapp这个标签,Prometheus就会自动发现并开始拉取指标。Java应用用Micrometer,Python用prometheus-client,打点方式都差不多。

设置告警规则更省心

光看图表不够,关键问题得主动通知你。比如集群节点CPU超过80%持续5分钟,就得发钉钉或邮件。在values.yaml里配置Alertmanager:

alertmanager:
config:
receivers:
- name: "webhook"
webhook_configs:
- url: "https://oapi.dingtalk.com/robot/send?access_token=xxx"

再写条PrometheusRule:

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: node-high-cpu
namespace: monitoring
spec:
groups:
- name: node.rules
rules:
- alert: NodeCPUHigh
expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "Instance {{ $labels.instance }} CPU 使用过高"

一旦触发,消息马上就能推到群里,值班的人不用一直盯着屏幕。

常见坑点提醒

Prometheus本身不持久化数据,pod重建就丢了。记得挂个PVC。资源也别抠门,监控几百个Pod的话,至少给它4核8G起步。还有,/metrics接口别没设限,万一被恶意刷成DDoS入口就麻烦了,建议加个NetworkPolicy限制访问来源。

用熟了之后你会发现,不只是看CPU内存,像请求延迟分布、队列积压数这些业务指标也能监控。一套系统打通,排查问题快得多。