全托管服务监控报警配置-ACK部署方案

本文为服务商介绍计算巢全托管服务-ACK部署方案中业务监控和报警的配置方案。

说明

ACK部署方案中的托管版单租服务(每个用户独享集群)和托管版多租服务(多个用户共享集群)接入Prometheus的解决方案一致,都是通过配置ACK集群中的Prometheus的租户指标转发能力,实现用户侧和服务商侧均能看到服务实例的监控指标。(技术支持钉钉群:31045016300)

工作原理

image

  • 计算巢采用了阿里云ARMS提供的Prometheus多租监控的方案。

  • 阿里云Prometheus服务内置了多租能力支持,在采集侧agent端会根据workload资源(支持Pod/Namespace级别)上特定的租户标签来区分租户指标,不同租户的指标会分发到租户对应的云服务实例中。

  • 存储侧天然支持多租隔离特征。接入的服务商需要在相应的租户workload资源上打上规定的“租户标签”即可。

  • 计算巢的全托管多租服务实例是以namespace来隔离各个租户的资源的,当对Namespace打上相应的租户标签,后端程序可实现租户的指标自动转发到租户对应的云服务实例中。

  • 另外通过设置服务商的RemoteWrite,可以把租户的监控数据再投递一份到服务商的账号下,即可实现服务商查看所有租户的监控数据,租户仅可查看自己的监控数据。

操作步骤

步骤一:配置ACK集群的Prometheus组件

Prometheus本身不支持指标转发功能,阿里云托管的Prometheus进行额外的配置后,才能将与用户应用相关的监控指标转发给具体的用户。

托管版单租场景

在托管版单租场景中,计算巢将此配置过程封装为ROS模板的一个模块,您可直接在ROS模板中使用。

  1. 在创建服务时将此模板内容集成至ROS模板中,模板的示例及说明如下所示。

    • 模板示例:

      ClusterArmsConfig:
        Type: 'MODULE::ACS::ComputeNest::AckArmsConfig'
        Version: v1
        Properties:
          ClusterId:
            Fn::If:
              - Condition: CreateACKCondition
              - Ref: ManagedKubernetesCluster
              - Ref: ClusterId
          WhetherSupplierNeedMetric: true
          AccessKeyID: LTAI****************
          AccessKeySecret: yourAccessKeySecret
          SupplierAliuid: 15634578xxxxxx
    • 参数说明:

      • WhetherSupplierNeedMetric:表示服务商是否需要收到租户的数据,如果服务商也需要收到租户的指标,则需要设置为true。如果WhetherSupplierNeedMetrictrue,则需要配置AccessKeyIDAccessKeySecretSupplierAliuid这三个属性,SupplierAliuid为服务商的阿里uid,AccessKeyIDAccessKeySecret都为服务商的AK。

        重要

        您可以为AK设置如下权限,仅允许调用 arms:GetPrometheusApiToken 接口,用于监控场景下的数据采集或查询。此配置在满足监控需求的同时,遵循最小权限原则,有效降低安全风险。

        {
          "Version": "1",
          "Statement": [
            {
              "Effect": "Allow",
              "Action": [
                "arms:GetPrometheusApiToken"
              ],
              "Resource": "*"
            }
          ]
        }
      • SyncServiceMonitor: 是否自动同步集群中的ServiceMonitor。您可通过设置此选项来选择监听的Service,具体操作,请参见通过ServiceMonitor创建服务发现

      • SyncPodMonitor:是否自动同步集群中的PodMonitor

  2. (可选)如果是通过ROS模板新建的ACK集群,需要在ROS模板的ACK资源中添加Addons参数,如下图所示。image

托管版多租场景

在托管版多租场景中,计算巢提供的服务ACK全托管多租场景-容器基础资源部署,您可以通过创建服务实例的方式,完成ACK集群的Prometheus配置。

重要

您可以为AK设置如下权限,仅允许调用 arms:GetPrometheusApiToken 接口,用于监控场景下的数据采集或查询。此配置在满足监控需求的同时,遵循最小权限原则,有效降低安全风险。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "arms:GetPrometheusApiToken"
      ],
      "Resource": "*"
    }
  ]
}

