ASM は、ログ、メトリクス、トレーシングの可観測性機能を提供します。ASM コンソールでは、グローバル、Namespace、または特定のワークロードのスコープでこれらの設定をカスタマイズできます。例えば、ログ出力フォーマットの設定、メトリクスディメンションの定義、特定のメトリクスの有効化または無効化、トレーシングのサンプリング率の設定ができます。
前提条件
バージョン 1.17.2.35 以降の Service Mesh (ASM) インスタンスが必要です。詳細については、「ASM インスタンスの作成」または「ASM インスタンスのアップグレード」をご参照ください。
スコープ
|
スコープ |
説明 |
|
グローバル |
グローバル設定は、ログ、メトリクス、トレーシングに適用されます。グローバル設定は 1 つのみ作成でき、削除することはできません。トレーシング設定は、グローバルスコープでのみ設定できます。 |
|
Namespace |
Namespace 専用の可観測性設定を作成できます。各 Namespace には、Namespace レベルの可観測性設定を 1 つのみ作成できます。 |
|
カスタム |
workload selector を使用して、カスタム設定のスコープを定義します。各 workload は、1 つのカスタム設定にのみ属せます。 |
操作手順
グローバル
ASM コンソール にログインします。左側のナビゲーションウィンドウで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
-
Observability Settings ページで、Global タブをクリックします。必要に応じてログ、メトリクス、トレーシングの設定を行い、Submission をクリックします。
設定の詳細については、次のセクションをご参照ください。
エリア
説明
Namespace
ASM コンソール にログインします。左側のナビゲーションウィンドウで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
-
Observability Settings ページで、Namespace タブをクリックし、Create をクリックします。対象の Namespace を選択し、必要に応じてログとメトリクスの設定を行い、Create をクリックします。
設定の詳細については、次のセクションをご参照ください。
エリア
説明
カスタム
ASM コンソール にログインします。左側のナビゲーションウィンドウで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
-
Observability Settings ページで、Custom タブをクリックします。対象の Namespace を選択し、Create をクリックします。Name と Label selector を入力し、必要に応じてログとメトリクスの設定を行い、Create をクリックします。
設定の詳細については、次のセクションをご参照ください。
エリア
説明
ログ設定
ログ設定には、アクセスログ出力の有効化または無効化、ログ出力フォーマットの設定、ログフォーマットのカスタマイズ、ログのフィルタリングが含まれます。
アクセスログ出力
-
Log Settings セクションで、必要に応じて Enable Log Output スイッチをオンまたはオフにします。
-
有効にすると、データプレーンのサイドカーまたはゲートウェイは、アクセスログをコンテナの標準出力に送信します。
-
無効にすると、データプレーンのサイドカーまたはゲートウェイは、コンテナの標準出力へのログ送信を停止します。
-
-
データプレーンのサイドカーコンテナの標準出力でログを確認します。
以下の例は、kubectl を使用してアクセスログを表示する方法を示しています。
-
次のコマンドを実行して、サイドカーのログを表示します。
kubectl logs <Pod-name> -c istio-proxy --tail 1 -
次のコマンドを実行して、イングレスゲートウェイのログを表示します。
kubectl -n istio-system logs <ingress-gateway-Pod-name> --tail 1
-
-
(オプション) ACK コンソールでアクセスログを表示します。
ACK クラスターを使用している場合は、ACK コンソールでアクセスログを表示することもできます。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを検索し、その名前をクリックします。 左側のウィンドウで、 を選択します。
-
ポッド ページで、対象 Pod の名前をクリックし、ページ下部の ログ タブをクリックして、アクセスログを確認します。
ログ出力フォーマット
この機能を使用するには、バージョン 1.20.6.36 以降の ASM インスタンスが必要です。インスタンスのアップグレード方法については、「ASM インスタンスのアップグレード」をご参照ください。
Log Settings セクションで、Log Output Format を必要に応じて [JSON] または [TEXT] に設定します。
-
[JSON] を選択すると、アクセスログは JSON 文字列としてコンテナの標準出力に送信されます。
-
[TEXT] を選択すると、アクセスログはプレーンテキスト文字列としてコンテナの標準出力に送信されます。
カスタムログフォーマット
-
Log Settings セクションで、含めるフィールドを選択し、カスタムフィールド情報を変更するか、
アイコンをクリックして新しいログフィールドを追加します。ログフォーマットをカスタマイズできるのは、[ログ出力を有効化] がオンになっている場合のみです。Log Format セクションでは、デフォルトのログフィールドは必須であり、変更できません。ログフィールドは、リクエストヘッダー、レスポンスヘッダー、または Envoy の組み込み値から値を取得できます。
次の例は、リクエストの
accept-encodingヘッダーを出力する方法を示しています。accessLogFormat key を [accept-encoding] に、Type を Request Properties に、accessLogFormat value を [Accept-Encoding] に設定します。たとえば、組み込みフィールドauthority_forはフォーマット変数%REQ(:AUTHORITY)%に対応し、durationは%REQUEST_DURATION%に対応します。upstream_response_timeなどのカスタムフィールドの場合、属性タイプとして [Response Attribute] を選択すると、フォーマット変数は%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%になります。accept-encodingなどのカスタムフィールドの場合、属性タイプとして [Request Attribute] を選択すると、フォーマット変数は%REQ(Accept-Encoding)%になります。 -
次のコマンドを実行して、データプレーンコンポーネントのログに新しいフィールドが含まれていることを確認します。
kubectl logs <Pod-name> -c istio-proxy --tail 1|grep accept-encoding --color=auto出力結果から、ステップ 1 で追加した Accept-Encoding ヘッダーがアクセスログに書き込まれていることがわかります。
ログフィルタリング
Log Settings セクションで、Enable Log Filter を選択してログフィルタリングを有効にします。次に、テキストボックスにログフィルター式を入力します。式に一致するリクエストに対してのみアクセスログが生成されます。
たとえば、レスポンスの HTTP ステータスが 400 以上のリクエストのみをログに記録する場合は、式 response.code >= 400 を使用します。 詳細については、「CEL 式と共通フィールド」をご参照ください。
CEL 式とフィールド
ログフィルター式は、Common Expression Language (CEL) を使用します。次の表に、CEL 式の共通フィールドを示します。詳細については、「CEL」および「Envoy」をご参照ください。
|
属性 |
タイプ |
説明 |
|
request.path |
string |
リクエストパス。 |
|
request.url_path |
string |
クエリ文字列を除いたリクエストパス。 |
|
request.host |
string |
URL のホスト部分。 |
|
request.method |
string |
リクエストメソッド。 |
|
request.headers |
map<string, string> |
すべてのリクエストヘッダー。小文字のヘッダー名でインデックス化されています。 |
|
request.useragent |
string |
User-Agent ヘッダーの値。 |
|
request.time |
timestamp |
リクエストの最初のバイトが到着した時刻。 |
|
request.id |
string |
リクエスト ID。 |
|
request.protocol |
string |
リクエストプロトコル。有効な値: |
|
request.query |
string |
リクエスト URL のクエリ文字列。 |
|
response.code |
int |
HTTP レスポンスステータスコード。 |
|
response.code_details |
string |
レスポンスコードの詳細。 |
|
response.grpc_status |
int |
レスポンス内の gRPC ステータスコード。 |
|
response.headers |
map<string, string> |
すべてのレスポンスヘッダー。小文字のヘッダー名でインデックス化されています。 |
|
response.size |
int |
レスポンスボディのサイズ (バイト単位)。 |
|
response.total_size |
int |
レスポンスメッセージの合計サイズ (バイト単位)。 |
メトリクス設定
メトリクス設定には、メトリクス生成の有効化または無効化、およびメトリクスディメンションの設定が含まれます。
メトリクス生成
メトリクスは、クライアント側のメトリクスとサーバー側のメトリクスに分けられます。
-
クライアント側のメトリクスは、サイドカーがクライアントとして動作してリクエストを開始する際に生成されるメトリクスです。ゲートウェイのメトリクスも CLIENT カテゴリに属します。
-
サーバー側のメトリクスは、サイドカーがサーバーとしてアクセスされる際に生成されるメトリクスです。
-
Metric Settings セクションで、Client-Side Metrics または Server-Side Metrics 列において、必要に応じて対象メトリクスの Enabled チェックボックスにチェックを入れるか、チェックを外します。
-
有効にすると、データプレーンのサイドカーまたはゲートウェイは、ポート 15020 の
/stats/prometheusパスを通じてメトリクスを公開します。 -
無効にすると、このポートではメトリクスは公開されません。
-
-
次のコマンドを実行して、サイドカーまたはゲートウェイが公開するメトリクスを表示します。
kubectl コマンドを使用して、サイドカーまたはゲートウェイのコンテナ内で curl コマンドを実行し、ローカルポート 15020 の
/stats/prometheusパスにアクセスして、エクスポートされたメトリクスを表示できます。kubectl exec <Pod-name> -c istio-proxy -- curl 127.0.0.1:15020/stats/prometheus | head -n 10出力例:
# TYPE istio_agent_cert_expiry_seconds gauge istio_agent_cert_expiry_seconds{resource_name="default"} 46725.287654548 # HELP istio_agent_endpoint_no_pod Endpoints without an associated pod. # TYPE istio_agent_endpoint_no_pod gauge istio_agent_endpoint_no_pod 0 # HELP istio_agent_go_gc_duration_seconds A summary of the pause duration of garbage collection cycles. # TYPE istio_agent_go_gc_duration_seconds summary istio_agent_go_gc_duration_seconds{quantile="0"} 5.0149e-05 istio_agent_go_gc_duration_seconds{quantile="0.25"} 9.8807e-05 ......
メトリクスディメンション
メトリクスディメンションによってコンテキストが追加され、Prometheus でメトリクスをフィルタリングできるようになります。たとえば、source_app ディメンションを使用して、特定のクライアントアプリケーションからのリクエストに対するメトリクスをフィルタリングできます。
デフォルトディメンションの編集
次の手順に従って、デフォルトディメンションを編集します。
-
Metric Settings セクションで、Client-Side Metrics または Server-Side Metrics 列において、有効化されているメトリクスの Edit dimension をクリックします。
-
Customize CLIENT dimension configuration または Customize SERVER dimension configuration ダイアログボックスで、エクスポートするディメンションのチェックボックスにチェックを入れるかチェックを外し、Confirm をクリックします。
たとえば、ディメンションを無効化していない場合、kubectl を使用してサイドカーまたはゲートウェイのコンテナ内で curl コマンドを実行し、ポート 15020 のローカル /stats/prometheus パスにアクセスして、エクスポートされたメトリクスを表示できます。
kubectl exec <Pod-name> -c istio-proxy -- curl 127.0.0.1:15020/stats/prometheus
たとえば、コンソールの REQUEST_SIZE メトリクスに対応する istio_request_bytes_sum メトリクスを例にとります。出力から、すべてのディメンションが含まれていることがわかります。
istio_request_bytes_sum{reporter="destination",source_workload="istio-ingressgateway",source_canonical_service="unknown",source_canonical_revision="latest",source_workload_namespace="istio-system",source_principal="spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway",source_app="istio-ingressgateway",source_version="unknown",source_cluster="c479fc4abd2734bfaaa54e9e36fb26c01",destination_workload="httpbin",destination_workload_namespace="default",destination_principal="spiffe://cluster.local/ns/default/sa/httpbin",destination_app="httpbin",destination_version="v1",destination_service="httpbin.default.svc.cluster.local",destination_canonical_service="httpbin",destination_canonical_revision="v1",destination_service_name="httpbin",destination_service_namespace="default",destination_cluster="c479fc4abd2734bfaaa54e9e36fb26c01",request_protocol="http",response_code="200",grpc_response_status="",response_flags="-",connection_security_policy="mutual_tls"} 18000
デフォルトの サーバー側 の REQUEST_SIZE メトリクスを、response_code ディメンションのみを保持するように変更します。次に、curl コマンドを実行して、/stats/prometheus パスからエクスポートされたメトリクスを表示します。出力から、response_code ディメンションのみが含まれていることがわかります。
istio_request_bytes_sum{response_code="200"} 16550
カスタムディメンションの追加
次の手順に従って、カスタムディメンションを追加します。
-
Metric Settings セクションで、Client-Side Metrics または Server-Side Metrics 列において、有効化されているメトリクスの Edit dimension をクリックします。
-
Customize CLIENT dimension configuration または Customize SERVER dimension configuration ダイアログボックスの Custom Dimensions セクションで、ディメンション名と値を設定し、Confirm をクリックします。
たとえば、サーバー側 の REQUEST_SIZE メトリクスのカスタムディメンションを編集します。名前を request_path、値を request.path とするディメンションを追加します。次に、curl コマンドを実行して、/stats/prometheus パスからエクスポートされたメトリクスを表示します。出力から、メトリクスにカスタムディメンション request_path が含まれていることがわかります。
istio_request_bytes_sum{response_code="200",request_path="/spec.json"} 5800
サービスで必要のないデフォルトディメンションを削除すると、Envoy と Prometheus のメモリ消費を削減できます。ただし、ほとんどのディメンションは通常必要であるため、Metric Settings セクションには削除されたディメンションのみが表示されます。
トレーシング設定
完全なトレースを構築するには、呼び出しチェーン全体で一貫したレポート設定が必要です。レポートエンドポイントやサンプリングレートが一貫していないと、不完全なトレースが発生する可能性があります。このため、バージョン 1.24.6.83 より前の ASM インスタンスでは、名前空間レベルまたはワークロードレベルのトレーシング設定は許可されていません。バージョン 1.24.6.83 以降、ASM は Kubernetes API を通じて Telemetry リソースを変更することで、名前空間レベルおよびワークロードレベルのトレーシング設定の実装をサポートします。Telemetry リソースの設定方法の詳細については、「Telemetry CRD の説明」をご参照ください。
サンプリングレート
トレーシングのサンプリングレートをカスタマイズできます。これは、トレースレポートをトリガーするリクエストの割合です。値を 0 にすると、トレーシングが無効になり、トレースレポートはトリガーされません。
カスタムタグ
レポートされるトレーシングスパンのタグをカスタマイズできます。Tracing Analysis Settings セクションで、Add Custom Tags をクリックし、Name、Type、Value を設定します。
タイプには、固定値、リクエストヘッダー、環境変数があります。次の表は、各タイプの説明と設定例を示しています。
|
タイプ |
説明 |
例 |
|
[Fixed Value] |
固定値タグは、指定した値を使用します。 |
|
|
[Request Header] |
リクエストヘッダータグは、指定されたリクエストヘッダーから値を読み取ります。リクエストにヘッダーが存在しない場合は、デフォルト値が使用されます。 たとえば、User-Agent ヘッダーからタグの値を取得できます。ヘッダーが存在しない場合、タグの値はデフォルト値 |
|
|
[Environment Variable] |
環境変数タグは、ワークロード内の指定された環境変数から値を読み取ります。ワークロードに環境変数が存在しない場合は、デフォルト値が使用されます。 たとえば、 |
|