Istioメトリクスのカスタマイズ
このタスクでは、Istioが生成するメトリクスのカスタマイズ方法を示します。
Istioは、さまざまなダッシュボードが消費してメッシュを可視化するのに役立つテレメトリを生成します。たとえば、Istioをサポートするダッシュボードには、以下が含まれます。
Istioはデフォルトで標準メトリクス(例:requests_total)を定義および生成しますが、テレメトリAPIを使用して、それらをカスタマイズしたり、新しいメトリクスを作成することもできます。
始める前に
クラスタにIstioをインストールし、アプリケーションをデプロイします。または、Istioのインストールの一部としてカスタム統計を設定することもできます。
このタスク全体を通して、Bookinfoサンプルアプリケーションが例として使用されます。インストール手順については、Bookinfoアプリケーションのデプロイを参照してください。
カスタムメトリクスの有効化
テレメトリメトリクスをカスタマイズするには、たとえば、ゲートウェイとサイドカーの両方でインバウンドとアウトバウンドの方向に送信されるrequests_totalメトリクスにrequest_hostとdestination_portのディメンションを追加するには、次の手順に従います。
$ cat <<EOF > ./custom_metrics.yaml
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
name: namespace-metrics
spec:
metrics:
- providers:
- name: prometheus
overrides:
- match:
metric: REQUEST_COUNT
tagOverrides:
destination_port:
value: "string(destination.port)"
request_host:
value: "request.host"
EOF
$ kubectl apply -f custom_metrics.yaml
結果の検証
メッシュにトラフィックを送信します。Bookinfoサンプルの場合、ウェブブラウザでhttp://$GATEWAY_URL/productpageにアクセスするか、次のコマンドを実行します。
$ curl "http://$GATEWAY_URL/productpage"
Istioが新しいまたは変更されたディメンションのデータ生成していることを確認するには、次のコマンドを使用します。
$ kubectl exec "$(kubectl get pod -l app=productpage -o jsonpath='{.items[0].metadata.name}')" -c istio-proxy -- curl -sS 'localhost:15000/stats/prometheus' | grep istio_requests_total
たとえば、出力でistio_requests_totalメトリクスを探し、新しいディメンションが含まれていることを確認します。
値への式の使用
メトリクス設定の値は一般的な式であるため、JSONでは文字列を二重引用符で囲む必要があります(例:「'文字列値'」)。Mixer式言語とは異なり、パイプ(|)演算子はサポートされていませんが、hasまたはin演算子を使用してエミュレートできます。例:
has(request.host) ? request.host : "unknown"
詳細については、共通式言語を参照してください。
Istioは、すべての標準的なEnvoy属性を公開します。ピアメタデータは、アウトバウンドの場合は属性upstream_peerとして、インバウンドの場合はdownstream_peerとして、次のフィールドで使用できます。
| フィールド | 型 | 値 |
|---|---|---|
name | 文字列 | ポッドの名前。 |
namespace | 文字列 | ポッドが実行されている名前空間。 |
labels | マップ | ワークロードラベル。 |
owner | 文字列 | ワークロードの所有者。 |
workload_name | 文字列 | ワークロード名。 |
platform_metadata | マップ | プレフィックス付きキーを持つプラットフォームメタデータ。 |
istio_version | 文字列 | プロキシのバージョン識別子。 |
mesh_id | 文字列 | メッシュの一意の識別子。 |
app_containers | list<string> | アプリケーションコンテナの短縮名リスト。 |
cluster_id | 文字列 | このワークロードが属するクラスタの識別子。 |
たとえば、アウトバウンド設定で使用されるピアappラベルの式はupstream_peer.labels['app'].valueです。
クリーンアップ
Bookinfoサンプルアプリケーションとその設定を削除するには、Bookinfoクリーンアップを参照してください。