Kubernetes教程FG060-Kubernetes监控(Prometheus+Grafana)实战
内容简介
本篇文章主要介绍Kubernetes中使用Prometheus和Grafana构建监控系统的方法。风哥教程参考Kubernetes官方文档监控相关内容,结合生产环境实际操作场景,详细讲解Prometheus的部署配置、Grafana的安装使用以及监控指标的配置和告警设置。
目录大纲
Part01-基础概念与理论知识
1.1 监控系统概述
监控系统是Kubernetes集群管理的重要组成部分,它可以帮助我们:
- 实时监控:实时了解集群和应用的运行状态
- 故障预警:在问题发生前提前预警
- 性能分析:分析系统性能瓶颈
- 容量规划:根据监控数据进行容量规划
- 问题定位:快速定位和解决问题
,风哥提示:。
1.2 Prometheus与Grafana的架构
Prometheus和Grafana是目前Kubernetes环境中最流行的监控解决方案,风哥提示:。
- Prometheus:
- 负责指标数据的采集、存储和查询
- 支持多种数据源和指标类型
- 提供强大的查询语言PromQL
- 支持告警规则配置
- Grafana:
- 负责数据可视化和仪表板展示
- 支持多种数据源,包括Prometheus
- 提供丰富的图表类型和模板
- 支持告警通知
Part02-生产环境规划与建议
2.1 监控架构设计
- 监控范围:
- 集群级别:节点、Pod、服务等
- 应用级别:应用性能、业务指标等
- 基础设施级别:存储、网络等
- 部署模式:
- 单集群部署:适用于小型环境
- 多集群部署:适用于大型环境,使用联邦集群
- 存储方案:
- 本地存储:适用于测试环境
- 持久化存储:适用于生产环境
- 远程存储:如Thanos、Cortex等,适用于大规模环境
2.2 资源规划与配置
- Prometheus:
- CPU:根据监控规模,建议2-8核
- 内存:根据数据量,建议8-32GB
- 存储:根据数据保留时间,建议100GB以上
- Grafana:,学习交流加群风哥微信: itpux-com。
- CPU:建议2-4核
- 内存:建议4-8GB
- 存储:建议50GB以上
- Node Exporter:
- CPU:每个节点约0.1核
- 内存:每个节点约100MB
Part03-生产环境项目实施方案
3.1 Prometheus部署与配置
使用Helm部署Prometheus。
添加Helm仓库
# 添加Prometheus仓库
[root@fgedu-master ~]# helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
[root@fgedu-master ~]# helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
部署Prometheus
# 创建命名空间
[root@fgedu-master ~]# kubectl create namespace monitoring
[root@fgedu-master ~]# kubectl create namespace monitoring
# 部署Prometheus
[root@fgedu-master ~]# helm install prometheus prometheus-community/kube-prometheus-stack \
–namespace monitoring \
–set prometheus.retention=15d \
–set prometheus.resources.requests.memory=8Gi \
–set prometheus.resources.limits.memory=8Gi \
–set prometheus.persistentVolume.enabled=true \
–set prometheus.persistentVolume.size=200Gi \
–set grafana.enabled=true \
–set grafana.service.type=NodePort
[root@fgedu-master ~]# helm install prometheus prometheus-community/kube-prometheus-stack \
–namespace monitoring \
–set prometheus.retention=15d \
–set prometheus.resources.requests.memory=8Gi \
–set prometheus.resources.limits.memory=8Gi \
–set prometheus.persistentVolume.enabled=true \
–set prometheus.persistentVolume.size=200Gi \
–set grafana.enabled=true \
–set grafana.service.type=NodePort
NAME: prometheus
LAST DEPLOYED: 2023-07-01 11:00:00.000000000 +0000 UTC
NAMESPACE: monitoring
STATUS: deployed
REVISION: 1
LAST DEPLOYED: 2023-07-01 11:00:00.000000000 +0000 UTC
NAMESPACE: monitoring
STATUS: deployed
REVISION: 1
验证Prometheus部署
# 查看Pod状态
[root@fgedu-master ~]# kubectl get pods -n monitoring
[root@fgedu-master ~]# kubectl get pods -n monitoring
NAME READY STATUS RESTARTS AGE
prometheus-kube-prometheus-operator-5f789d769c-7k8x2 1/1 Running 0 10m,学习交流加群风哥QQ113257174。
prometheus-kube-state-metrics-56789d769c-8k9x2 1/1 Running 0 10m
prometheus-prometheus-node-exporter-789d7 1/1 Running 0 10m
prometheus-prometheus-node-exporter-89d76 1/1 Running 0 10m
prometheus-prometheus-node-exporter-9d765 1/1 Running 0 10mprometheus-prometheus-0 2/2 Running 0 10m
prometheus-kube-prometheus-operator-5f789d769c-7k8x2 1/1 Running 0 10m,学习交流加群风哥QQ113257174。
prometheus-kube-state-metrics-56789d769c-8k9x2 1/1 Running 0 10m
prometheus-prometheus-node-exporter-789d7 1/1 Running 0 10m
prometheus-prometheus-node-exporter-89d76 1/1 Running 0 10m
prometheus-prometheus-node-exporter-9d765 1/1 Running 0 10mprometheus-prometheus-0 2/2 Running 0 10m
3.2 Grafana安装与配置
访问和配置Grafana。
获取Grafana访问地址
# 获取Grafana服务端口
[root@fgedu-master ~]# kubectl get svc -n monitoring | grep grafana
[root@fgedu-master ~]# kubectl get svc -n monitoring | grep grafana
prometheus-grafana NodePort 10.100.200.40 3000:30002/TCP 10m
访问Grafana
使用浏览器访问:http://192.168.1.100:30002
默认用户名:admin,默认密码:prom-operator
配置数据源
- 在Grafana界面中,点击左侧菜单的”Configuration” > “Data sources”
- 点击”Add data source”按钮
- 选择”Prometheus”
- 在”URL”字段中输入:http://prometheus-prometheus.monitoring.svc.cluster.local:9090
- 点击”Save & Test”按钮
导入仪表板
- 在Grafana界面中,点击左侧菜单的”Dashboard” > “Import”
- 输入仪表板ID:15762(Kubernetes集群监控仪表板)
- 点击”Load”按钮
- 选择Prometheus数据源
- 点击”Import”按钮
3.3 监控指标与告警配置
配置Prometheus告警规则。
查看默认告警规则
# 查看默认告警规则
[root@fgedu-master ~]# kubectl get prometheusrules -n monitoring
[root@fgedu-master ~]# kubectl get prometheusrules -n monitoring
NAME AGE
prometheus-kube-prometheus-alertmanager.rules 10m
prometheus-kube-prometheus-etcd.rules 10m
prometheus-kube-prometheus-general.rules 10m
prometheus-kube-prometheus-k8s.rules 10m
prometheus-kube-prometheus-kubelet.rules 10m
prometheus-kube-prometheus-node-exporter.rules 10m
prometheus-kube-prometheus-node.rules 10m
prometheus-kube-prometheus-prometheus.rules 10m
prometheus-kube-prometheus-alertmanager.rules 10m
prometheus-kube-prometheus-etcd.rules 10m
prometheus-kube-prometheus-general.rules 10m
prometheus-kube-prometheus-k8s.rules 10m
prometheus-kube-prometheus-kubelet.rules 10m
prometheus-kube-prometheus-node-exporter.rules 10m
prometheus-kube-prometheus-node.rules 10m
prometheus-kube-prometheus-prometheus.rules 10m
创建自定义告警规则
,更多视频教程www.fgedu.net.cn。
# 创建自定义告警规则
[root@fgedu-master ~]# cat > custom-alerts.yaml << EOFapiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: custom-alerts namespace: monitoring spec: groups: - name: custom.rules rules: - alert: HighPodCPUUsage expr: sum(rate(container_cpu_usage_seconds_total{namespace="fgedu-production"}[5m])) by (pod) / sum(kube_pod_container_resource_limits_cpu_cores{namespace="fgedu-production"}) by (pod) > 0.8
for: 5m
labels:
severity: warning
annotations:
summary: High Pod CPU Usage
description: Pod {{ $labels.pod }} in namespace {{ $labels.namespace }} is using more than 80% of its CPU limit
– alert: HighPodMemoryUsage
expr: sum(container_memory_usage_bytes{namespace=”fgedu-production”}) by (pod) / sum(kube_pod_container_resource_limits_memory_bytes{namespace=”fgedu-production”}) by (pod) > 0.8
for: 5m
labels:
severity: warning
annotations:
summary: High Pod Memory Usage
description: Pod {{ $labels.pod }} in namespace {{ $labels.namespace }} is using more than 80% of its memory limit
EOF
[root@fgedu-master ~]# cat > custom-alerts.yaml << EOFapiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: custom-alerts namespace: monitoring spec: groups: - name: custom.rules rules: - alert: HighPodCPUUsage expr: sum(rate(container_cpu_usage_seconds_total{namespace="fgedu-production"}[5m])) by (pod) / sum(kube_pod_container_resource_limits_cpu_cores{namespace="fgedu-production"}) by (pod) > 0.8
for: 5m
labels:
severity: warning
annotations:
summary: High Pod CPU Usage
description: Pod {{ $labels.pod }} in namespace {{ $labels.namespace }} is using more than 80% of its CPU limit
– alert: HighPodMemoryUsage
expr: sum(container_memory_usage_bytes{namespace=”fgedu-production”}) by (pod) / sum(kube_pod_container_resource_limits_memory_bytes{namespace=”fgedu-production”}) by (pod) > 0.8
for: 5m
labels:
severity: warning
annotations:
summary: High Pod Memory Usage
description: Pod {{ $labels.pod }} in namespace {{ $labels.namespace }} is using more than 80% of its memory limit
EOF
# 应用告警规则
[root@fgedu-master ~]# kubectl apply -f custom-alerts.yaml
[root@fgedu-master ~]# kubectl apply -f custom-alerts.yaml
prometheusrule.monitoring.coreos.com/custom-alerts created
Part04-生产案例与实战讲解
4.1 企业级监控平台部署
某企业需要部署一个企业级的监控平台,用于监控多个Kubernetes集群。
案例背景
- 集群数量:5个Kubernetes集群
- 节点数量:每个集群10-20个节点
- 监控需求:
- 集群健康状态
- 应用性能指标
- 基础设施状态
- 业务关键指标
- 告警需求:
- 邮件通知
- 短信通知
- 微信通知
,更多学习教程公众号风哥教程itpux_com。
部署方案
# 1. 部署中央监控集群
# 在一个专门的集群中部署Prometheus联邦集群和Grafana
helm install prometheus prometheus-community/kube-prometheus-stack \
–namespace monitoring \
–set prometheus.retention=30d \
–set prometheus.resources.requests.memory=16Gi \
–set prometheus.resources.limits.memory=16Gi \
–set prometheus.persistentVolume.enabled=true \
–set prometheus.persistentVolume.size=500Gi \
–set grafana.enabled=true \
–set grafana.service.type=LoadBalancer \
–set alertmanager.enabled=true \
–set alertmanager.config.receivers[0].name=email \
–set alertmanager.config.receivers[0].email_configs[0].to=alert@fgedu.net.cn \
–set alertmanager.config.receivers[0].email_configs[0].from=alert@fgedu.net.cn \
–set alertmanager.config.receivers[0].email_configs[0].smarthost=smtp.fgedu.net.cn:587 \
–set alertmanager.config.receivers[0].email_configs[0].auth_username=alert@fgedu.net.cn \
–set alertmanager.config.receivers[0].email_configs[0].auth_password=password \
–set alertmanager.config.route.receiver=email
# 2. 在每个业务集群部署Prometheus代理
for cluster in cluster1 cluster2 cluster3 cluster4 cluster5; do
kubectl –context $cluster apply -f prometheus-agent.yaml
done
# 3. 配置联邦集群
# 在中央Prometheus中配置联邦集群,从各个业务集群的Prometheus代理拉取数据
# 4. 配置Grafana仪表板
# 创建统一的监控仪表板,展示所有集群的状态
# 5. 配置告警规则
# 针对不同级别的告警设置不同的通知方式
# 在一个专门的集群中部署Prometheus联邦集群和Grafana
helm install prometheus prometheus-community/kube-prometheus-stack \
–namespace monitoring \
–set prometheus.retention=30d \
–set prometheus.resources.requests.memory=16Gi \
–set prometheus.resources.limits.memory=16Gi \
–set prometheus.persistentVolume.enabled=true \
–set prometheus.persistentVolume.size=500Gi \
–set grafana.enabled=true \
–set grafana.service.type=LoadBalancer \
–set alertmanager.enabled=true \
–set alertmanager.config.receivers[0].name=email \
–set alertmanager.config.receivers[0].email_configs[0].to=alert@fgedu.net.cn \
–set alertmanager.config.receivers[0].email_configs[0].from=alert@fgedu.net.cn \
–set alertmanager.config.receivers[0].email_configs[0].smarthost=smtp.fgedu.net.cn:587 \
–set alertmanager.config.receivers[0].email_configs[0].auth_username=alert@fgedu.net.cn \
–set alertmanager.config.receivers[0].email_configs[0].auth_password=password \
–set alertmanager.config.route.receiver=email
# 2. 在每个业务集群部署Prometheus代理
for cluster in cluster1 cluster2 cluster3 cluster4 cluster5; do
kubectl –context $cluster apply -f prometheus-agent.yaml
done
# 3. 配置联邦集群
# 在中央Prometheus中配置联邦集群,从各个业务集群的Prometheus代理拉取数据
# 4. 配置Grafana仪表板
# 创建统一的监控仪表板,展示所有集群的状态
# 5. 配置告警规则
# 针对不同级别的告警设置不同的通知方式
4.2 监控面板与告警实战
使用Grafana创建监控面板和配置告警。
创建自定义仪表板
- 在Grafana界面中,点击左侧菜单的”Dashboard” > “New dashboard”
- 点击”Add new panel”按钮
- 在”Query”选项卡中,选择Prometheus数据源
- 输入查询语句:`sum(rate(container_cpu_usage_seconds_total{namespace=”fgedu-production”}[5m])) by (pod)`
- 在”Visualization”选项卡中,选择图表类型:如”Graph”
- 在”General”选项卡中,设置面板标题:”Pod CPU Usage”
- 点击”Apply”按钮
- 点击”Save dashboard”按钮,保存仪表板
配置告警通知
- 在Grafana界面中,点击左侧菜单的”Alerting” > “Notification channels”
- 点击”Add channel”按钮
- 输入通道名称:”Email”
- 选择类型:”Email”
- 输入收件人邮箱:alert@fgedu.net.cn
- 点击”Test”按钮测试通知
- 点击”Save”按钮
,from K8S+DB视频:www.itpux.com。
。
创建面板告警
- 编辑已创建的面板
- 点击”Alert”选项卡
- 点击”Create Alert”按钮
- 设置告警规则:
- 评估时间范围:5m
- 条件:avg() OF query(A, 5m, now) IS ABOVE 0.8
- 设置通知:选择之前创建的”Email”通道
- 点击”Apply”按钮
Part05-风哥经验总结与分享
5.1 监控系统最佳实践
- 监控指标选择:选择关键指标,避免监控过多无意义的指标
- 告警规则设置:设置合理的告警阈值,避免过多的误报
- 数据保留策略:根据业务需求设置合理的数据保留时间
- 监控系统高可用:部署高可用的Prometheus和Grafana
- 监控系统性能优化:
- 合理设置抓取间隔
- 使用标签选择性抓取
- 优化存储配置
- 监控可视化:创建直观、易用的监控仪表板
- 告警通知管理:设置合理的告警级别和通知方式
5.2 常见问题与解决方案
问题 原因 解决方案
Prometheus内存使用过高 数据量过大 调整数据保留时间或增加内存
Prometheus抓取失败 网络问题或目标服务故障 检查网络连接和目标服务状态
Grafana面板加载慢 查询复杂或数据量过大 优化查询语句或增加Grafana资源
告警误报 告警阈值设置不合理 调整告警阈值和持续时间
监控数据丢失 存储配置不当 检查存储配置和持久化设置
Prometheus内存使用过高 数据量过大 调整数据保留时间或增加内存
Prometheus抓取失败 网络问题或目标服务故障 检查网络连接和目标服务状态
Grafana面板加载慢 查询复杂或数据量过大 优化查询语句或增加Grafana资源
告警误报 告警阈值设置不合理 调整告警阈值和持续时间
监控数据丢失 存储配置不当 检查存储配置和持久化设置
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
