接入与配置阿里云Prometheus监控

接入阿里云Prometheus监控以全面采集ACK集群的控制面、节点和应用指标,并通过可视化大盘和实时告警提升集群性能管理效率。

快速选型

阿里云Prometheus监控全面对接开源Prometheus生态,提供全托管的监控服务。无需关心底层数据存储、数据展示、系统运维等问题。

  • Pro版(推荐):指标存储周期90天,并提供全托管的采集器,生产级SLA99.95%。提供可定制化的Grafana大盘,并预置了容器服务各组件的告警规则。

  • 基础版:指标存储周期7天。需自行维护采集器,仅提供基础的监控大盘。

开启Prometheus监控

已有集群中开启

  1. (条件可选)如为ACK专有集群,请先为集群进行监控策略授权

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

  3. Prometheus 监控页面,选择容器监控版本,单击开始安装

    开启监控后,将自动采集默认的基础指标,如需采集自定义指标,请参考采集自定义指标。可在当前页面查看集群监控概览节点监控应用监控网络监控存储监控等多个预置的监控大盘。

创建集群时开启

  • ACK托管集群Pro

    在创建集群的组件配置页面,容器监控栏选择容器集群监控Pro容器集群监控基础版。更多信息,请参见创建ACK托管集群

    智能托管模式Auto Mode默认启用容器集群监控基础版。
  • ACK托管集群基础版、ACS集群及ACK Serverless集群:

    在创建集群的组件配置页面,容器监控栏勾选使用阿里云可观测监控 Prometheus 版。安装版本为容器集群监控基础版。

    开启监控后,将自动采集默认的基础指标,如需采集自定义指标,请参考采集自定义指标。可在目标集群详情页左侧导航栏,选择运维管理 > Prometheus 监控查看集群监控概览节点监控应用监控网络监控存储监控等多个预置的监控大盘。

配置告警通知

为关键指标配置告警规则,发生异常时,会自动通过邮件、短信或钉钉等渠道发送通知。

  1. 登录ARMS控制台,在左侧导航栏选择告警管理 > 通知对象

  2. 通知对象页面选择通知方式,创建告警通知对象

  3. ARMS控制台左侧导航栏,选择Prometheus监控 > Prometheus告警规则

  4. Prometheus告警规则页面,单击创建Prometheus告警规则

    详细规则配置,请参见配置Prometheus告警规则

采集自定义监控指标

Prometheus监控支持多种方式采集自定义指标(例如请求QPS、处理延迟等),请参见管理容器环境自定义采集规则

关闭Prometheus监控

  1. 在目标集群详情页左侧导航栏,单击组件管理

  2. 组件管理页面,单击日志与监控页签,找到ack-arms-prometheus组件。单击卸载,然后在弹框中单击确认

计费说明

  • 集群规模监控费用:基础版免费Pro版根据集群节点规模按量计费。

  • Prometheus实例费用:采集基础指标,在默认情况下不收取费用。采集自定义指标,根据写入量、上报量、存储量及存储周期等按量计费。

如需了解详细的计费规则与定价,请参见容器监控计费

默认采集的基础指标

常见基础指标如下,更多基础指标请参见指标说明

分类

指标

描述

容器基础资源监控kubelet

container_cpu_usage_seconds_total

容器CPU使用时间总计

container_memory_usage_bytes

容器内存使用字节

container_fs_usage_bytes

容器文件系统使用字节

container_network_transmit_bytes_total

容器网络传输字节总计

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

node_cpu_seconds_total

节点CPU使用时间总计

node_memory_MemAvailable_bytes

节点可用内存大小(字节)

node_load1

节点1分钟负载

node_filesystem_avail_bytes

节点文件系统可用字节数

node_network_receive_bytes_total

累计接收字节总数

控制面组件API Server监控

apiserver_request_total

API总请求数

apiserver_request_duration_seconds_bucket

APIServer请求处理时间(以秒为单位)的桶

apiserver_current_inflight_requests

APIServer当前正在处理的请求数量

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

kube_pod_status_phase

Pod状态阶段

kube_deployment_status_replicas_available

Kubernetes Deployment可用副本数

kube_node_status_condition

节点状态条件

kube_pod_container_status_restarts_total

Pod容器重启总数

kube_deployment_spec_replicas

Kubernetes Deployment规格副本数

CoreDNS监控

coredns_dns_request_duration_seconds_bucket

CoreDNS DNS请求持续时间(秒)分位数

coredns_dns_response_rcode_count_total

CoreDNS DNS响应代码计数总计

coredns_dns_request_count_total

CoreDNS DNS请求计数总计

coredns_cache_hits_total

CoreDNS缓存命中次数总计

coredns_cache_misses_total

CoreDNS缓存未命中次数总计

集群、节点存储监控

cluster_pv_status_num_total

集群PV状态总数

cluster_pvc_status_num_total

集群PVC状态总数

container_fs_usage_bytes

容器文件系统使用字节数

node_volume_capacity_bytes_available

节点卷可用容量(字节)

node_volume_io_time_seconds_total

节点卷I/O时间总秒数

node_volume_read_bytes_total

节点卷读取字节总数

node_volume_write_bytes_total

节点卷写入字节总数

节点GPU监控gpu-exporter

DCGM_CUSTOM_CONTAINER_MEM_ALLOCATED

