[一、基于 Kubernetes 的 Prometheus 监控方案概述](#一、基于 Kubernetes 的 Prometheus 监控方案概述)
[1. 核心组件及功能](#1. 核心组件及功能)
[2. 监控流程详解](#2. 监控流程详解)
[3. 关键监控指标说明](#3. 关键监控指标说明)
[二、Prometheus 与相关组件部署](#二、Prometheus 与相关组件部署)
[1. 克隆项目代码](#1. 克隆项目代码)
[2. 安装 Prometheus Operator](#2. 安装 Prometheus Operator)
[3. 安装 Prometheus Stack](#3. 安装 Prometheus Stack)
[4. 查看容器运行状态](#4. 查看容器运行状态)
[三、ServiceMonitor 配置与应用](#三、ServiceMonitor 配置与应用)
[1. ServiceMonitor 作用与查看](#1. ServiceMonitor 作用与查看)
[2. ServiceMonitor 工作原理](#2. ServiceMonitor 工作原理)
[四、Grafana 配置与访问](#四、Grafana 配置与访问)
[1. 修改 Grafana Service 类型](#1. 修改 Grafana Service 类型)
[2. 访问 Grafana 并配置数据源](#2. 访问 Grafana 并配置数据源)
[3. 导入监控模板](#3. 导入监控模板)
[五、Prometheus 访问配置](#五、Prometheus 访问配置)
[1. 修改 Prometheus Service 类型](#1. 修改 Prometheus Service 类型)
[2. 访问 Prometheus 并查看监控目标](#2. 访问 Prometheus 并查看监控目标)
[六、监控 MySQL 数据库](#六、监控 MySQL 数据库)
[1. 部署 MySQL](#1. 部署 MySQL)
[2. 部署 MySQL Exporter](#2. 部署 MySQL Exporter)
[3. 配置 ServiceMonitor 监控 MySQL](#3. 配置 ServiceMonitor 监控 MySQL)
[4. 在 Grafana 中添加 MySQL 监控模板](#4. 在 Grafana 中添加 MySQL 监控模板)
[1. 部署 DingTalk 组件](#1. 部署 DingTalk 组件)
[2. 修改 DingTalk 配置文件](#2. 修改 DingTalk 配置文件)
[3. 启动 DingTalk 服务](#3. 启动 DingTalk 服务)
[4. 配置 Alertmanager 对接 DingTalk](#4. 配置 Alertmanager 对接 DingTalk)
[5. 测试钉钉报警](#5. 测试钉钉报警)
一、基于 Kubernetes 的 Prometheus 监控方案概述
- 核心组件及功能
在 Kubernetes 监控中,node - exporter + Prometheus + Grafana 组成的组合被广泛采用,各组件功能如下:
node - exporter:节点级指标导出工具,可采集节点的 CPU、内存、磁盘、网络等关键指标,并通过 Metrics 接口暴露数据,为监控提供基础数据来源。
Prometheus:集时间序列数据库与监控报警功能于一身,能够主动抓取 Cadvisor 和 node - exporter 暴露的 Metrics 接口数据,将容器和节点的时序数据存储起来,同时提供强大的 PromQL 查询语言用于监控分析和报警设置。
Grafana:专业的图表和 Dashboard 工具,可将 Prometheus 作为数据源,通过编写 PromQL 查询语句,以直观的图表形式展示 K8S 集群的 CPU 使用率、内存使用率、网络流量等监控指标。
2. 监控流程详解
Kubernetes 集群的监控流程清晰且有序,主要分为以下步骤:
数据采集层部署:在 Kubernetes 集群的每个节点上安装 Cadvisor 和 node - exporter,其中 Cadvisor 负责容器级指标采集,node - exporter 负责节点级指标采集。
数据存储与处理:部署 Prometheus,通过配置使其能够抓取 Cadvisor 和 node - exporter 的 Metrics 接口数据,将容器(containers)和节点(nodes)的时序数据妥善存储。
可视化展示:利用 Grafana 构建监控仪表盘,选择 Prometheus 作为数据源,通过编写 PromQL 查询语句,直观展示 K8S 集群的各类监控指标。
报警机制设置:根据监控需求设置 Prometheus 报警规则,当监控指标超过设定阈值时,及时发送报警信息,保障集群稳定运行。
在实际部署中,node - exporter 以 DaemonSet 形式运行,确保每个节点都能被监控;Prometheus 通过部署 Prometheus Operator 以 Deployment 形式运行,实现 Metrics 抓取和报警功能;Grafana 则通过部署 Grafana Operator 实现仪表盘展示。
3. 关键监控指标说明
Kubernetes 集群的监控指标众多,涵盖集群运行状态的各个方面,主要包括:
资源利用率指标:CPU 利用率(节点、Pod、容器级别)、内存利用率(节点、Pod、容器级别)、网络流量(节点、Pod、容器的收发包大小和带宽利用率)、磁盘使用率(节点磁盘空间使用情况)。
组件状态指标:Pod 状态(Running、Waiting、Succeeded、Failed 等状态数量)、节点状态(Ready、NotReady 和 Unreachable 状态数量)、容器重启次数(单个容器或 Pod 内所有容器的重启次数)。
核心组件性能指标:API 服务指标(Kubernetes API Server 的请求 LATENCY、请求 QPS、错误码数量等)、集群组件指标(etcd、kubelet、kube - proxy 等组件的运行指标)。
基于这些指标可设置相应报警规则,例如 CPU 利用率超过 80% 报警、内存利用率超过 90% 报警、Pod / 节点 NotReady 状态超过 10% 报警、API Server 请求 LATENCY 超过 200ms 报警等,具体阈值需根据集群大小和服务负载评估确定。
二、Prometheus 与相关组件部署
- 克隆项目代码
首先需要从 Github 克隆 kube - prometheus 项目的指定分支,命令如下:
[root@k8s - master ~]# git clone -b release - 0.10 https://github.com/prometheus - operator/kube - prometheus.git
命令解释:git clone用于克隆远程仓库代码,-b release - 0.10指定克隆的分支为 release - 0.10,该分支包含了适配当前部署需求的稳定版本代码。
2. 安装 Prometheus Operator
Prometheus Operator 是 CoreOS 开源项目,提供了 Kubernetes 原生方式运行和管理 Prometheus 的能力,能自动创建、配置和管理 Prometheus 实例,并与 Kubernetes 服务发现机制集成,大幅简化部署工作量。
安装命令如下:
[root@k8s - master ~]# cd kube - prometheus/
root@k8s - master kube - prometheus\]# kubectl apply --server - side -f manifests/setup
命令解释:cd kube - prometheus/进入克隆下来的项目目录;kubectl apply用于应用 Kubernetes 资源配置,--server - side特性将配置逻辑从 kubectl 移至 API 服务器,解决所有权冲突问题,-f manifests/setup指定应用 setup 目录下的配置文件,完成 Prometheus Operator 的基础环境部署。
### 若需删除 Prometheus Operator,可执行以下命令:
### kubectl delete --ignore - not - found=true -f manifests/setup
命令解释:kubectl delete用于删除 Kubernetes 资源,--ignore - not - found=true表示忽略未找到资源的错误,-f manifests/setup指定删除 setup 目录下配置文件对应的资源。
### 3. 安装 Prometheus Stack
待 Operator 容器启动后,安装 Prometheus Stack,命令如下:
### \[root@k8s - master kube - prometheus\]# kubectl apply --server - side -f manifests/
命令解释:-f manifests/指定应用 manifests 目录下的所有配置文件,该目录包含了 Prometheus、Alertmanager、Grafana 等全套监控告警组件的配置,即 kube - prometheus - stack 全家桶。
### 删除 Prometheus Stack 的命令为:
### kubectl delete --ignore - not - found=true -f manifests/ -f manifests/setup
4. 查看容器运行状态
安装完成后,查看监控命名空间下的 Pod 状态,确认组件是否正常运行:
### \[root@k8s - master \~\]# kubectl get pod -n monitoring
正常情况下,会显示 alertmanager、blackbox - exporter、grafana、kube - state - metrics、node - exporter、prometheus 等组件的 Pod 处于 Running 状态,如下所示(部分示例):
### NAME READY STATUS RESTARTS AGE
alertmanager - main - 0 2/2 Running 0 79m
grafana - 5fc7f9f55d - x4gv4 1/1 Running 0 87m
prometheus - k8s - 0 2/2 Running 0 79m
命令解释:kubectl get pod用于获取 Pod 列表,-n monitoring指定查看 monitoring 命名空间下的 Pod,通过 STATUS 列可确认 Pod 是否正常运行。
### 三、ServiceMonitor 配置与应用
1. ServiceMonitor 作用与查看
ServiceMonitor 用于定义如何监控一组动态服务,通过标签选择器确定需要监控的 Service,实现服务的自动发现和监控配置,无需手动重新配置。
查看已有的 ServiceMonitor:
### \[root@k8s - master \~\]# kubectl get servicemonitors -A
执行后会列出 monitoring 命名空间下的各类 ServiceMonitor,如 alertmanager - main、coredns、grafana、kube - apiserver 等,示例如下:
### NAMESPACE NAME AGE
monitoring alertmanager - main 2m9s
monitoring coredns 2m6s
monitoring grafana 2m7s
命令解释:kubectl get servicemonitors用于获取 ServiceMonitor 列表,-A表示查看所有命名空间下的 ServiceMonitor。
### 2. ServiceMonitor 工作原理
为使 Prometheus 监控 Kubernetes 内的应用,需存在 Endpoints 对象(本质是 IP 地址列表),通常由 Service 对象通过标签选择器匹配 Pod 自动填充。Prometheus Operator 的 ServiceMonitor 会发现这些 Endpoints 对象,并配置 Prometheus 监控对应的 Pod,其 spec.endpoints 部分用于配置需要抓取指标的端口。
### 四、Grafana 配置与访问
1. 修改 Grafana Service 类型
默认 Grafana 的 Service 类型为 ClusterIP,仅集群内部可访问,需修改为 NodePort 类型以便外部访问:
### \[root@k8s - master \~\]# kubectl edit svc grafana -n monitoring
命令解释:kubectl edit svc用于编辑 Service 配置,grafana为 Service 名称,-n monitoring指定命名空间。
### 在编辑界面中,将type: ClusterIP修改为type: NodePort,并可指定 nodePort(如 32082),修改后保存退出。
### 查看修改后的 Grafana Service 信息:
### \[root@k8s - master \~\]# kubectl get svc grafana -n monitoring
输出如下:
### NAME TYPE CLUSTER - IP EXTERNAL - IP PORT(S) AGE
grafana NodePort 10.99.26.98 \
Description=Prometheus Webhook DingTalk
After=network.target
Service
User=root
Group=root
WorkingDirectory=/usr/local/dingtalk
ExecStart=/usr/local/dingtalk/prometheus - webhook - dingtalk
Restart=always
RestartSec=5
Environment="CONFIG_FILE=/usr/local/dingtalk/config.yml"
Install
WantedBy=multi - user.target
启动服务并设置开机自启:
sudo systemctl daemon - reload
sudo systemctl start prometheus - webhook - dingtalk
sudo systemctl enable prometheus - webhook - dingtalk
查看服务状态:
sudo systemctl status prometheus - webhook - dingtalk
确认服务处于 Running 状态,同时可通过ss -n1pt | grep 8060查看 8060 端口是否被监听(默认端口)。
4. 配置 Alertmanager 对接 DingTalk
编辑 Alertmanager 配置文件:
cd /root/kube - prometheus/manifests/
vi alertmanager - secret.yaml
修改配置文件中的 receivers 和 route 部分,示例如下:
stringData:
alertmanager.yml: |
global:
resolve_timeout: 5m
inhibit_rules:
- equal:
- namespace
- alertname
source_matchers: - severity = critical
target_matchers: - severity =~ info
- equal:
- namespace
- alertname
source_matchers: - severity = info
target_matchers: - severity = info
receivers: - name: webhook
webhook_configs: - url: http://192.168.207.137:8060/dingtalk/webhook2/send # DingTalk服务地址
send_resolved: true
route:
group_by: - namespace
group_interval: 50s
group_wait: 30s
receiver: webhook
repeat_interval: 1h
routes: - matchers:
- alertname = Watchdog
receiver: webhook - matchers:
- severity = critical
receiver: webhook - matchers:
- alertname = TargetDown
receiver: webhook
配置解释:receivers定义接收者为 webhook,指定 DingTalk 服务的 URL;route定义告警路由规则,将各类告警发送到 webhook 接收者。
应用配置:
kubectl replace -f alertmanager - secret.yaml
若配置修改后未生效,可删除后重新创建:
kubectl delete -f alertmanager - secret.yaml
kubectl create -f alertmanager - secret.yaml
修改 Alertmanager 的 Service 类型为 NodePort 以便访问:
kubectl edit svc -n monitoring alertmanager - main
查看 Alertmanager Service 信息:
kubectl get svc -n monitoring alertmanager - main
通过http://<K8S集群任意节点的IP>:<NodePort>访问 Alertmanager 页面。
5. 测试钉钉报警
停止 MySQL 服务模拟故障:
kubectl scale deployment mysql --replicas=0
命令解释:kubectl scale deployment用于调整 Deployment 的副本数量,--replicas=0表示停止所有 MySQL Pod。