1. 项目概述
在AWS EKS集群中部署Prometheus和Grafana是构建云原生监控系统的标准实践。这套组合能够为运行在Kubernetes上的应用提供完整的指标采集、存储和可视化能力。作为从业多年的云架构师,我将在本文分享如何在EKS环境中高效部署这套监控方案。
Prometheus作为CNCF毕业项目,已成为云原生监控的事实标准。它通过主动拉取的方式采集指标,特别适合动态变化的Kubernetes环境。而Grafana则是目前最强大的可视化工具之一,能够将Prometheus采集的指标转化为直观的仪表盘。
2. 环境准备与前置条件
2.1 EKS集群配置要求
在开始部署前,确保您的EKS集群满足以下要求:
- Kubernetes版本1.18或更高
- 至少2个worker节点(建议使用m5.large或更大规格)
- 已配置好kubectl和helm命令行工具
- IAM用户具有创建IAM角色和策略的权限
提示:可以使用eksctl快速创建符合要求的集群:
eksctl create cluster --name monitoring-demo --version 1.21 --nodegroup-name ng-1 --node-type m5.large --nodes 3
2.2 工具版本要求
推荐使用以下工具版本组合:
- Helm 3.7+
- kubectl 1.20+
- AWS CLI 2.4+
3. Prometheus部署详解
3.1 使用Helm部署Prometheus
Prometheus官方提供了经过优化的Helm chart,我们可以直接使用:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update创建values.yaml配置文件:
alertmanager: enabled: false # 先禁用Alertmanager简化部署 prometheus: service: type: LoadBalancer # 为方便测试使用LoadBalancer storageSpec: volumeClaimTemplate: spec: storageClassName: gp2 accessModes: ["ReadWriteOnce"] resources: requests: storage: 50Gi执行部署命令:
helm install prometheus prometheus-community/kube-prometheus-stack -n monitoring --create-namespace -f values.yaml3.2 配置优化建议
生产环境需要考虑以下优化点:
- 持久化存储:建议使用EBS gp3或EFS作为存储后端
- 资源限制:为Prometheus Pod设置合理的requests/limits
- 高可用:部署2个以上Prometheus实例并配置联邦
- 数据保留:根据需求调整storage.tsdb.retention.time
4. Grafana部署与集成
4.1 部署Grafana实例
使用官方Helm chart部署Grafana:
helm repo add grafana https://grafana.github.io/helm-charts创建grafana-values.yaml:
service: type: LoadBalancer adminUser: admin adminPassword: "StrongPassword123!" persistence: enabled: true storageClassName: gp2 size: 10Gi执行部署:
helm install grafana grafana/grafana -n monitoring -f grafana-values.yaml4.2 集成Prometheus数据源
获取Prometheus服务端点:
kubectl get svc -n monitoring prometheus-kube-prometheus-prometheus在Grafana中添加数据源:
- 登录Grafana控制台(通过LoadBalancer地址)
- 导航到Configuration > Data Sources
- 选择Prometheus类型
- 输入Prometheus服务URL(如http://prometheus-kube-prometheus-prometheus.monitoring:9090)
- 保存并测试连接
5. 高级配置与优化
5.1 配置IAM角色服务账户
为Grafana配置IAM角色以实现安全访问:
- 创建IAM策略
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "aps:GetLabels", "aps:GetMetricMetadata", "aps:GetSeries", "aps:QueryMetrics" ], "Resource": "*" } ] }- 创建IAM角色并附加策略
- 配置ServiceAccount注解:
serviceAccount: annotations: eks.amazonaws.com/role-arn: arn:aws:iam::ACCOUNT_ID:role/GrafanaRole5.2 启用Grafana SigV4认证
修改grafana-values.yaml启用AWS签名认证:
grafana.ini: auth: sigv4_auth_enabled: true6. 监控仪表盘配置
6.1 导入官方仪表盘
Grafana社区提供了丰富的预置仪表盘,可以直接导入:
- 导航到Dashboard > Import
- 输入仪表盘ID(如3119为Kubernetes集群概览)
- 选择之前配置的Prometheus数据源
- 点击Import完成导入
6.2 自定义仪表盘建议
对于生产环境,建议创建以下关键仪表盘:
- 集群资源利用率(CPU/Memory/Disk)
- Pod资源消耗TopN
- 应用业务指标(如请求量、延迟等)
- 告警统计与历史
7. 运维与问题排查
7.1 常见问题解决方案
Prometheus存储空间不足:
- 增加PVC容量
- 调整数据保留时间
- 启用数据压缩
Grafana登录问题:
- 检查Secret中的admin密码
- 确认LoadBalancer安全组允许访问
数据源连接失败:
- 检查网络策略是否允许通信
- 验证Service DNS名称解析
7.2 监控系统维护建议
- 定期检查Prometheus的scrape错误
- 监控Grafana和Prometheus的资源使用情况
- 建立仪表盘和告警规则的版本控制
- 定期备份Grafana的仪表盘配置
8. 安全最佳实践
- 使用NetworkPolicy限制访问
- 为Grafana启用HTTPS
- 配置细粒度的RBAC规则
- 定期轮换IAM凭证
- 启用审计日志记录所有配置变更
这套监控方案已在多个生产环境验证,能够稳定支持日均百万级指标的采集和查询。根据实际业务需求,可以进一步扩展告警规则和自定义指标采集,构建完整的可观测性体系。