基于阿里云Prometheus监控配置监控告警并查看性能指标

您可以在ACK集群中快速启用阿里云Prometheus,以实时监控集群和容器的健康状况,并查看可视化的Grafana监控数据大盘。您还可按需配置联系人接收监控报警、配置Prometheus抓取自定义的监控指标等。

阿里云Prometheus监控介绍

阿里云Prometheus监控全面对接开源Prometheus生态,支持类型丰富的组件监控,提供多种开箱即用的预置监控大盘,且提供全面托管的Prometheus服务。阿里云Prometheus服务提供的容器监控能力分为基础版和Pro版。

  • 基础版:为非托管采集Agent(默认单副本占用集群资源为3C4G),提供基础指标,支持数据存储时长为7天。

  • Pro版:为托管采集Agent(不占用集群资源),提供基础与自定义指标,默认支持数据存储时长为90天 。

借助阿里云Prometheus监控,您无需自行搭建Prometheus监控系统,无需关心底层数据存储、数据展示、系统运维等问题。关于阿里云Prometheus监控的更多信息,请参见什么是Prometheus监控

相关计费

  • 阿里云Prometheus基础指标费用

    启用阿里云Prometheus监控功能后,ACK将采集集群中的容器监控指标。默认采集的指标均为阿里云Prometheus基础指标,在默认情况下不会产生费用。关于阿里云Prometheus基础指标的说明,请参见指标说明

    默认采集的基础指标

    启用功能后自动上报的基础指标

    • 容器基础资源监控kubelet

    • 集群应用状态监控kube-state-metrics

    • 集群节点基础资源监控node-exporter

    • 集群节点GPU监控ack-gpu-exporter

    • 托管版集群控制面组件监控指标API Server、etcd、kube-scheduler、kube-controller-manager、cloud-controller-manager

    • 集群CoreDNS基础监控指标

    • 集群Ingress-Controller基础监控指标

    重要

    如您调整了指标存储时长,或上报了自定义指标,将会产生额外计费。关于如何调整指标的存储时长,请参见如何调整指标的存储时长?;关于阿里云Prometheus的计费说明,请参见计费说明

  • 阿里云Grafana费用

    启用阿里云Prometheus监控功能后,默认使用免费的共享版Grafana展示上报的监控数据。关于Grafana的计费说明,请参见计费规则

步骤一:开启阿里云Prometheus监控

创建集群时开启

在创建集群的组件配置页面,选中使用阿里云可观测监控 Prometheus 版。具体操作,请参见创建ACK托管集群

image.png

创建集群时,系统将默认勾选使用阿里云可观测监控 Prometheus 版。集群创建完成后,系统将自动配置阿里云Prometheus监控服务。

在已有集群中开启

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > Prometheus 监控

  3. Prometheus 监控页面,按照页面提示完成相关组件的安装和监控大盘的检查。

    控制台会自动安装组件、检查监控大盘。安装完成后,您可以单击各个页签查看相应监控数据。

如果您使用的是专有版集群,请展开按照以下步骤完成授权。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择集群信息

  3. 基本信息页签下,单击Worker RAM 角色右侧的KubernetesWorkerRole-***,然后在RAM角色页面的权限管理页签,单击权限策略列下的k8sWorkerRole****

  4. 在权限策略详情页面的策略内容页签下,单击修改策略内容

  5. 在脚本编辑框中的Statement字段中增加以下授权规则,修改完成后单击编辑基本信息,然后单击确定

    {
        "Version": "1",
        "Statement": [
            {
                "Action": [
                    "arms:Describe*",
                    "arms:List*",
                    "arms:Get*",
                    "arms:Search*",
                    "arms:Check*",
                    "arms:Query*",
                    "arms:ListEnvironments",
                    "arms:DescribeAddonRelease",
                    "arms:InstallAddon",
                    "arms:DeleteAddonRelease",
                    "arms:ListEnvironmentDashboards",
                    "arms:ListAddonReleases",
                    "arms:CreateEnvironment",
                    "arms:UpdateEnvironment",
                    "arms:InitEnvironment",
                    "arms:DescribeEnvironment",
                    "arms:InstallEnvironmentFeature",
                    "arms:ListEnvironmentFeatures"
                ],
                "Resource": "*",
                "Effect": "Allow"
            }
        ]
    }
    
    说明

    多个策略内容需要用英文半角逗号(,)分隔。

