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 インスタンスに対して構成されています。
ASM コンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
[構成情報] セクションで、[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'