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

Alibaba Cloud Service Mesh:ASM インスタンスにおけるメトリクスの定期的なクリーニングの設定

最終更新日:Jan 13, 2025

Service Mesh (ASM) は、サービスパフォーマンスを監視するために、ASM 内のすべてのインバウンドトラフィック、アウトバウンドトラフィック、およびサービストラフィックのメトリクスを生成します。これらのメトリクスには、総トラフィック、エラー率、リクエスト応答時間などの情報が含まれます。ただし、長期運用では大量のメトリクスが生成され、Envoy と Prometheus のリソース消費が大幅に増加します。したがって、ASM は監視メトリクスの定期的なクリーニングの設定を提供し、一定期間使用されていない Envoy にキャッシュされたメトリクスをクリーンアップできるようにします。これは、Envoy のメモリ使用率を向上させ、Prometheus がメトリクスをプルする際のネットワーク負荷を軽減するのに役立ちます。このトピックでは、メトリクスの定期的なクリーニングの設定方法とその使用例について説明します。

前提条件

手順

  1. ASM コンソール にログインします。左側のナビゲーションペインで、[service Mesh] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、[可観測性管理センター] > [可観測性設定] を選択します。

  3. [可観測性設定] ページで、[グローバル] タブをクリックし、[メトリクスの定期的なクリーニングを有効にする][メトリクスの定期的なクリーニング時間] を入力し、[送信] をクリックします。

    image

    重要

    Prometheus がクリーンアップされる前にメトリクスを確実にキャプチャできるように、メトリクスの定期的なクリーニング時間を Prometheus に設定されている scrape_interval の少なくとも 2 倍に設定することをお勧めします。

サンプルアプリケーションのデプロイ

  1. 以下のコマンドを実行して、データプレーンのクラスターにサンプルアプリケーションをデプロイします。具体的な操作については、「オーケストレーションテンプレートを使用した Linux アプリケーションの作成」または「YAML テンプレートを使用した作成」をご参照ください。

    詳細を表示するにはクリックしてください

    apiVersion: v1
    kind: Service
    metadata:
      name: httpbin
      labels:
        app: httpbin
        service: httpbin
    spec:
      ports:
      - name: http
        port: 8000
        targetPort: 80
      selector:
        app: httpbin
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: httpbin
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: httpbin
          version: v1
      template:
        metadata:
          labels:
            app: httpbin
            version: v1
        spec:
          containers:
          - image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/httpbin:0.1.0
            imagePullPolicy: IfNotPresent
            name: httpbin
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: sleep
      labels:
        app: sleep
        service: sleep
    spec:
      ports:
      - port: 80
        name: http
      selector:
        app: sleep
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: sleep
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: sleep
      template:
        metadata:
          labels:
            app: sleep
        spec:
          terminationGracePeriodSeconds: 0
          containers:
          - name: sleep
            image: registry.cn-hangzhou.aliyuncs.com/acs/curl:8.1.2
            command: ["/bin/sleep", "infinity"]
            imagePullPolicy: IfNotPresent
  2. 次のコマンドを実行して、アプリケーションの状態を確認します。

    kubectl get pod

    予期される出力:

    NAME                       READY   STATUS    RESTARTS   AGE
    httpbin-846bxxx694-xxxxx   2/2     Running   0          44s
    sleep-866xxx97f9-xxxxx     2/2     Running   0          44s

メトリクスの有効化と検証の実行

  1. ASM コンソール にログインします。左側のナビゲーションペインで、[service Mesh] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、[可観測性管理センター] > [可観測性設定] を選択します。

  3. [可観測性設定] ページで、[グローバル] タブをクリックします。[監視メトリクス設定] リストの [サーバー側メトリクス] 列で、[REQUEST_COUNT] メトリクスの横にある [有効] をオンにします。次に、[送信] をクリックします。

    image

  4. 次のコマンドを実行して、HTTPBin アプリケーションにアクセスします。

     kubectl exec -it deploy/sleep -- sh -c 'for i in $(seq 1 10); do curl -s httpbin:8000/status/418 > /dev/null; done'
  5. 次のコマンドを実行して、HTTPBin アプリケーションの監視メトリクスを表示します。

    kubectl exec -it deploy/httpbin -c istio-proxy -- curl 0.0.0.0:15020/stats/prometheus | grep istio_requests_total{

    予期される出力:

    istio_requests_total{reporter="destination",source_workload="sleep",source_canonical_service="sleep",...,request_protocol="http",response_code="418",grpc_response_status="",response_flags="-",connection_security_policy="mutual_tls"} 20

監視メトリクスの定期的なクリーニングの設定

  1. 手順 の手順に従って、メトリクスの定期的なクリーニング時間を 10 秒に設定します。

    クリーンアップには数秒の遅延が発生します。検証プロセス中に、必要に応じてクリーンアップ時間を調整できます。
  2. 設定が完了したら、次のコマンドを実行して、HTTPBin アプリケーションの監視メトリクスを表示します。

    kubectl exec -it deploy/httpbin -c istio-proxy -- sh -c ' for i in $(seq 1 2); do echo "# Current content of the istio_requests_total metric: "; curl -s 0.0.0.0:15020/stats/prometheus | grep istio_requests_total{; sleep 15; done'

    予期される出力:

    # Current content of the istio_requests_total metric: 
    istio_requests_total{reporter="destination",source_workload="sleep",source_canonical_service="sleep",...connection_security_policy="mutual_tls"} 30
    # Current content of the istio_requests_total metric: 
    上記のテストコマンドは合計 2 つのリクエストを送信します。この機能が有効になる前は、各リクエストは 1 行のメトリクスと 1 行のカスタム出力を返します。この機能が有効になると、メトリクスは 15 秒以内にクリーンアップされ、各リクエストは 1 行のカスタム出力を返します。