步骤二:查看阿里云Prometheus Grafana大盘

容器服务管理控制台Prometheus 监控页面,切换页签选择需要查看的Grafana监控大盘,获取相应的监控数据。

(可选)步骤三:配置Prometheus监控报警

为监控任务创建报警可在满足报警条件时通过邮件、短信、钉钉等渠道实时报警,主动帮助您发现异常。报警规则被触发时,系统会向您指定的联系人分组发送通知。创建联系人分组前,您需要先创建联系人,用于指定联系人接收通知的手机号码和邮箱地址,也可以提供自动发送报警通知的钉钉机器人地址。

1、创建联系人

  1. 登录Prometheus控制台,在Prometheus 监控页面左上角,选择ACK集群所在的地域。

  2. 在左侧导航栏,选择告警管理>通知对象

  3. 联系人页签单击新建联系人

  4. 按照页面提示,配置联系人信息。

    关于配置流程和配置项详细说明,请参见联系人

2、配置告警规则

  1. 登录Prometheus控制台,在左侧导航栏,单击实例列表

  2. 在页面顶部选择ACK集群所在的地域,然后单击目标实例名称进入对应实例页面。

  3. 在左侧导航栏,单击告警规则,在告警规则列表,单击对应告警操作列的编辑,配置告警规则,配置完成后单击保存,可快速创建对应指标项的告警规则。

    更多信息,请参见Prometheus告警规则(新版)Prometheus告警规则(旧版)

(可选)步骤四:自定义Prometheus监控指标并通过Grafana展示

配置Annotation,使用默认服务发现自定义指标监控

您可以在Deployment Pod Template中加入Annotation,以实现自定义监控。配置后,阿里云Prometheus监控会通过Pod默认服务发现的方式自动获取Pod的自定义指标。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 创建应用。

    关于创建Deployment的更多信息,请参见创建无状态工作负载Deployment

    1. 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载>无状态。

    2. 无状态页面,单击使用镜像创建,在应用基本信息页面,填写应用的基本信息,然后单击下一步

    3. 容器配置页面,配置容器镜像和所需资源,创建一个Web应用,暴露5000端口,然后单击下一步

      • 镜像名称:本文以yejianhonghong/pindex:latest为例。

      • 端口设置:本文以名称为web、容器端口为5000,协议为TCP为例。

    4. 高级配置页面,创建Service并添加Pod Annotation。

      • 创建Service。

        在服务(Service)区域,单击创建,然后按页面提示配置Service信息。

        关于创建服务的更多信息,请参见创建服务

        配置项

        说明

        服务名称

        自定义,例如custom-metrics-pindex

        服务类型

        选择负载均衡型服务,并选择通过公网访问。

        端口映射

        设置名称、服务端口和容器端口,例如分别为web50005000

      • 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

    5. 单击创建,完成应用创建。

  3. 配置自定义指标。

    1. 登录Prometheus控制台

    2. 实例列表页面顶部,选择ACK集群所在的地域,然后单击目标实例名称进入对应实例页面。

    3. 在实例详情页面的左侧导航栏单击服务发现,单击配置页签,通过添加ServiceMonitor、PodMonitor配置可观测监控Prometheus版的采集规则。

      关于配置自定义指标的更多操作,请参见管理Kubernetes集群服务发现

    4. 配置完成后,单击Targets页签,查看自定义的指标是否配置成功。

      自定义指标

  4. 单击Endpoint列的链接,增加访问指标值。

    关于指标配置的更多信息,请参见DATA MODEL

    image

    image

  5. 自定义指标监控。

    1. Prometheus控制台实例列表页面,单击目标实例名称进入对应实例页面。

    2. 在左侧导航栏单击大盘列表,单击Prometheus任意一个预置的图表进入Grafana,然后先单击右上角的image.png图标,再单击Add a new panel添加Panel。

      image.png

    3. 选择对应的集群数据源和填写PromQL。例如,将模式选为CodeMetrics填写为current_person_counts

      image

  6. 保存配置,观察自定义指标的Grafana图形。

配置Service标签,通过ServiceMonitor自定义指标监控

通过ServiceMonitor方式自定义指标监控时,您部署应用时无需配置Annotations,可以通过为Service对象添加标签来实现。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 创建应用。

    1. 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载>无状态。

    2. 无状态页面,单击使用镜像创建,在应用基本信息页面,填写应用的基本信息,然后单击下一步

    3. 容器配置页面,配置容器镜像和所需资源,并创建一个Web应用,暴露5000端口,然后单击下一步

      • 镜像名称:本文以yejianhonghong/pindex:latest为例。

      • 端口设置:本文以名称为web、容器端口为5000,协议为TCP为例。

    4. 高级配置页面,单击服务(Service)区域的创建,根据页面提示创建Service。

      关于创建服务的更多信息,请参见创建服务

      配置项

      说明

      服务名称

      自定义,例如custom-metrics-pindex

      服务类型

      选择负载均衡型服务,并选择通过公网访问。

      端口映射

      设置名称、服务端口和容器端口,例如分别为web50005000

      标签

      添加标签,例如Key为app,Value为custom-metrics-pindex。该标签将被用于ServiceMonitor的Selector。

    5. 单击创建,完成应用创建。

  3. 配置自定义指标。使Prometheus获得Service的Scrape Endpoint。

    1. 登录Prometheus控制台

    2. Prometheus 监控页面左上角,选择ACK集群所在的地域,然后单击目标实例名称进入对应实例页面。

    3. 在左侧导航栏,单击服务发现,单击配置页签,然后在配置页签下单击ServiceMonitor

    4. ServiceMonitor页签,单击添加ServiceMonitor创建ServiceMonitor,然后单击确定

      关于配置自定义指标的更多操作,请参见管理Kubernetes集群服务发现

      展开查看完整的示例YAML

      apiVersion: monitoring.coreos.com/v1
      kind: ServiceMonitor
      metadata:
        # 填写一个唯一名称。
        name: custom-metrics-pindex
        # 填写目标命名空间。
        namespace: default
      spec:
        endpoints:
        - interval: 30s
          # 填写service.yaml中对应的Port的Name字段的值。
          port: web
          # 填写Service对应的Path的值。
          path: /access
        namespaceSelector:
          any: true
          # Nginx Demo的命名空间。
        selector:
          matchLabels:
            # 填写service.yaml的Label字段的值以定位目标service.yaml。
            app: custom-metrics-pindex
    5. Targets页签,可见Prometheus已经获得服务Scrape Endpoint。

      Scape Endpioint

      说明

      相较于Annotation的实现方式,通过ServiceMonitor定义自定指标时,Label能够展示Namespace和Service名称。

  4. 单击Endpoint列的链接,增加访问指标值。

    关于指标配置的更多信息,请参见DATA MODEL

    image

    image

  5. 自定义指标监控。

    1. 登录Prometheus控制台

    2. Prometheus 监控页面左上角,选择容器服务K8s集群所在的地域,然后单击目标实例名称进入对应实例页面。

    3. 在左侧导航栏单击大盘列表,单击Prometheus任意一个预置的图表进入Grafana,然后先单击右上角的image.png图标,再单击Add a new panel添加Panel 。

      image.png

    4. 选择对应的集群数据源和填写PromQL。例如,选择模式为Code,将Metrics填写为current_person_counts

      image

  6. 保存配置,观察自定义指标的Grafana图形。

常见问题

如何查看ack-arms-prometheus组件版本?

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理

  3. 组件管理页面,单击日志与监控页签,找到ack-arms-prometheus组件。

    在组件下方显示当前版本信息,如有新版本需要升级,可单击版本右侧升级完成组件升级。

    说明

    当已安装的组件版本不是最新版本时,才会显示升级操作。

