当前位置: 首页 > news >正文

云原生环境 Prometheus 企业级监控实战指南

一、为什么选择 Prometheus?

在传统架构中,Zabbix、Nagios 等监控工具是主流,但在 Kubernetes 环境中,这些工具难以应对动态、短生命周期、大规模容器的监控需求。Prometheus 应运而生,成为 CNCF 毕业项目之一,专为云原生设计。

核心优势:

  • 多维数据模型:支持标签(labels)实现灵活的数据查询与聚合。

  • PromQL:强大的查询语言,支持实时分析和告警。

  • 无需依赖外部存储:内置时序数据库。

  • 服务发现机制:自动发现 K8s 中的 Pod、Service、Node。

  • Pull 模型:主动拉取 Metrics,便于控制数据采集节奏。


二、Prometheus 在 K8s 中的架构流程

text

Node Exporter (节点级) + cAdvisor (容器级) → Prometheus (采集+存储) → Grafana (可视化) → AlertManager (告警)

组件说明:

组件功能
Node Exporter采集节点 CPU、内存、磁盘、网络等指标
cAdvisor集成在 Kubelet 中,采集容器资源使用情况
Prometheus拉取 Metrics,存储时序数据,支持 PromQL
Grafana可视化仪表盘
AlertManager告警路由、分组、静默、抑制

三、环境准备:克隆 Prometheus Operator 项目

bash

git clone -b release-0.10 https://github.com/prometheus-operator/kube-prometheus.git cd kube-prometheus

四、安装 Prometheus Operator(核心)

bash

kubectl apply --server-side -f manifests/setup

--server-side避免 kubectl 的冲突问题,直接由 API Server 处理声明式配置。

删除 Operator:

bash

kubectl delete --ignore-not-found=true -f manifests/setup

五、安装 Prometheus Stack(全家桶)

bash

kubectl apply --server-side -f manifests/

包含:Prometheus、AlertManager、Grafana、ServiceMonitors、告警规则等。

删除 Stack:

bash

kubectl delete --ignore-not-found=true -f manifests/ -f manifests/setup

六、查看组件状态

bash

kubectl get pod -n monitoring

七、暴露 Grafana 服务(NodePort)

编辑 Service:

bash

kubectl edit svc grafana -n monitoring

修改type: NodePort,并指定nodePort: 32082

yaml

ports: - name: http nodePort: 32082 port: 3000 protocol: TCP targetPort: http type: NodePort

访问地址:http://<任意节点IP>:32082

默认账号密码:admin/admin


八、暴露 Prometheus 服务(NodePort)

bash

kubectl edit svc prometheus-k8s -n monitoring

修改type: NodePortnodePort: 32370

访问地址:http://<任意节点IP>:32370


九、配置 Grafana 数据源

若未自动添加,手动配置:

  • URL:http://prometheus-k8s:9090

  • 保存并测试


十、导入监控 Dashboard

推荐模板:

模板 ID说明
13105Kubernetes 中文版集群监控
7249Kubernetes Cluster
893Docker 和系统监控
14731Node Exporter 主机监控

导入方式:Grafana →+→ Import → 输入 ID → Load → Import


十一、监控 MySQL:Exporter 实战

1. 部署 MySQL

bash

kubectl create deploy mysql --image=mysql:5.7.23 kubectl set env deploy/mysql MYSQL_ROOT_PASSWORD=pwd123

2. 暴露 Service

bash

kubectl expose deployment mysql --type NodePort --port=3306

3. 创建 MySQL Exporter

yaml

# mysql-exporter.yaml apiVersion: apps/v1 kind: Deployment metadata: name: mysql-exporter namespace: monitoring spec: replicas: 1 selector: matchLabels: k8s-app: mysql-exporter template: metadata: labels: k8s-app: mysql-exporter spec: containers: - name: mysql-exporter image: registry.cn-beijing.aliyuncs.com/dotbalo/mysql-exporter env: - name: DATA_SOURCE_NAME value: "exporter:exporter@(mysql.default:3306)/" ports: - containerPort: 9104 --- apiVersion: v1 kind: Service metadata: name: mysql-exporter namespace: monitoring labels: k8s-app: mysql-exporter spec: selector: k8s-app: mysql-exporter ports: - name: api port: 9104

bash

kubectl apply -f mysql-exporter.yaml

4. 创建 ServiceMonitor

yaml

# mysql-sm.yaml apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: mysql-exporter namespace: monitoring labels: k8s-app: mysql-exporter spec: jobLabel: k8s-app endpoints: - port: api interval: 30s selector: matchLabels: k8s-app: mysql-exporter

bash

kubectl apply -f mysql-sm.yaml

5. 导入 MySQL Dashboard

模板 ID:6239


十二、钉钉告警集成(企业级必备)

1. 添加钉钉机器人

  • 群设置 → 智能群助手 → 添加机器人 → 自定义

  • 关键词:FIRING

2. 部署 webhook-dingtalk

bash

wget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v2.0.0/prometheus-webhook-dingtalk-2.0.0.linux-amd64.tar.gz tar xf prometheus-webhook-dingtalk-2.0.0.linux-amd64.tar.gz mv prometheus-webhook-dingtalk-2.0.0.linux-amd64 /usr/local/dingtalk

3. 配置 config.yml

yaml

targets: webhook2: url: https://oapi.dingtalk.com/robot/send?access_token=你的token secret: 你的secret

4. 启动服务

bash