表示为容器分配显存

DCGM_CUSTOM_DEV_FB_ALLOCATED

表示GPU卡已分配显存占总显存的比例,值的区间为[0,1]

DCGM_CUSTOM_DEV_FB_TOTAL

表示GPU卡的总显存

DCGM_CUSTOM_PROCESS_DECODE_UTIL

表示GPU线程的解码器利用率

成本监控cost-exporter

node_current_price

当前节点实际价格

pretax_amount

当前实例对应一笔账单的应付金额

usage

当前实例对应一笔账单的资源用量

invoice_discount

当前实例对应一笔账单的优惠金额

outstanding_amount

当前实例对应一笔账单的未结清金额

Ingress监控

nginx_ingress_controller_requests

Nginx Ingress控制器请求总数

nginx_ingress_controller_request_duration_seconds_bucket

Nginx Ingress控制器请求耗时分布(秒)

nginx_ingress_controller_bytes_sent_sum

Nginx Ingress控制器 - 发送字节总计(总和)

nginx_ingress_controller_errors

Nginx Ingress控制器 - 错误数

资源调度监控

koordlet_node_resource_allocatable

节点分配资源指标

koordlet_container_resource_requests

容器资源requests指标

koordlet_container_resource_limits

容器资源limits指标

scheduler_pending_pods

调度器待处理Pod

scheduler_schedule_attempts_total

调度器调度尝试总数

scheduler_e2e_scheduling_duration_seconds_bucket

调度器端到端调度持续时间分布

scheduler_pod_scheduling_duration_seconds_bucket

调度器 Pod 调度时长分布桶(秒)

scheduler_unschedulable_pods

调度器未调度Pod

常见问题

Prometheus监控页面显示未找到相关监控大盘

开启Prometheus监控后,在目标集群详情页的运维管理 > Prometheus监控页面上,看到未找到相关监控大盘的提示,按照以下操作步骤解决。

image

  1. 重新安装Prometheus监控组件。

    1. 关闭Prometheus监控

    2. 重新安装组件:

      1. 确认卸载完成后,单击安装,然后在弹框中单击确认

      2. 等待安装完成后,返回到Prometheus监控页面查看问题是否已解决。

        如果问题仍未解决,请继续以下操作。

  2. 检查Prometheus实例接入。

    1. ARMS控制台左侧导航栏,单击接入管理

    2. 已接入环境页签,查看容器环境列表,确认是否存在与集群名称相同的容器环境。

      • 没有相应容器环境:参见通过ARMSPrometheus控制台接入

      • 有相应容器环境:单击目标容器环境操作列的探针设置,进入探针设置页面。

        检查安装探针是否正常运行。

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

  1. ACK集群列表页面,单击目标集群名称,在集群详情页左侧导航栏,单击组件管理

  2. 组件管理页面,单击日志与监控页签,找到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:
       #省略其他字段。

如何完整地手动删除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
    kubectl delete ClusterRole o11y:addon-controller:role
    kubectl delete ClusterRole arms-aliyunserviceroleforarms-clusterrole
  • 删除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
    kubectl delete ClusterRoleBinding o11y:addon-controller:rolebinding
    kubectl delete ClusterRoleBinding arms-kube-state-metrics-agent
    kubectl delete ClusterRoleBinding arms-node-exporter-agent
    kubectl delete ClusterRoleBinding arms-aliyunserviceroleforarms-clusterrolebinding
  • 删除RoleRoleBinding。

    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

如何通过Helm方式卸载阿里云Prometheus?

如通过Helm方式手动部署,或遇到环境、Helm版本问题导致的资源残留,需通过此方式卸载。

  1. ACK集群列表页面,单击目标集群名称,在集群详情页左侧导航栏,选择应用 > Helm

  2. Helm页面,定位arms-prometheus组件,然后单击操作列的删除,按照页面提示勾选清除发布记录并删除应用。

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

  1. ACK集群列表页面,单击目标集群名称,在集群详情页左侧导航栏,选择应用 > Helm

  2. Helm页面,检查是否存在ack-arms-prometheus。

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

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

    1. ACK集群列表页面,单击目标集群名称,在集群详情页左侧导航栏,选择应用 > Helm

    2. Helm页面,检查是否存在ack-arms-prometheus。

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

    1. 在集群详情页左侧导航栏,选择工作负载 > 无状态

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

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

  • 检查Agent是否安装报错。

    1. 登录ARMS控制台。在左侧导航栏,单击接入管理

    2. 已接入环境页签,查看容器环境列表,单击目标容器环境操作列的探针设置,进入探针设置页面。

如何为ACK专有集群进行监控策略授权?

  1. ACK集群列表页面,单击目标集群名称,在集群详情页左侧导航栏,单击集群信息

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

  3. 在权限策略详情页面的策略内容页签下,单击编辑策略内容

  4. 在脚本编辑框中的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",
                    "cms:CreateIntegrationPolicy",
                    "cms:ListAddonReleases",
                    "cms:UpdateAddonRelease",
                    "cms:CreateAddonRelease",
                    "cms:GetPrometheusInstance",
                    "cms:ListIntegrationPolicyStorageRequirements"
                ],
                "Resource": "*",
                "Effect": "Allow"
            }
        ]
    }

相关文档

阿里云Prometheus监控基础版升级为Pro