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

Alibaba Cloud Service Mesh:Istio メトリクスとアプリケーションメトリクスの統合

最終更新日:Jan 13, 2025

Prometheus と統合されたアプリケーションでは、サイドカープロキシを使用して、Istio メトリクスとアプリケーションメトリクスを統合することで、アプリケーションメトリクスを公開できます。このトピックでは、Istio メトリクスとアプリケーションメトリクスを統合する方法について説明します。

前提条件

バージョン 1.17.2.30 以降のサービスメッシュ(ASM)インスタンスが作成されていること。詳細については、「ASM インスタンスの作成」または「ASM インスタンスの更新」をご参照ください。

重要

この機能は、アプリケーションメトリクスが機密性の高いシナリオには適していません。アプリケーションメトリクスは Istio メトリクスと共に収集されます。 Istio メトリクスを表示する権限を持つユーザーは、アプリケーションメトリクスを表示できます。

機能の説明

Istio メトリクスとアプリケーションメトリクスを統合する機能を有効にすると、ASM はアプリケーションメトリクスを Istio メトリクスと統合します。アプリケーションの prometheus.io アノテーションは、データプレーン上のすべての Pod に追加され、Prometheus のメトリクススクレイピング機能を有効にします。これらのアノテーションが既に存在する場合は、上書きされます。サイドカープロキシは、Istio メトリクスとアプリケーションメトリクスを統合します。 Prometheus は、:15020/stats/prometheus エンドポイントから統合されたメトリクスを取得できます。

この機能が有効になると、ASM は Pod に対して次の操作を実行します。

  • ASM が導入される前に prometheus.io アノテーションでアノテーションが付けられたスクレイピング方法は、サイドカープロキシの環境変数に保存されます。

  • ASM によってインターセプトされたアプリケーションによって生成された Prometheus メトリクスとサイドカープロキシのメトリクスは統合され、Prometheus がスクレイピングするために :15020/stats/prometheus エンドポイントにエクスポートされます。

ステップ 1:サンプルアプリケーションをデプロイする

prometheus.io アノテーションを含むアプリケーションをデプロイします。詳細については、「ASM インスタンスへのアプリケーションのデプロイ」をご参照ください。

次のサンプルコードは、productpage アプリケーションのデプロイメントファイルの例を示しています。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: productpage-v1
  labels:
    app: productpage
    version: v1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: productpage
      version: v1
  template:
    metadata:
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "9080"
        prometheus.io/path: "/metrics"
      labels:
        app: productpage
        version: v1
    spec:
      ......

productpage アプリケーションがデプロイされると、次の Pod 情報が生成されます。

apiVersion: v1
kind: Pod
metadata:
  annotations:
    k8s.aliyun.com/pod-ips: 172.17.0.132
    kubectl.kubernetes.io/default-container: productpage
    kubectl.kubernetes.io/default-logs-container: productpage
    kubernetes.io/psp: ack.privileged
    prometheus.io/path: /metrics
    prometheus.io/port: '9080'
    prometheus.io/scrape: 'true'

上記の YAML テンプレートでは、次の prometheus.io アノテーションを確認できます。

prometheus.io/path: /metrics
prometheus.io/port: '9080'
prometheus.io/scrape: 'true'

ステップ 2:Istio メトリクスとアプリケーションメトリクスを統合する機能を有効にする

デフォルトでは、この機能は ASM インスタンスでは無効になっています。この機能は、ASM インスタンスに対してグローバルに、またはアプリケーションの Pod に prometheus.istio.io/merge-metrics: "true" アノテーションを追加することで、ワークロードごとに構成できます。この例では、この機能は ASM インスタンスに対して構成されています。

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

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、[ASM インスタンス] > [基本情報] を選択します。

  3. [構成情報] セクションで、[istio のメトリクスとアプリケーションメトリクスの統合] の横にある [有効にする] をクリックします。[istio のメトリクスとアプリケーションメトリクスの統合を有効にする] メッセージで、[OK] をクリックします。

説明

この機能が不要になった場合は、次のいずれかの操作を実行することで、この機能を無効にできます。

  • この機能が ASM インスタンスに対して有効になっている場合は、[構成情報] セクションの [istio のメトリクスとアプリケーションメトリクスの統合] の横にある [無効にする] をクリックします。[istio のメトリクスとアプリケーションメトリクスの統合を無効にする] メッセージで、[OK] をクリックします。

  • この機能がワークロードに対して有効になっている場合は、対応する Pod に prometheus.istio.io/merge-metrics: "false" アノテーションを追加します。

ステップ 3:結果を表示する

Istio メトリクスとアプリケーションメトリクスを統合する機能を有効にした後、Pod を再起動した後に Pod 情報を表示します。

次のサンプルコードは、Pod の YAML テンプレートの例を示しています。

apiVersion: v1
kind: Pod
metadata:
  annotations:
    k8s.aliyun.com/pod-ips: 172.17.0.126
    kubectl.kubernetes.io/default-container: productpage
    kubectl.kubernetes.io/default-logs-container: productpage
    kubernetes.io/psp: ack.privileged
    prometheus.io/path: /stats/prometheus
    prometheus.io/port: '15020'
    prometheus.io/scrape: 'true'
    ......
spec:
  containers:
    - args:
        - proxy
        - sidecar
        ......
      env:
        ......
        - name: ISTIO_PROMETHEUS_ANNOTATIONS
          value: '{"scrape":"true","path":"/metrics","port":"9080"}'
                

上記の YAML テンプレートは、prometheus.io アノテーションが次の内容に更新されていることを示しています。さらに、ISTIO_PROMETHEUS_ANNOTATIONS という名前の新しい環境変数が追加されています。次のサンプルコードは、環境変数の値がアプリケーションに構成された prometheus.io アノテーションの値と同じであることを示しています。

prometheus.io/path: /stats/prometheus
prometheus.io/port: '15020'
prometheus.io/scrape: 'true'