阿里云Prometheus监控

更新时间: 2023-09-01 17:41:23

您可以通过阿里云Prometheus监控查看ACK Serverless集群预先配置的监控大盘和监控性能指标。本文介绍如何在ACK Serverless中接入阿里云Prometheus监控、如何配置Prometheus监控报警和自定义Prometheus监控指标,并通过Grafana展示。

阿里云Prometheus监控介绍

阿里云Prometheus监控全面对接开源Prometheus生态,支持类型丰富的组件监控,提供多种开箱即用的预置监控大盘,且提供全面托管的Prometheus服务。借助阿里云Prometheus监控,您无需自行搭建Prometheus监控系统,因而无需关心底层数据存储、数据展示、系统运维等问题。

有关阿里云Prometheus监控的更多信息,请参见什么是可观测监控 Prometheus 版

Prometheus监控组件

ACK Serverless Pro集群支持安装托管版和非托管版Prometheus监控组件。默认安装托管版Prometheus监控组件。

  • 托管版:由阿里Prometheus云服务直接采集您集群中的容器监控数据,提供开箱即用以及Serverless化的体验。

  • 非托管版:需部署Promethes的采集组件、Kube-State-Metrics等组件至您的集群中,且至少需启动2个默认单副本的弹性容器实例,总规格为1.5 core CPUs、1.5GB Memory。具体规格会随集群数据量动态扩缩。ECI实例价格,请参见ECI实例概述

开启阿里云Prometheus监控

方式一:创建集群时开启

在创建集群的组件配置页面,选中使用Prometheus监控服务。具体操作,请参见创建ACK Serverless集群

image.png
    说明

    在创建集群时,系统默认选中使用Prometheus监控服务

    集群创建完成,系统将自动配置阿里云Prometheus监控服务。

方式二:在已有集群中开启

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

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

  3. Prometheus监控页面,单击开始安装

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

集群默认安装托管版Prometheus监控组件,如需使用非托管版Prometheus监控组件,您需在运维管理>组件中心页面,先卸载托管版ack-arms-prometheus监控组件后,才可以查看和安装非托管版组件ack-arms-prometheus

image.png
说明

如果不存在ack-arms-prometheus卡片,说明当前ACK Serverless集群所在地域不支持开启阿里云Prometheus监控。Prometheus监控具体开服地域,请参见开服地域

查看阿里云Prometheus Grafana大盘

Promethues监控页面,单击需要查看的Grafana监控大盘名,即可查看相应的监控数据。

配置Prometheus监控报警

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

步骤一:创建联系人

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

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

  3. 联系人页签单击新建联系人
  4. 新建联系人对话框中输入联系人姓名,根据实际需求设置以下参数,然后单击确认
    参数说明
    姓名自定义联系人姓名。
    手机号码设置联系人的手机号码后,可以通过电话和短信的方式接收告警通知。
    说明 仅验证过的手机号码可以在通知策略中使用电话的通知方式,验证手机号的操作,请参见验证手机号
    邮箱设置联系人的邮箱地址后,可以通过邮箱接收告警通知。
    联系人组选择联系人需要加入的联系人组。创建联系人组的操作,请参见联系人组
    电话通知失败补发类型选择电话通知失败后,通知补发类型。

    您可以在联系人页签设置全局默认值,具体操作,请参见下文联系人默认配置

    重要
    • 手机号码和邮箱至少填写一项,每个手机号码或邮箱只能用于一个联系人。
    • 新版联系人不支持设置钉钉机器人,如果您需要创建钉钉机器人,请在钉钉/飞书/企微页签新建钉钉机器人。具体操作,请参见钉钉机器人。已在旧版联系人中创建的钉钉机器人则保留不变。

步骤二:配置告警规则

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

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

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

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

自定义Prometheus监控指标并通过Grafana展示

方式一:通过Annotations自定义指标监控

通过给Deployment Pod Template加入Annotations的方式自定义监控,阿里云Prometheus监控将会通过Pod默认务发现的方式自动获取Pod自定义指标。详细信息,请参见管理Kubernetes集群服务发现

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

  2. 创建应用。

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

    2. 无状态页面,单击使用镜像创建

    3. 应用基本信息页面,填写应用的基本信息,单击下一步

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

      image.png
  3. 创建服务。

    1. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择网络 > 服务

    2. 单击服务页面右上角的创建。在创建服务页面,需配置如下配置项。

      配置项

      说明

      名称

      自定义。

      类型

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

      关联

      选择所创建的应用。

      端口映射

      设置服务端口容器端口

    3. 单击创建,完成服务创建。

      关于创建服务的更多操作,请参见创建服务

  4. 配置自定义指标。

    1. 登录Prometheus控制台

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

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

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

    4. 单击Targets页签,可以看到自定义的指标已经配置成功。

      自定义指标
  5. 容器服务管理控制台,访问所创建服务暴露出来的公网IP,增加指标值。

    image.png

    具体指标的配置,请参见DATA MODEL增加指标值

  6. 自定义指标监控。

    1. 登录Prometheus控制台

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

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

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

      image.png
  7. 保存配置即可观察到自定义指标的Grafana图形。

    Grafana

方式二:通过ServiceMonitor自定义指标监控

通过ServiceMonitor方式自定义指标监控在部署时无需配置Annotations,但是要给Service对象添加标签。

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

  2. 创建应用。

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

    2. 无状态页面,单击使用镜像创建

    3. 应用基本信息页面,填写应用的基本信息,单击下一步

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

      以镜像yejianhonghong/pindex为示例。

      image.png
    5. 在高级配置页面单击创建,完成应用创建。

  3. 创建服务。

    1. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择网络 > 服务

    2. 单击服务页面右上角的创建。在创建服务页面,需配置如下配置项。

      配置项

      说明

      名称

      自定义。

      类型

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

      关联

      选择所创建的应用。

      端口映射

      设置服务端口容器端口

      标签

      添加标签。该标签将被用于ServiceMonitor的selector。

      image..png
    3. 单击创建,完成服务创建。

      关于创建服务的更多操作,请参见创建服务

  4. 配置自定义指标。使Prometheus获得服务Scape Endpioint。

    1. 登录Prometheus控制台

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

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

    4. 配置页签下单击ServiceMonitor

    5. ServiceMonitor页签下单击添加ServiceMonitor创建ServiceMonitor。

      模板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

      单击确定完成ServiceMonitor创建。

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

    6. Targets页签,可见Prometheus已经获得服务Scape Endpioint。

      Scape Endpioint
      说明

      这里ServiceMonitor定义比Annotations方式更直观,指出了Namespace和Service名称。

  5. 容器服务管理控制台,访问所创建服务暴露出来的公网IP,增加指标值。

    image.png

    具体指标的配置,请参见DATA MODEL增加指标值

  6. 自定义指标监控。

    1. 登录Prometheus控制台

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

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

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

      image.png
  7. 保存配置即可观察到自定义指标的Grafana图形。

    Grafana

常见问题

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

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

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

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

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

    说明

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

为什么GPU监控无法部署?

说明

该问题仅非托管Prometheus会涉及。

如果您的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会涉及。

只删除阿里云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

阿里云首页 容器服务 Kubernetes 版 ACK 相关技术圈