为什么GPU监控无法部署?

如果您的GPU节点上存在污点,可能导致GPU监控无法部署。您可以通过以下步骤查看GPU节点的污点情况。

  1. 执行以下命令,查看目标GPU节点的污点情况。

    如果您的GPU节点拥有自定义的污点,可找到污点相关的条目。本文以keytest-keyvaluetest-valueeffectNoSchedule为例说明:

    kubectl describe node cn-beijing.47.100.***.***

    预期输出:

    Taints:test-key=test-value:NoSchedule
  2. 通过以下两种方式处理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的命名空间,会导致资源删除后有残留配置,影响再次安装。您可以执行以下操作,完整地手动删除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

手动删除ARMS-Prometheus资源后,请在容器服务管理控制台运维管理>组件管理中,重新安装ack-arms-prometheus组件。

安装ack-arms-prometheus组件时报错xxx in use

  1. 登录容器服务管理控制台,在左侧导航栏单击集群

  2. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情

  3. 在集群管理页面左侧导航栏选择应用 > Helm

    Helm页面检查是否已有ack-arms-prometheus。

    • Helm页面已有ack-arms-prometheus,您需要进行以下操作:

      您需要在Helm页面删除ack-arms-prometheus,并在组件管理页面重新安装ack-arms-prometheus。关于安装ack-arms-prometheus的具体操作,请参见管理组件

    • Helm页面没有ack-arms-prometheus,您需要进行以下操作:

      1. 若没有ack-arms-prometheus,说明删除ack-arms-prometheus helm有资源残留,需要手动清理。关于删除ack-arms-prometheus残留资源的具体操作,请参见阿里云Prometheus监控常见问题

      2. 组件管理页面安装ack-arms-prometheus。关于安装ack-arms-prometheus的具体操作,请参见管理组件

      3. 执行以上步骤,仍无法安装ack-arms-prometheus,请提交工单

提示Component Not Installed后继续安装ack-arms-prometheus组件,安装失败

  • 检查是否已经安装ack-arms-prometheus组件。

    1. 登录容器服务管理控制台,在左侧导航栏单击集群

    2. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情

    3. 在集群管理页面左侧导航栏选择应用>Helm

      Helm页面检查是否已有ack-arms-prometheus组件。

      Helm页面已有ack-arms-prometheus

      Helm页面已有ack-arms-prometheus,您需要在Helm页面删除ack-arms-prometheus,并在组件管理页面重新安装ack-arms-prometheus。关于安装ack-arms-prometheus的具体操作,请参见管理组件

      Helm页面没有ack-arms-prometheus

      Helm页面没有ack-arms-prometheus组件,您需要进行以下操作:

      1. 若没有ack-arms-prometheus,说明删除ack-arms-prometheus helm有资源残留,需要手动清理。关于删除ack-arms-prometheus残留资源的具体操作,请参见阿里云Prometheus监控常见问题

      2. 组件管理页面安装ack-arms-prometheus。关于安装ack-arms-prometheus的具体操作,请参见管理组件

      3. 执行以上步骤,仍无法安装ack-arms-prometheus,请提交工单

  • 检查ack-arms-prometheus的日志是否有报错。

    1. 登录容器服务管理控制台,在左侧导航栏单击集群

    2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态

    3. 无状态页面顶部设置命名空间arms-prom,然后单击arms-prometheus-ack-arms-prometheus。

    4. 单击日志页签,查看日志中是否有报错。

      若日志中出现报错,请提交工单

  • 检查Agent是否安装报错。

    1. 登录ARMS控制台

    2. 在顶部菜单栏,选择地域。

    3. 在控制台左侧导航栏单击Prometheus 监控,然后在Prometheus 监控页面,单击K8s集群名称。

    4. 在左侧导航栏单击设置,在右侧页面单击设置页签。

      设置页签下可以查看健康检查结果。若有报错,请提交工单