步骤二:配置ROS模板

  1. 需要创建一个以服务实例ID为名称的命名空间,并给该命名空间打上租户标签。

    说明

    其中tenant_useridtenant_clusteridtenant_tokentenant_cloudproductcode为租户标签的key,模板中只需填写固定的占位符即可。该命名空间的名称设置为{{ serviceInstanceId }}占位符,表示以创建出来的服务实例的serviceInstanceId命名。

    ClusterNameSpaceApplication:
        Type: ALIYUN::CS::ClusterApplication
        Properties:
          YamlContent:
            Fn::Sub:
              - |
                apiVersion: v1
                kind: Namespace
                metadata:
                  name: '${Name}'
                  labels:
                    tenant_userid: '{{ aliUid }}'
                    tenant_clusterid: '{{ tenantClusterId }}'
                    tenant_token: '{{ tenantToken }}'
                    tenant_cloudproductcode: '{{ tenantCloudProductCode }}'
              - Name: '{{ serviceInstanceId }}'
          ClusterId:
            Fn::If:
              - Condition: CreateACKCondition
              - Ref: ManagedKubernetesCluster
              - Ref: ClusterId
    重要

    服务商的应用要部署在上述创建的命名空间下,才能实现应用的监控指标分发到租户。

  2. (可选)如果是托管单租场景,ROS模板中要引用上述AckArmsConfig模块,为每个新创建的ACK集群配置Prometheus。

  3. (可选)如果是自定义监控指标,可以通过HTTP端口透出或者Exporter暴露,但暴露指标的Service也必须以{{ serviceInstanceId }}命名, 且定义一个ServiceMonitor用于服务发现,以下是通过mysqld-exporter采集MySQL监控指标时对应的ServiceServiceMonitor的示例。

    apiVersion: v1
    kind: Service
    metadata:
      name: {{ serviceInstanceId }}
      labels:
        io.mysql.service: {{ serviceInstanceId }}
    spec:
      selector:
        app: mysql
      ports:
        - protocol: TCP
          port: 3306
          targetPort: 3306
          name: mysql
        - protocol: TCP
          port: 9104
          targetPort: 9104
          name: mysql-exporter
      type: LoadBalancer
    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      name: prometheus-service-monitor
      annotations:
        arms.prometheus.io/discovery: 'true'
      labels:
        prometheus-service-monitor: prometheus-service-monitor
    spec:
      selector:
        matchLabels:
          io.mysql.service: {{ serviceInstanceId }}
      namespaceSelector:
        matchNames:
          - {{ serviceInstanceId }}
      endpoints:
        - port: mysql-exporter
          scheme: http
          path: /metrics
          interval: 10s
          scrapeTimeout: 10s

步骤三:配置Grafana大盘

目前一个服务实例只支持展示一个大盘,如果服务商有多个大盘,需要将多个大盘组合成一个大盘,大盘需要满足一个规则:

设置大盘的一个固定变量为Namespace,且大盘通过Namespace这个全局变量筛选各个应用的监控指标。在阿里云托管版的Grafana创建大盘,得到此大盘的链接。

步骤四:配置产品标识和对应的大盘链接

托管版多租服务使用计算巢提供的Prometheus能力,需要设置服务标识和监控大盘信息:

  1. 服务标识:表示服务在监控系统中的唯一标识,目前cn-mariadb这个产品标识用于测试,所有服务共享使用该产品标识。目前cn-mariadb已开通杭州和中国香港两个地域,并支持在这两个地域下测试。

    说明

    服务上线需要使用专用服务标识的请加入文章开头的技术支持群获取技术支持

  2. 监控大盘设置包括监控大盘标题和Grafana大盘链接,监控大盘信息与服务标识是对应关系,大盘链接为上述创建大盘的链接,大盘标题为上述配置的大盘的标题。

    说明

    这里的配置目前需要一定的手工配置,请加入技术支持群获取支持。

  3. 下是示例服务中使用cn-mariadb产品标识的配置信息。image

步骤五:配置告警

  1. 访问ARMS-Prometheus监控控制台,创建Prometheus告警规则模板。具体操作,请参见创建Prometheus告警规则模板

    image

  2. 创建完成后,在控制台的网络请求中获取TemplateId,获取方式如下图所示。

    重要

    只有在图中①处,通过筛选搜索才会出现②处的请求。

    image

  3. ROS模板中编排告警模板,通过ALIYUN::ARMS::ApplyAlertRuleTemplate资源将此告警模板应用到ACK集群中,即可实现在ACK集群中创建对应的告警规则,ROS模板示例如下所示。

    ROSTemplateFormatVersion: '2015-09-01'
    Description:
      en: ApplyAlertRule
      zh-cn: ApplyAlertRule
    Parameters:
      ClusterIds:
        AssociationPropertyMetadata:
          Parameter:
            Required: true
            Type: String
            Description:
              en: The ID of the Prometheus Instance.
        Description:
          en: The IDs list of Prometheus Instances.
        Default: Null
        MinLength: 1
        Required: false
        MaxLength: 100
        AssociationProperty: List[Parameter]
        Type: Json
      TemplateIds:
        AssociationPropertyMetadata:
          Parameter:
            Required: true
            Type: String
            Description:
              en: The ID of the Prometheus alert rule template.
        Description:
          en: The IDs list of Prometheus alert rule templates.
        Default: Null
        MinLength: 1
        Required: false
        MaxLength: 100
        AssociationProperty: List[Parameter]
        Type: Json
    Resources:
      ApplyAlertRuleTemplate:
        Type: ALIYUN::ARMS::ApplyAlertRuleTemplate
        Properties:
          ClusterIds:
            Ref: ClusterIds
          TemplateIds:
            Ref: TemplateIds

步骤六:查看监控

服务实例部署完成后,用户侧和服务商侧均能在服务实例详情页查看监控大盘。

  • 用户侧:image

  • 服务商侧:image