对EKS(AWS云k8s)启用AMP(AWS云Prometheus)监控+AMG(AWS云 grafana)

问题

需要在针对已有的EKS k8s集群启用Prometheus指标监控。而且,这里使用AMP即AWS云的Prometheus托管服务。好像这个服务,只有AWS国际云才有,AWS中国云没得这个托管服务。下面,我们就来尝试在已有的EKS集群上面启用AMP监控。

步骤

下面使用页面方式创建的抓取程序有问题,创建抓取程序的安全组不能指定,如果想指定安全组,需要使用CLI工具进行抓取程序创建。

获取默认抓取程序配置命令,如下:

bash 复制代码
aws amp get-default-scraper-configuration --region us-east-1

这里会得到一个base64编码的抓取程序配置。

然后,使用下面的手动命令创建抓取程序,如下:

bash 复制代码
aws amp create-scraper --source eksConfiguration="{clusterArn='arn:aws:eks:us-east-1:xxxxxx:cluster/xxxxx', securityGroupIds=['sg-xxxxxx'],subnetIds=['subnet-xxxxxxx', 'subnet-xxxxxx', 'subnet-xxxxxxxx']}" --scrape-configuration configurationBlob="asdfaslkdgjoasdlnOQo=" --destination ampConfiguration="{workspaceArn='arn:aws:aps:us-east-1:xxxxxx:workspace/ws-xxxx-xxxx-xxxx'}"

这里使用aws amp create-scraper命令行进行抓取程序创建,主要是为了设置安全组,这里的安全组,是EKS集群的安全组,类似如下:

bash 复制代码
eks-cluster-sg-xxxx-009384

是这样描述的:

EKS created security group applied to ENI that is attached to EKS Control Plane master nodes, as well as any managed workloads.

这个安全组基本上面没有端口和ip限制。

下面使用页面创建方式作废。

打开如下页面:

点击"添加抓取程序",接下来,使用创建AMP工作空间,如下图:

这里我们直接用默认的设置就好。等待一段时间,这里的等待时间可能有点久。

ClusterRole

创建aps-collector-user用户

创建一个集群角色和用户,内容如下:

yaml 复制代码
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: aps-collector-role
rules:
  - apiGroups: [""]
    resources: ["nodes", "nodes/proxy", "nodes/metrics", "services", "endpoints", "pods", "ingresses", "configmaps"]
    verbs: ["describe", "get", "list", "watch"]
  - apiGroups: ["extensions", "networking.k8s.io"]
    resources: ["ingresses/status", "ingresses"]
    verbs: ["describe", "get", "list", "watch"]
  - nonResourceURLs: ["/metrics"]
    verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: aps-collector-user-role-binding
subjects:
- kind: User
  name: aps-collector-user
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: aps-collector-role
  apiGroup: rbac.authorization.k8s.io

保存为clusterrole-binding.yml文件。应用上述文件:

bash 复制代码
kubectl apply -f clusterrole-binding.yml

创建的集群角色aps-collector-role和用户aps-collector-user成功后,我们找到之前一步创建抓取程序时得到的roleArn,具体页面如下:

记住这个抓取程序的IAM角色,然后,将这个IAM角色映射到之前在k8s中创建的aps-collector-user用户。映射命令如下:

bash 复制代码
eksctl create iamidentitymapping --cluster cluster-name --region region-id --arn roleArn --username aps-collector-user

注意:复制到的抓取程序roleArn,需要去掉aws-service-role/scraper.aps.amazonaws.com/这一段,才能用eksctl命令创建映射。

具体了例子如下:

bash 复制代码
eksctl create iamidentitymapping --cluster uat --region us-east-1 --arn arn:aws:iam::xxxxxxxxxxx:role/AWSServiceRoleForAmazonPrometheusScraper_xxxxxx --username aps-collector-user
2024-04-16 16:50:15 [ℹ]  checking arn arn:aws:iam::xxxxxxxxxxx:role/AWSServiceRoleForAmazonPrometheusScraper_xxxxxx against entries in the auth ConfigMap
2024-04-16 16:50:15 [ℹ]  adding identity "arn:aws:iam::xxxxxxxxxxx:role/AWSServiceRoleForAmazonPrometheusScraper_xxxxxx" to auth ConfigMap

查看ConfigMap映射,如下命令:

bash 复制代码
eksctl get iamidentitymapping --cluster uat --region=us-east-1

IAM Identity Center

因为我们使用IAM Identity Center中的用户,登录Grafana Web页面。所以,我们先要用管理账号登录aws,在IAM Identity Center中创建用户和用户组。如果用成员账号登录IAM Identity Center中创建用户和用户组,在后面的AMG(AWS云 grafana)中会看不到的,所以,我们需要使用管理账号在IAM Identity Center中创建用户和用户组。在下面界面,使用管理账号创建用户和用户组,下面是具体页面入口:

AMG(AWS云 grafana)

按上述方式创建完用户和用户组之后,我们开始创建grafana工作区。开始创建grafana工作区,如下图:

设置grafana工作区,如下图:

设置数据源,设置访问权限,如下图:

最后审计一片,如果没问题,就直接创建工作区,如下图:

等待一段时间,可能这里等待时间有点长。

配置IAM Identity Center用户组访问权限

最后,在grafana工作区配置IAM Identity Center用户组访问权限,具体如下图:

设置admin用户组为管理员权限,如下图:

效果如下:

打开grafana web页面

使用IAM Identity Center中admin用户组的成员登录,这个grafana页面。效果如下:

设置grafana的数据源

在grafana控制台直接点击"在Grafana中配置",如下图:

使用IAM Identity Center中admin用户组的成员登录,选择AMP所在云区,就可以看到之前,我们创建的AMP工作区,如下图:

添加完数据源之后,就是一些常规的prometheus操作了。

到这里就差不多完成了AMP+AMG对EKS的监控了。

然后,进入仪表盘倒入页面,如下图:

导入315仪表盘。如下图:

最终效果,如下图:

总结

AMP+AMG监控EKS这一套,在AWS云上面,在2024年4月这个时间点,感觉还是不很成熟,不过,比之前预览版本的prometheus好多了,之前预览版本的AMP,还得在EKS集群安装一个prometheus服务器。感觉有点画蛇添足。现在这个版本AMP,只需要在集群安装一个抓取程序就可以了。不过,页面新建的抓取程序在现在这个时间点,还不能设置安全组,有点小问题。得使用CLI建抓取程序才行。整体来说AWS云托管Prometheus,托管Grafana,来监控k8s集群,总比没有要好。

参考

相关推荐
运维开发王义杰3 小时前
金融安全生命线:用AWS EventBridge和CloudTrail构建主动式入侵检测系统
安全·金融·aws
木鱼时刻11 小时前
容器与 Kubernetes 基本概念与架构
容器·架构·kubernetes
码上淘金13 小时前
【Prometheus 】通过 Pushgateway 上报指标数据
prometheus
长征coder18 小时前
AWS MySQL 读写分离配置指南
mysql·云计算·aws
chuanauc21 小时前
Kubernets K8s 学习
java·学习·kubernetes
庸子1 天前
基于Jenkins和Kubernetes构建DevOps自动化运维管理平台
运维·kubernetes·jenkins
李白你好1 天前
高级运维!Kubernetes(K8S)常用命令的整理集合
运维·容器·kubernetes
Connie14511 天前
k8s多集群管理中的联邦和舰队如何理解?
云原生·容器·kubernetes
墨痕诉清风2 天前
OpenSearch添加仪表盘(elastic、es)
aws·es·waf·opensearch·elastic
伤不起bb2 天前
Kubernetes 服务发布基础
云原生·容器·kubernetes