すべてのプロダクト
Search
ドキュメントセンター

Compute Nest:ACK クラスタにデプロイされたフルマネージドサービスのビジネスモニタリングとアラートを構成する

最終更新日:Jun 08, 2025

このトピックでは、サービスプロバイダーが Container Service for Kubernetes (ACK)クラスタ内のフルマネージドサービスのビジネスモニタリングとアラートを構成する方法について説明します。

説明

ACK ベースのデプロイメントシナリオでは、シングルテナント フルマネージド サービスと Managed Service for Prometheus を統合する方法は、マルチテナント フルマネージド サービスと Managed Service for Prometheus を統合するメソッドと同じです。 シングルテナント フルマネージド サービスが ACK クラスタにデプロイされている場合、その ACK クラスタは顧客専用です。 マルチテナント フルマネージド サービスが ACK クラスタにデプロイされている場合、複数の顧客が ACK クラスタを共有します。 ACK クラスタで Managed Service for Prometheus のテナント メトリック転送機能を構成すると、ユーザーとサービスプロバイダーはサービス インスタンスのメトリックを表示できます。(Technical support DingTalk group ID: 31045016300)

フローチャート

image

  • Compute Nest は、Alibaba Cloud Application Real-Time Monitoring Service (ARMS)が提供する Managed Service for Prometheus のマルチテナントモニタリング機能を使用します。

  • Managed Service for Prometheus は、組み込みのマルチテナント機能を提供します。メトリックを収集する必要があるクラスタでは、Prometheus エージェントは、ポッドまたは名前空間レベルでワークロードに追加された特定のテナントタグに基づいて、テナントのメトリックを区別します。異なるテナントのメトリックは、対応するテナントのサービスインスタンスに配信されます。

  • ストレージシステムは、マルチテナントの分離をネイティブにサポートしています。サービスプロバイダーは、異なるテナントのワークロードにテナントタグを追加するだけで済みます。

  • Compute Nest のマルチテナントのフルマネージドサービスは、名前空間を使用してテナントのインスタンスリソースを分離します。テナントタグが名前空間に追加されると、バックエンドプログラムはテナントのメトリックを対応するテナントのサービスインスタンスに自動的に転送します。

  • リモート書き込み機能を有効にして、サービスプロバイダーがテナントのモニタリングデータをサービスプロバイダーアカウントに配信できるようにすることができます。これにより、サービスプロバイダーはすべてのテナントのモニタリングデータを表示でき、テナントは自分のモニタリングデータのみを表示できます。

手順

ステップ 1:ACK クラスタで Managed Service for Prometheus コンポーネントを構成する

Managed Service for Prometheus はメトリック転送をサポートしていません。Managed Service for Prometheus を構成して、ユーザーアプリケーションに関連するメトリックを特定のユーザーに転送できます。

シングテナントのフルマネージドサービス

シングテナントのフルマネージドサービスでは、Compute Nest は構成を Resource Orchestration Service (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 に設定されている場合は、AccessKeyIDAccessKeySecret、および SupplierAliuid を指定します。SupplierAliuid はサービスプロバイダーの Alibaba Cloud アカウント UID を指定し、AccessKeyIDAccessKeySecret はサービスプロバイダーのアクセスキーを指定します。

        重要

        アクセスキーに次の権限を付与して、サービスプロバイダーがデータ収集またはクエリのために arms:GetPrometheusApiToken 操作のみを呼び出せるようにすることができます。この構成は、モニタリング要件を満たしながら最小権限の原則に従っているため、セキュリティリスクを効果的に軽減します。

        {
          "Version": "1",
          "Statement": [
            {
              "Effect": "Allow",
              "Action": [
                "arms:GetPrometheusApiToken"
              ],
              "Resource": "*"
            }
          ]
        }
      • SyncServiceMonitor:クラスタ内の ServiceMonitor を自動的に同期するかどうかを指定します。このオプションを使用して、リッスンする Service を選択できます。詳細については、「ServiceMonitors を使用してサービスを検出してモニタリングする」をご参照ください。

      • SyncPodMonitor:クラスタ内の PodMonitor を自動的に同期するかどうかを指定します。

  2. (オプション)ROS テンプレートを使用して ACK クラスタを新規作成する場合は、次の図に示すように、Addons パラメーターを ROS テンプレートの ACK リソースに追加します。image

マルチテナントのフルマネージドサービス

マルチテナントのフルマネージドサービスのシナリオでは、Compute Nest は サービスカタログ ページでコンテナインフラストラクチャサービスを提供します。ACK クラスタで Managed Service for Prometheus のサービスインスタンスを作成できます。

重要

アクセスキーに次の権限を付与して、サービスプロバイダーがデータ収集またはクエリのために arms:GetPrometheusApiToken 操作のみを呼び出せるようにすることができます。この構成は、モニタリング要件を満たしながら最小権限の原則に従っているため、セキュリティリスクを効果的に軽減します。

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

ステップ 2:ROS テンプレートを構成する

  1. サービスインスタンス ID の名前で名前空間を作成し、テナントタグを名前空間に追加します。

    説明

    tenant_useridtenant_clusteridtenant_token、および tenant_cloudproductcode は、テナントタグの キー です。テンプレートに固定のプレースホルダーを入力するだけで済みます。名前空間の名前は {{ 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 クラスタで Managed Service for Prometheus を構成する必要があります。

  3. (オプション)HTTP ポートまたはエクスポーターを使用してカスタムメトリックをモニタリングします。メトリックをモニタリングする 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

ステップ 3:Grafana ダッシュボードを構成する

各サービスインスタンスは 1 つのダッシュボードのみをサポートします。サービスプロバイダーに複数のダッシュボードがある場合、サービスプロバイダーはそれらを 1 つのダッシュボードに結合する必要があります。ダッシュボードは次のルールを満たしている必要があります。

ダッシュボードの固定グローバル変数を namespace として指定し、ダッシュボードは名前空間に基づいて各アプリケーションのメトリックをフィルタリングします。Alibaba Cloud Managed Grafana でダッシュボードを作成し、ダッシュボードへの URL を取得します。

ステップ 4:プロダクト ID と対応するダッシュボードリンクを構成する

マルチテナントのフルマネージドサービスが Compute Nest によって提供される Managed Service for Prometheus 機能を使用する前に、プロダクト ID とダッシュボード情報を指定します。

  1. 注: このチュートリアルでは、基本的な JavaScript の知識があることを前提としています。

    説明

    公開するサービスの一意のプロダクト ID を取得する必要がある場合は、上記のテクニカルサポートの DingTalk グループに参加してください。

  2. Grafana ダッシュボードのタイトルと URL を含むダッシュボード設定を構成します。ステップ 3 で作成したダッシュボードの URL とタイトルを取得します。

    説明

    ダッシュボード設定を手動で構成する必要があります。テクニカルサポートについては、DingTalk グループに参加してください。

  3. 次の図は、cn-mariadb プロダクト ID を使用するサンプル Prometheus サービスの構成を示しています。image

ステップ 5:Prometheus アラートルールテンプレートを構成する

  1. Application Real-Time Monitoring Service (ARMS) コンソールにログインします。[Prometheus アラートルールテンプレート] ページで、Prometheus アラートルールテンプレートを作成します。詳細については、「アラートルールテンプレートを作成および管理する」をご参照ください。

  2. 作成後、次の図に示すように、ARMS コンソールのネットワーク応答から TemplateId 値を取得します。

    重要

    右上隅の [すべてのチェックタイプ][静的しきい値](領域 ①)に変更し、[F12] キーを押してから、ネットワーク応答のフィールド(領域 ②)から TemplateId 値を取得する必要があります。

  3. ROS テンプレートのアラートルールテンプレートの内容を変更します。ALIYUN::ARMS::ApplyAlertRuleTemplate 操作を呼び出してアラートルールテンプレートを ACK クラスタに適用し、ACK クラスタに対応するアラートルールを作成します。ROS テンプレートのサンプル:

    ROSTemplateFormatVersion: '2015-09-01'
    Description:
      en: 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

ステップ 6:モニタリングデータを表示する

Prometheus サービスインスタンスがデプロイされると、ユーザー側とサービスプロバイダー側のサービスインスタンスの詳細ページでダッシュボードを表示できます。

  • ユーザー側:image

  • サービスプロバイダー側:image