Istioメトリクスのカスタマイズ

このタスクでは、Istioが生成するメトリクスのカスタマイズ方法を示します。

Istioは、さまざまなダッシュボードが消費してメッシュを可視化するのに役立つテレメトリを生成します。たとえば、Istioをサポートするダッシュボードには、以下が含まれます。

Istioはデフォルトで標準メトリクス(例:requests_total)を定義および生成しますが、テレメトリAPIを使用して、それらをカスタマイズしたり、新しいメトリクスを作成することもできます。

始める前に

クラスタにIstioをインストールし、アプリケーションをデプロイします。または、Istioのインストールの一部としてカスタム統計を設定することもできます。

このタスク全体を通して、Bookinfoサンプルアプリケーションが例として使用されます。インストール手順については、Bookinfoアプリケーションのデプロイを参照してください。

カスタムメトリクスの有効化

テレメトリメトリクスをカスタマイズするには、たとえば、ゲートウェイとサイドカーの両方でインバウンドとアウトバウンドの方向に送信されるrequests_totalメトリクスにrequest_hostdestination_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_containerslist<string>アプリケーションコンテナの短縮名リスト。
cluster_id文字列このワークロードが属するクラスタの識別子。

たとえば、アウトバウンド設定で使用されるピアappラベルの式はupstream_peer.labels['app'].valueです。

クリーンアップ

Bookinfoサンプルアプリケーションとその設定を削除するには、Bookinfoクリーンアップを参照してください。

この情報は役に立ちましたか?
改善のための提案はありますか?

ご意見ありがとうございます!