Prometheus と統合されたアプリケーションでは、Istio メトリクスとアプリケーションメトリクスをマージすることで、サイドカープロキシを使用してアプリケーションメトリクスを公開できます。このトピックでは、Istio メトリクスとアプリケーションメトリクスをマージする方法について説明します。
前提条件
バージョン 1.17.2.30 以降の Service Mesh (ASM) インスタンスが作成されている必要があります。詳細については、「ASM インスタンスの作成」または「ASM インスタンスの更新」をご参照ください。
この機能は、アプリケーションメトリクスが機密情報であるシナリオには適していません。アプリケーションメトリクスは Istio メトリクスと一緒に収集されるため、Istio メトリクスを表示する権限を持つユーザーはアプリケーションメトリクスも表示できます。
機能の説明
Istio メトリクスとアプリケーションメトリクスをマージする機能を有効にすると、ASM はアプリケーションメトリクスを Istio メトリクスとマージします。Prometheus のメトリクススクレイピング機能を有効にするために、アプリケーションの prometheus.io アノテーションがデータプレーン上のすべての Pod に追加されます。これらのアノテーションがすでに存在する場合、それらは上書きされます。サイドカープロキシは、Istio メトリクスとアプリケーションメトリクスをマージします。Prometheus は、:15020/stats/prometheus エンドポイントからマージされたメトリクスを取得できます。
この機能が有効になると、ASM は Pod に対して次の操作を実行します:
ASM が導入される前に
prometheus.ioアノテーションで指定されていたスクレイピング方法は、サイドカープロキシの環境変数に保存されます。-
サイドカープロキシは、アプリケーションの Prometheus メトリクスを自身のメトリクスとマージし、Prometheus がスクレイピングできるように、結合されたメトリクスを
:15020/stats/prometheusエンドポイントで公開します。
ステップ 1:サンプルアプリケーションのデプロイ
prometheus.io アノテーションを含むアプリケーションをデプロイします。詳細については、「ASM インスタンスでのアプリケーションのデプロイ」をご参照ください。
次のサンプルコードは、productpage アプリケーションの Deployment ファイルの例です:
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 をクリックします。
この機能が不要になった場合は、次のいずれかの操作を実行して無効にできます:
-
グローバル:設定情報 セクションで、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 環境変数に保存され、Pod のアノテーションが以下のように更新されたことがわかります。
prometheus.io/path: /stats/prometheus
prometheus.io/port: '15020'
prometheus.io/scrape: 'true'