您可以通过阿里云Prometheus监控查看ACK Serverless集群预先配置的监控大盘和监控性能指标。本文介绍如何在ACK Serverless中接入阿里云Prometheus监控、如何配置Prometheus监控报警和自定义Prometheus监控指标,并通过Grafana展示。
阿里云Prometheus监控介绍
阿里云Prometheus监控全面对接开源Prometheus生态,支持类型丰富的组件监控,提供多种开箱即用的预置监控大盘,且提供全面托管的Prometheus服务。
集群类型 | 支持的Prometheus监控组件 |
ACK Serverless集群Pro版 | 支持安装托管版和非托管版Prometheus监控组件。默认安装托管版Prometheus监控组件。
|
ACK Serverless集群基础版 | 仅支持非托管版Prometheus监控组件,为非托管采集Agent(默认单副本占用集群资源为3C4G),提供基础指标,支持数据存储时长为7天。 |
借助阿里云Prometheus监控,您无需自行搭建Prometheus监控系统,无需关心底层数据存储、数据展示、系统运维等问题。关于阿里云Prometheus监控的更多信息,请参见什么是Prometheus监控。
步骤一:开启阿里云Prometheus监控
创建集群时开启
在创建集群的组件配置页面,选中使用Prometheus监控服务。具体操作,请参见创建ACK Serverless集群。
在创建集群时,系统默认选中使用Prometheus监控服务。
集群创建完成,系统将自动配置阿里云Prometheus监控服务。
集群默认安装托管版Prometheus监控组件,如需使用非托管版Prometheus监控组件,您需要在运维管理>组件中心页面先卸载托管版的ack-arms-prometheus
监控组件后,才可以查看和安装非托管版组件ack-arms-prometheus。
如果不存在ack-arms-prometheus卡片,说明当前ACK Serverless集群所在地域不支持开启阿里云Prometheus监控。Prometheus监控具体开服地域,请参见开服地域。
在已有集群中开启
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在Prometheus 监控页面,按照页面提示完成相关组件的安装和监控大盘的检查。
控制台会自动安装组件、检查监控大盘。安装完成后,您可以单击各个页签查看相应监控数据。
步骤二:查看阿里云Prometheus Grafana大盘
在容器服务管理控制台的Prometheus 监控页面,切换页签选择需要查看的Grafana监控大盘,获取相应的监控数据。
(可选)步骤三:配置Prometheus监控报警
为监控任务创建报警可在满足报警条件时通过邮件、短信、钉钉等渠道实时报警,主动帮助您发现异常。报警规则被触发时,系统会向您指定的联系人分组发送通知。创建联系人分组前,您需要先创建联系人,用于指定联系人接收通知的手机号码和邮箱地址,也可以提供自动发送报警通知的钉钉机器人地址。
1、创建联系人
登录Prometheus控制台,在Prometheus 监控页面左上角,选择ACK集群所在的地域。
在左侧导航栏,选择告警管理>通知对象。
在联系人页签单击新建联系人。
按照页面提示,配置联系人信息。
关于配置流程和配置项详细说明,请参见联系人。
2、配置告警规则
登录Prometheus控制台,在左侧导航栏,单击实例列表。
在页面顶部选择ACK集群所在的地域,然后单击目标实例名称进入对应实例页面。
在左侧导航栏,单击告警规则,在告警规则列表,单击对应告警操作列的编辑,配置告警规则,配置完成后单击保存,可快速创建对应指标项的告警规则。
更多信息,请参见Prometheus告警规则(新版)或Prometheus告警规则(旧版)。
步骤四:自定义Prometheus监控指标并通过Grafana展示
通过Annotations自定义指标监控
通过给Deployment Pod Template加入Annotations的方式自定义监控,阿里云Prometheus监控将会通过Pod默认服务发现的方式自动获取Pod自定义指标。详细信息,请参见管理Kubernetes集群服务发现。
登录容器服务管理控制台,在左侧导航栏选择集群。
创建应用。
关于创建Deployment的更多信息,请参见创建无状态工作负载Deployment。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载>无状态。
在无状态页面,单击使用镜像创建,在应用基本信息页面,填写应用的基本信息,然后单击下一步。
在容器配置页面,配置容器镜像和所需资源,创建一个Web应用,暴露5000端口,然后单击下一步。
镜像名称:本文以
yejianhonghong/pindex:latest
为例。端口设置:本文以名称为
web
、容器端口为5000
,协议为TCP
为例。
在高级配置页面,创建Service并添加Pod Annotation。
创建Service。
在服务(Service)区域,单击创建,然后按页面提示配置Service信息。
关于创建服务的更多信息,请参见创建服务。
配置项
说明
服务名称
自定义,例如
custom-metrics-pindex
。服务类型
选择负载均衡型服务,并选择通过公网访问。
端口映射
设置名称、服务端口和容器端口,例如分别为
web
、5000
、5000
。在Pod注解区域,单击添加,添加Pod Annotation。
prometheus.io/scrape
:设置为true
,表示Prometheus将自动抓取(scrape)指标。prometheus.io/port
:本文设置为5000
,表示Prometheus要抓取(scrape)的Endpoint端口为5000
。prometheus.io/path
:本文设置为/access
,表示Prometheus要抓取(scrape)的Endpoint路径为/access
。
单击创建,完成应用创建。
配置自定义指标。
在实例列表页面顶部,选择ACK集群所在的地域,然后单击目标实例名称进入对应实例页面。
在实例详情页面的左侧导航栏单击服务发现,单击配置页签,通过添加ServiceMonitor、PodMonitor配置可观测监控Prometheus版的采集规则。
关于配置自定义指标的更多操作,请参见管理Kubernetes集群服务发现。
配置完成后,单击Targets页签,查看自定义的指标是否配置成功。
单击Endpoint列的链接,增加访问指标值。
关于指标配置的更多信息,请参见DATA MODEL。
自定义指标监控。
在Prometheus控制台的实例列表页面,单击目标实例名称进入对应实例页面。
在左侧导航栏单击大盘列表,单击Prometheus任意一个预置的图表进入Grafana,然后先单击右上角的图标,再单击Add a new panel添加Panel。
选择对应的集群数据源和填写PromQL。例如,将模式选为Code,Metrics填写为
current_person_counts
。
保存配置,观察自定义指标的Grafana图形。
通过ServiceMonitor自定义指标监控
通过ServiceMonitor方式自定义指标监控时,您部署应用时无需配置Annotations,可以通过为Service对象添加标签来实现。
登录容器服务管理控制台,在左侧导航栏选择集群。
创建应用。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载>无状态。
在无状态页面,单击使用镜像创建,
在应用基本信息页面,填写应用的基本信息,单击下一步。
在容器配置页面,配置容器镜像和所需资源,并创建一个Web应用,暴露5000端口,然后单击下一步。
以镜像
yejianhonghong/pindex
为示例。在高级配置页面单击创建,完成应用创建。
配置自定义指标。使Prometheus获得Service的Scrape Endpoint。
在Prometheus 监控页面左上角,选择ACK集群所在的地域,然后单击目标实例名称进入对应实例页面。
在左侧导航栏,单击服务发现,单击配置页签,然后在配置页签下单击ServiceMonitor。
在ServiceMonitor页签,单击添加ServiceMonitor创建ServiceMonitor,然后单击确定。
关于配置自定义指标的更多操作,请参见管理Kubernetes集群服务发现。
在Targets页签,可见Prometheus已经获得服务Scrape Endpoint。
说明相较于Annotation的实现方式,通过ServiceMonitor定义自定指标时,Label能够展示Namespace和Service名称。
单击Endpoint列的链接,增加访问指标值。
关于指标配置的更多信息,请参见DATA MODEL。
自定义指标监控。
在Prometheus 监控页面左上角,选择容器服务K8s集群所在的地域,然后单击目标实例名称进入对应实例页面。
在左侧导航栏单击大盘列表,单击Prometheus任意一个预置的图表进入Grafana,然后先单击右上角的图标,再单击Add a new panel添加Panel 。
选择对应的集群数据源和填写PromQL。例如,选择模式为
Code
,将Metrics填写为current_person_counts
。
保存配置,观察自定义指标的Grafana图形。
常见问题
如何查看ack-arms-prometheus组件版本?
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在组件管理页面,单击日志与监控页签,找到ack-arms-prometheus组件。
在组件下方显示当前版本信息,如有新版本需要升级,可单击版本右侧升级完成组件升级。
说明当已安装的组件版本不是最新版本时,才会显示升级操作。
为什么GPU监控无法部署?
该问题仅非托管Prometheus会涉及。
如果您的GPU节点上存在污点,可能导致GPU监控无法部署。您可以通过以下步骤查看GPU节点的污点情况。
执行以下命令,查看目标GPU节点的污点情况。
如果您的GPU节点拥有自定义的污点,可找到污点相关的条目。本文以
key
为test-key
、value
为test-value
、effect
为NoSchedule
为例说明:kubectl describe node cn-beijing.47.100.***.***
预期输出:
Taints:test-key=test-value:NoSchedule
通过以下两种方式处理GPU节点的污点。
执行以下命令,删除GPU节点的污点。
kubectl taint node cn-beijing.47.100.***.*** test-key=test-value:NoSchedule-
对GPU节点的污点进行容忍度声明,允许Pod调度到该污点的节点上。
# 1.执行以下命令,编辑ack-prometheus-gpu-exporter。 kubectl edit daemonset -n arms-prom ack-prometheus-gpu-exporter # 2. 在YAML中添加如下字段,声明对污点的容忍度。 #省略其他字段。 #tolerations字段添加在containers字段上面,且与containers字段同级。 tolerations: - key: "test-key" operator: "Equal" value: "test-value" effect: "NoSchedule" containers: #省略其他字段。
手动删除资源或将导致重新安装阿里云Prometheus失败,如何完整地手动删除ARMS-Prometheus?
该问题仅非托管Prometheus会涉及。
只删除阿里云Prometheus的命名空间,会导致资源删除后有残留配置,影响再次安装。您可以执行以下操作,完整地手动删除ARMS-Prometheus残余配置。
删除arms-prom命名空间。
kubectl delete namespace arms-prom
删除ClusterRole。
kubectl delete ClusterRole arms-kube-state-metrics kubectl delete ClusterRole arms-node-exporter kubectl delete ClusterRole arms-prom-ack-arms-prometheus-role kubectl delete ClusterRole arms-prometheus-oper3 kubectl delete ClusterRole arms-prometheus-ack-arms-prometheus-role kubectl delete ClusterRole arms-pilot-prom-k8s kubectl delete ClusterRole gpu-prometheus-exporter
删除ClusterRoleBinding。
kubectl delete ClusterRoleBinding arms-node-exporter kubectl delete ClusterRoleBinding arms-prom-ack-arms-prometheus-role-binding kubectl delete ClusterRoleBinding arms-prometheus-oper-bind2 kubectl delete ClusterRoleBinding arms-kube-state-metrics kubectl delete ClusterRoleBinding arms-pilot-prom-k8s kubectl delete ClusterRoleBinding arms-prometheus-ack-arms-prometheus-role-binding kubectl delete ClusterRoleBinding gpu-prometheus-exporter
删除Role及RoleBinding。
kubectl delete Role arms-pilot-prom-spec-ns-k8s kubectl delete Role arms-pilot-prom-spec-ns-k8s -n kube-system kubectl delete RoleBinding arms-pilot-prom-spec-ns-k8s kubectl delete RoleBinding arms-pilot-prom-spec-ns-k8s -n kube-system