1. 首页 > Kubernetes教程 > 正文

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

部署Prometheus

# 创建命名空间
[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

NAME: prometheus
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

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

3.2 Grafana安装与配置

访问和配置Grafana。

获取Grafana访问地址

# 获取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

配置数据源

  1. 在Grafana界面中,点击左侧菜单的”Configuration” > “Data sources”
  2. 点击”Add data source”按钮
  3. 选择”Prometheus”
  4. 在”URL”字段中输入:http://prometheus-prometheus.monitoring.svc.cluster.local:9090
  5. 点击”Save & Test”按钮

导入仪表板

  1. 在Grafana界面中,点击左侧菜单的”Dashboard” > “Import”
  2. 输入仪表板ID:15762(Kubernetes集群监控仪表板)
  3. 点击”Load”按钮
  4. 选择Prometheus数据源
  5. 点击”Import”按钮

3.3 监控指标与告警配置

配置Prometheus告警规则。

查看默认告警规则

# 查看默认告警规则
[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

创建自定义告警规则

,更多视频教程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 ~]# 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. 配置告警规则
# 针对不同级别的告警设置不同的通知方式

4.2 监控面板与告警实战

使用Grafana创建监控面板和配置告警。

创建自定义仪表板

  1. 在Grafana界面中,点击左侧菜单的”Dashboard” > “New dashboard”
  2. 点击”Add new panel”按钮
  3. 在”Query”选项卡中,选择Prometheus数据源
  4. 输入查询语句:`sum(rate(container_cpu_usage_seconds_total{namespace=”fgedu-production”}[5m])) by (pod)`
  5. 在”Visualization”选项卡中,选择图表类型:如”Graph”
  6. 在”General”选项卡中,设置面板标题:”Pod CPU Usage”
  7. 点击”Apply”按钮
  8. 点击”Save dashboard”按钮,保存仪表板

配置告警通知

  1. 在Grafana界面中,点击左侧菜单的”Alerting” > “Notification channels”
  2. 点击”Add channel”按钮
  3. 输入通道名称:”Email”
  4. 选择类型:”Email”
  5. 输入收件人邮箱:alert@fgedu.net.cn
  6. 点击”Test”按钮测试通知
  7. 点击”Save”按钮
  8. ,from K8S+DB视频:www.itpux.com。

创建面板告警

  1. 编辑已创建的面板
  2. 点击”Alert”选项卡
  3. 点击”Create Alert”按钮
  4. 设置告警规则:
    • 评估时间范围:5m
    • 条件:avg() OF query(A, 5m, now) IS ABOVE 0.8
  5. 设置通知:选择之前创建的”Email”通道
  6. 点击”Apply”按钮

Part05-风哥经验总结与分享

5.1 监控系统最佳实践

  • 监控指标选择:选择关键指标,避免监控过多无意义的指标
  • 告警规则设置:设置合理的告警阈值,避免过多的误报
  • 数据保留策略:根据业务需求设置合理的数据保留时间
  • 监控系统高可用:部署高可用的Prometheus和Grafana
  • 监控系统性能优化
    • 合理设置抓取间隔
    • 使用标签选择性抓取
    • 优化存储配置
  • 监控可视化:创建直观、易用的监控仪表板
  • 告警通知管理:设置合理的告警级别和通知方式

5.2 常见问题与解决方案

问题 原因 解决方案
Prometheus内存使用过高 数据量过大 调整数据保留时间或增加内存
Prometheus抓取失败 网络问题或目标服务故障 检查网络连接和目标服务状态
Grafana面板加载慢 查询复杂或数据量过大 优化查询语句或增加Grafana资源
告警误报 告警阈值设置不合理 调整告警阈值和持续时间
监控数据丢失 存储配置不当 检查存储配置和持久化设置

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息