cat > /etc/systemd/system/prometheus-webhook-dingtalk.service <<EOF [Unit] Description=Prometheus Webhook DingTalk After=network.target [Service] ExecStart=/usr/local/dingtalk/prometheus-webhook-dingtalk WorkingDirectory=/usr/local/dingtalk Restart=always [Install] WantedBy=multi-user.target EOF systemctl start prometheus-webhook-dingtalk

5. 修改 AlertManager 配置

编辑alertmanager-secret.yaml,添加:

yaml

receivers: - name: webhook webhook_configs: - url: http://<dingtalk节点IP>:8060/dingtalk/webhook2/send send_resolved: true

bash

kubectl replace -f alertmanager-secret.yaml

6. 暴露 AlertManager

bash

kubectl edit svc alertmanager-main -n monitoring

修改type: NodePort,查看端口:

bash

kubectl get svc -n monitoring alertmanager-main

访问:http://<任意节点IP>:30586


十三、补充知识点(博客亮点)

✅ 1. Prometheus 告警状态机

状态说明
Inactive未触发
Pending已触发,等待 for 时间
Firing触发并发送到 AlertManager

✅ 2. Prometheus vs Prometheus Operator

方式优点缺点
手动部署灵活可控配置复杂,需手动维护
Operator自动化管理,K8s 原生黑盒化,调试困难

✅ 3. ServiceMonitor 核心字段

  • selector.matchLabels:匹配 Exporter Service 的标签

  • endpoints.port:Exporter 的端口名称

  • interval:采集间隔

✅ 4. Exporter 设计模式

适用于无法直接暴露 Metrics 的应用(MySQL、Redis、Kafka、Nginx 等),通过 Sidecar 或独立 Pod 采集并暴露。

✅ 5. Prometheus 高可用方案

  • 双实例 + 数据分片

  • Thanos 或 VictoriaMetrics 实现长期存储与全局视图

  • AlertManager 集群化避免告警重复


十四、常见问题排查

问题解决方法
Target 状态为 DOWN检查 Service 端口、Endpoint、网络策略
Grafana 无数据确认 Prometheus 数据源 URL 是否正确
钉钉未收到告警检查 AlertManager 配置、机器人关键词、网络连通性
Prometheus 内存高减少采集频率、优化 PromQL、限制标签基数
http://www.jsqmd.com/news/957837/

相关文章:

  • okbiye 多维度论文优化:拆解降重与消 AI 痕迹的实用落地思路
  • 使用 Reqwest 结合持久化连接池优化 TensorRT C++ API 在大模型推理中的性能调优
  • YOLOv11城市道路路面病害目标检测数据集-176张-road-1
  • 2026年深圳国际快递公司推荐榜:DHL/UPS/FedEx等全球快递,食品液体粉末带电化妆品等敏感货与电商大件小件跨境物流服务优选 - 品牌企业推荐师(官方)
  • 2023年软考-打印PrintStrategy—软件设计师—东方仙盟
  • 万亿长文!在CUDA编程中使用统一内存消除Rust绑定PyTorch模型的高效推理输入拷贝开销的底层实践
  • 计算机毕业设计之基于大数据的高速公路经营数据分析系统的设计和实现
  • 软袋物料自动化拆垛落地案例
  • 告别‘File was loaded in the wrong encoding‘:IDEA编码问题终极排查清单(含GBK/GB2312场景)
  • 成都工字钢供应商推荐|型钢厂家|四川盛世钢联青白江现货批发 - 四川盛世钢联营销中心
  • 用Python复现70年前的植物光谱实验:从1952年论文到现代高光谱分析
  • okbiye 破局综述写作困局:从文献搜集到定稿全链路重构学术写作新范式
  • 2026必看:8款好用的主流AI编程助手权威推荐
  • 图形验证码服务商选型推荐:为什么我放弃了传统方案,选择了QCaptcha?
  • 工信部认证AIGC工程师,中山优才教育正规报名入口指南 - 精选教育培训热点
  • 5分钟解决群晖Audio Station歌词缺失难题:智能匹配与双语显示完整方案
  • ViGEmBus虚拟游戏控制器驱动:打造完美Windows游戏体验的终极指南
  • 2026年旅游船厂家/品牌最新推荐榜单:新能源电动旅游船、画舫仿古双层豪华游船、定制玻璃钢/钢质/铝合金旅游船公司全景解析 - 品牌企业推荐师(官方)
  • 14701黄大年茶思屋榜文第147期 第1题:支持250G+的高频0.5mm连接器同轴转微带工艺连接技术
  • 别再死磕手册了!用Vivado 2023.1手把手配置AXI GPIO,从PL点亮LED到PS中断响应
  • cc-switch新手教程:在快马平台从零开始学习代码切换技术
  • 2026年6月四川家庭游导游优选TOP3|纯玩路线、节奏安排与服务参考 - 随峰国旅
  • 银行催收3.0:用企业数据API打通信息孤岛,MCP接入实战指南
  • 慈善AI不是选择题,而是生存题:2025年起欧盟《AI Act慈善附则》强制要求实时偏见审计,你准备好了吗?
  • 2026年6月数据治理梯队深度分析:全链路AI破局,亿信华辰睿治领跑第一梯队
  • 2026上海静安区防水补漏哪家好?住建实地测评权威榜单TOP5|卫生间免砸砖/阳台屋顶/厨卫漏水维修(6月静安专项调研) - 苏易修缮
  • Java继承Thread类与实现Runnable接口创建线程区别总结
  • 计算机毕业设计之基于大数据的作物生长监测与预测模型研究
  • Linux服务器程序崩溃了别慌!手把手教你用GDB分析core文件定位段错误
  • 为什么92%的家庭AI项目半年内弃用?资深IoT架构师复盘12个真实失败案例与可复用决策框架