このトピックでは、サービスプロバイダーが 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)
フローチャート

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 テンプレートでモジュールを使用できます。
サービスを作成するときに、コンテンツを 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はサービスプロバイダーのアクセスキーを指定します。重要アクセスキーに次の権限を付与して、サービスプロバイダーがデータ収集またはクエリのために
arms:GetPrometheusApiToken操作のみを呼び出せるようにすることができます。この構成は、モニタリング要件を満たしながら最小権限の原則に従っているため、セキュリティリスクを効果的に軽減します。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "arms:GetPrometheusApiToken" ], "Resource": "*" } ] }SyncServiceMonitor:クラスタ内のServiceMonitorを自動的に同期するかどうかを指定します。このオプションを使用して、リッスンするServiceを選択できます。詳細については、「ServiceMonitors を使用してサービスを検出してモニタリングする」をご参照ください。SyncPodMonitor:クラスタ内のPodMonitorを自動的に同期するかどうかを指定します。
(オプション)ROS テンプレートを使用して ACK クラスタを新規作成する場合は、次の図に示すように、
Addonsパラメーターを ROS テンプレートの ACK リソースに追加します。
マルチテナントのフルマネージドサービス
マルチテナントのフルマネージドサービスのシナリオでは、Compute Nest は サービスカタログ ページでコンテナインフラストラクチャサービスを提供します。ACK クラスタで Managed Service for Prometheus のサービスインスタンスを作成できます。
アクセスキーに次の権限を付与して、サービスプロバイダーがデータ収集またはクエリのために arms:GetPrometheusApiToken 操作のみを呼び出せるようにすることができます。この構成は、モニタリング要件を満たしながら最小権限の原則に従っているため、セキュリティリスクを効果的に軽減します。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"arms:GetPrometheusApiToken"
],
"Resource": "*"
}
]
}ステップ 2:ROS テンプレートを構成する
サービスインスタンス ID の名前で名前空間を作成し、テナントタグを名前空間に追加します。
説明tenant_userid、tenant_clusterid、tenant_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重要モニタリングシステムがアプリケーションメトリックをテナントに配信できるようにするには、サービスプロバイダーのアプリケーションを作成した名前空間にデプロイする必要があります。
(オプション)シングテナントのフルマネージドサービスの場合、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 として指定し、ダッシュボードは名前空間に基づいて各アプリケーションのメトリックをフィルタリングします。Alibaba Cloud Managed Grafana でダッシュボードを作成し、ダッシュボードへの URL を取得します。
ステップ 4:プロダクト ID と対応するダッシュボードリンクを構成する
マルチテナントのフルマネージドサービスが Compute Nest によって提供される Managed Service for Prometheus 機能を使用する前に、プロダクト ID とダッシュボード情報を指定します。
注: このチュートリアルでは、基本的な JavaScript の知識があることを前提としています。
説明公開するサービスの一意のプロダクト ID を取得する必要がある場合は、上記のテクニカルサポートの DingTalk グループに参加してください。
Grafana ダッシュボードのタイトルと URL を含むダッシュボード設定を構成します。ステップ 3 で作成したダッシュボードの URL とタイトルを取得します。
説明ダッシュボード設定を手動で構成する必要があります。テクニカルサポートについては、DingTalk グループに参加してください。
次の図は、
cn-mariadbプロダクト ID を使用するサンプル Prometheus サービスの構成を示しています。
ステップ 5:Prometheus アラートルールテンプレートを構成する
Application Real-Time Monitoring Service (ARMS) コンソールにログインします。[Prometheus アラートルールテンプレート] ページで、Prometheus アラートルールテンプレートを作成します。詳細については、「アラートルールテンプレートを作成および管理する」をご参照ください。
作成後、次の図に示すように、ARMS コンソールのネットワーク応答から TemplateId 値を取得します。
重要右上隅の [すべてのチェックタイプ] を [静的しきい値](領域 ①)に変更し、[F12] キーを押してから、ネットワーク応答のフィールド(領域 ②)から TemplateId 値を取得する必要があります。
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 サービスインスタンスがデプロイされると、ユーザー側とサービスプロバイダー側のサービスインスタンスの詳細ページでダッシュボードを表示できます。
ユーザー側:

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