このトピックでは、サービスプロバイダーが Container Service for Kubernetes (ACK) にデプロイされた Compute Nest フルマネージドサービスのモニタリングとアラートを設定する方法を説明します。
Managed Service for Prometheus の統合プロセスは、シングルテナントのフルマネージドサービス (各ユーザーが専用クラスターを持つ) と、マルチテナントのフルマネージドサービス (複数ユーザーがクラスターを共有する) のいずれでも同じです。どちらのシナリオでも、ACK クラスターで Managed Service for Prometheus を設定し、テナントメトリクスを転送します。これにより、テナントとサービスプロバイダーの双方が、サービスインスタンスのモニタリングメトリクスを確認できます。(技術サポートについては、DingTalk グループ 31045016300 にご参加ください)
仕組み

-
Compute Nest は、マルチテナントのモニタリングソリューションとして、Application Real-Time Monitoring Service (ARMS) の機能である Managed Service for Prometheus を使用します。
-
Managed Service for Prometheus は、組み込みのマルチテナンシーをサポートします。データ収集では、エージェントがワークロードリソース (Pod または名前空間レベル) 上の特定のテナントラベルを使用して、テナントメトリクスを区別します。その後、テナントのメトリクスは、それぞれのクラウドサービスインスタンスに転送されます。
-
ストレージは、ネイティブのマルチテナント分離を提供します。サービスプロバイダーは、各テナントのワークロードリソースに特定のテナントラベルを追加するだけで済みます。
-
Compute Nest は、マルチテナントのフルマネージドサービスインスタンスにおいて、名前空間を使用してテナントリソースを分離します。名前空間に対応するテナントラベルを追加すると、システムはテナントのメトリクスをそれぞれのクラウドサービスインスタンスへ自動的に転送します。
-
また、リモートライトを設定して、各テナントのモニタリングデータのコピーをサービスプロバイダーのアカウントに送信することもできます。これにより、サービスプロバイダーはすべてのテナントのモニタリングデータを確認でき、各テナントは自分のデータのみを確認できます。
操作手順
ステップ1:ACK 向け Managed Service for Prometheus の設定
デフォルトでは、Prometheus はメトリクスの転送をサポートしていません。特定のユーザーにアプリケーションのモニタリングメトリクスを転送するには、Managed Service for Prometheus で追加設定を行う必要があります。
シングルテナントサービス
シングルテナントのフルマネージドサービスの場合、Compute Nest はこの設定を ROS テンプレートのモジュールにカプセル化しており、そのまま使用できます。
-
サービスを作成する際に、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に設定します。WhetherSupplierNeedMetricがtrueの場合は、AccessKeyID、AccessKeySecret、SupplierAliuidを設定する必要があります。SupplierAliuidはサービスプロバイダーの Alibaba Cloud アカウント UID であり、AccessKeyID と AccessKeySecret はサービスプロバイダーの AccessKey ペアです。重要最小権限の原則に従い、AccessKey (AK) には
arms:GetPrometheusApiTokenAPI を呼び出す権限のみを付与してください。これは、モニタリングシナリオにおけるデータ収集とクエリには十分です。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "arms:GetPrometheusApiToken" ], "Resource": "*" } ] } -
SyncServiceMonitor: クラスター内のServiceMonitorリソースを自動的に同期するかどうかを指定します。このオプションを使用して、監視するServiceリソースを選択します。詳細については、「ServiceMonitor を使用してサービスディスカバリーを作成する」をご参照ください。 -
SyncPodMonitor:クラスター内のPodMonitorリソースを自動的に同期するかどうかを指定します。
-
-
-
(オプション) ROS テンプレートを使用して新しい ACK クラスターを作成する場合は、次の例のように ACK リソースに Addons パラメーターを追加する必要があります。
LoginPassword: Ref: LoginPassword SnatEntry: true Addons: - Name: flannel Config: '' - Name: arms-prometheus
マルチテナントサービス
マルチテナントのフルマネージドサービス向けに、Compute Nest は 「ACK フルマネージドマルチテナントシナリオ - コンテナインフラストラクチャのデプロイ」 サービスを提供します。このサービスのサービスインスタンスを作成して、ACK クラスターに Managed Service for Prometheus を設定します。
最小権限の原則に従い、AK には arms:GetPrometheusApiToken API を呼び出す権限のみを付与してください。これは、モニタリングシナリオにおけるデータ収集とクエリには十分です。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"arms:GetPrometheusApiToken"
],
"Resource": "*"
}
]
}
ステップ2:ROS テンプレートの設定
-
サービスインスタンス ID を名前として使用する名前空間を作成し、テナントラベルを追加します。
説明テナントラベルのキーは
tenant_userid、tenant_clusterid、tenant_token、tenant_cloudproductcodeです。ROS テンプレートでは、これらの値にプレースホルダーが使用されます。名前空間自体は {{ serviceInstanceId }} プレースホルダーを使用して命名され、作成されたサービスインスタンスの ID に置き換えられます。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重要アプリケーションのモニタリングメトリクスが正しいテナントにルーティングされるように、この手順で作成した名前空間にサービスプロバイダーのアプリケーションをデプロイしてください。
-
(オプション) シングルテナントのフルマネージドサービスシナリオでは、ROS テンプレートの
AckArmsConfigモジュールを使用して、新しく作成された各 ACK クラスターに対して Managed Service for Prometheus を設定します。 -
(オプション) カスタムメトリクスを収集する場合は、HTTP ポート経由またはエクスポーターを使用して公開します。メトリクスを公開する
Serviceの名前も{{ serviceInstanceId }}にする必要があり、サービスディスカバリー用にServiceMonitorを定義する必要があります。次の例は、mysqld-exporter を使用して MySQL メトリクスを収集するためのServiceとServiceMonitorを示します。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: LoadBalancerapiVersion: 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 という名前のダッシュボード変数を作成し、アプリケーションのモニタリングメトリクスのグローバルフィルターとして使用します。Managed Service for Grafana でダッシュボードを作成し、ダッシュボードリンクを取得します。
ステップ4:製品識別子とダッシュボードリンクの設定
Compute Nest のマルチテナントのフルマネージドサービスで Managed Service for Prometheus を使用するには、製品識別子とモニタリングダッシュボード情報を設定する必要があります。
-
製品識別子:モニタリングシステムでサービスを一意に識別します。テストでは、共有の製品識別子 cn-mariadb を使用します。この識別子は、中国 (杭州) および中国 (香港) リージョンでテスト用として利用できます。
説明本番環境では、サービスに専用の製品識別子が必要です。取得するには、このトピックの冒頭に記載した技術サポートグループに参加し、支援を依頼してください。
-
モニタリングダッシュボードの設定には、タイトルと Grafana ダッシュボードリンクが含まれます。これらの設定は、製品識別子と 1 対 1 で対応します。
説明この設定は現在、手動で行う必要があります。技術サポートグループに参加して支援を依頼してください。
-
次に、
cn-mariadb製品識別子を使用するサンプルサービスの設定を示します。cn-mariadb を使用する場合は、デフォルトのモニタリングダッシュボード設定を使用できます。デフォルトのモニタリングダッシュボードタイトルは MySQL Exporter Quickstart and Dashboard です。
ステップ5:アラートの設定
-
Prometheus モニタリング用 ARMS コンソールに移動し、Prometheus アラート ルール テンプレートを作成します。 詳細については、「Prometheus アラート ルール テンプレートを作成する」をご参照ください。
-
テンプレートを作成した後、次の手順でコンソールのネットワークリクエストから TemplateId を取得します。
重要対応するネットワークリクエストは、検索フィルターを適用した後にのみ表示されます。
アラートルールテンプレートページで、上部の [静的しきい値] ドロップダウンリストを使用してフィルタリングして検索します。その後、ブラウザーの DevTools の [Network] パネルに
alert.json?action=AlertTemplateActionリクエストが表示されます。リクエストをクリックし、[Response] タブを確認します。返された JSON でidフィールド (例:d9a9fb3b-47a9-4338-84f5-93240e03b4ee) を見つけます。この値が、必要な TemplateId です。 -
ROS テンプレートで、ALIYUN::ARMS::ApplyAlertRuleTemplate リソースを使用してアラートルールテンプレートを定義し、ACK クラスターに適用します。これにより、クラスター内に対応するアラートルールが作成されます。次の例は、ROS テンプレートのスニペットです。
ROSTemplateFormatVersion: '2015-09-01' Description: ja: アラートルールを適用 Parameters: ClusterIds: AssociationPropertyMetadata: Parameter: Required: true Type: String Description: ja: Prometheus インスタンスの ID。 Description: ja: Prometheus インスタンスの ID のリスト。 Default: Null MinLength: 1 Required: false MaxLength: 100 AssociationProperty: List[Parameter] Type: Json TemplateIds: AssociationPropertyMetadata: Parameter: Required: true Type: String Description: ja: Prometheus アラートルールテンプレートの ID。 Description: ja: Prometheus アラートルールテンプレートの ID のリスト。 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:モニタリングデータの確認
サービスインスタンスのデプロイ後、テナントとサービスプロバイダーの双方が、サービスインスタンスの詳細ページでモニタリングダッシュボードを確認できます。
-
テナントビュー:

-
サービスプロバイダービュー:
