サービスメッシュ(ASM)では、ログ設定、メトリック設定、トレース分析設定などの可観測性設定を構成できます。 ASM コンソールでは、アクセスログの形式、メトリックのディメンション、特定のメトリックを有効にするかどうか、トレース分析のサンプリング率など、グローバル、名前空間レベル、またはワークロードレベルの構成をカスタマイズできます。 このトピックでは、可観測性設定を構成する方法について説明します。
前提条件
V1.17.2.35 以降の ASM インスタンスが作成されています。 詳細については、「ASM インスタンスを作成する」または「ASM インスタンスを更新する」をご参照ください。
適用範囲
構成タイプ | 説明 |
グローバル | グローバル構成には、ログ設定、メトリック設定、およびトレース分析設定が含まれます。 グローバル構成は必須であり、許可されるグローバル構成は 1 つだけです。 トレース分析設定は、[グローバル] タブでのみ使用できます。 |
名前空間レベル | 名前空間固有の可観測性構成。 各名前空間には、名前空間レベルの可観測性構成が 1 つだけあります。 |
カスタム | ワークロードセレクターを使用して、カスタム構成の適用範囲を選択できます。 各ワークロードは、1 つのカスタム構成によってのみ選択できます。 |
手順
グローバル構成
ASM コンソール にログインします。 左側のナビゲーションウィンドウで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[可観測性設定] ページで、[グローバル] タブをクリックし、ビジネス要件に基づいてログ設定、メトリック設定、およびトレース分析設定を構成してから、[送信] をクリックします。
次の表のリンクをクリックして、詳細な構成の説明を表示できます。
セクション
説明
名前空間レベルの構成
ASM コンソール にログインします。 左側のナビゲーションウィンドウで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[可観測性設定] ページで、[名前空間] タブをクリックし、[作成] をクリックします。 表示されるページで、[名前空間] ドロップダウンリストから目的の名前空間を選択し、ビジネス要件に基づいてログ設定とメトリック設定を構成してから、[作成] をクリックします。
次の表のリンクをクリックして、詳細な構成の説明を表示できます。
セクション
説明
カスタム構成
ASM コンソール にログインします。 左側のナビゲーションウィンドウで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[可観測性設定] ページで、[カスタム] タブをクリックし、[名前空間] ドロップダウンリストから目的の名前空間を選択して、[作成] をクリックします。 表示されるページで、[名前] と [一致ラベル] を設定し、ビジネス要件に基づいてログ設定とメトリック設定を構成してから、[作成] をクリックします。
次の表のリンクをクリックして、詳細な構成の説明を表示できます。
セクション
説明
ログ設定
[ログ設定] セクションでは、アクセスログ出力の有効化または無効化、アクセスログの出力形式のカスタマイズ、アクセスログの形式のカスタマイズ、およびログのフィルタリングを行うことができます。
アクセスログ出力を有効または無効にする
[ログ設定] セクションで、ビジネス要件に基づいて [ログ出力を有効にする] スイッチをオンまたはオフにします。
スイッチをオンにすると、ASM インスタンスのデータプレーン上のサイドカープロキシまたはゲートウェイは、アクセスログをコンテナに送信し、コンテナはログを stdout 出力ストリームに出力します。
スイッチをオフにすると、ASM インスタンスのデータプレーン上のサイドカープロキシまたはゲートウェイは、コンテナへのアクセスログの送信を停止し、コンテナはログを stdout 出力ストリームに出力しなくなります。
データプレーン上のサイドカーコンテナの標準出力ストリームでログを表示します。
次の例は、kubectl を使用してアクセスログを表示する方法を示しています。
次のコマンドを実行して、サイドカープロキシのログを表示します。
kubectl logs httpbin-5c5944c58c-w**** -c istio-proxy --tail 1次のコマンドを実行して、イングレスゲートウェイのログを表示します。
kubectl -n istio-system logs istio-ingressgateway-6cff9b6b58-r**** --tail 1
(オプション)Container Service for Kubernetes(ACK)コンソールでアクセスログを表示します。
ACK クラスタを使用している場合は、ACK コンソールでアクセスログを表示することもできます。
ACK コンソール にログインします。 左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、管理するクラスタを見つけて名前をクリックします。 左側のウィンドウで、 を選択します。
[ポッド] ページで、目的のポッドの名前をクリックし、[ログ] タブをクリックしてアクセスログを表示します。
アクセスログの出力形式をカスタマイズする
この機能は、V1.20.6.36 以降の ASM インスタンスでのみ使用できます。 ASM インスタンスの更新方法の詳細については、「ASM インスタンスを更新する」をご参照ください。
[ログ設定] セクションで、ビジネス要件に基づいて [ログ出力形式] パラメータを [JSON] または [テキスト] に設定します。
パラメータを [JSON] に設定すると、アクセスログは JSON 文字列として対応するコンテナに出力されます。
パラメータを [テキスト] に設定すると、アクセスログはプレーンテキスト文字列として対応するコンテナに出力されます。
アクセスログの形式をカスタマイズする
[ログ設定] セクションで、目的のカスタムフィールドを選択するか、カスタムフィールドの情報を変更します。 下部にあるログメトリックの右側にある
アイコンをクリックして、ログフィールドを追加することもできます。ログ出力を有効にする[ログ出力] を有効にした場合にのみ、ログの形式をカスタマイズできます。 セクションでは、デフォルトで選択されているログフィールドは必須であり、変更できません。 リクエストヘッダー、レスポンスヘッダー、または Envoy 組み込み値からログフィールドの値を取得することを選択できます。
次の例では、[accessLogFormat キー] を accept-encoding に、[タイプ] を [リクエストプロパティ] に、[accessLogFormat 値] を Accept-Encoding に設定して、リクエスト内の accept-encoding ヘッダーを出力します。

次のコマンドを実行して、ASM インスタンスのデータプレーン上のコンポーネントのログを表示します。
kubectl logs httpbin-5c5944c58c-w**** -c istio-proxy --tail 1|grep accept-encoding --color=auto手順 1 で追加された accept-encoding ヘッダーの値がアクセスログに出力されます。
ログをフィルタリングする
[ログ設定] セクションの下部で、[ログフィルターを有効にする] を選択し、ビジネス要件に基づいてテキストボックスにログフィルター式を入力します。 式と一致しないリクエストのアクセスログは出力されません。
たとえば、レスポンスの HTTP ステータスコード が 400 以上のリクエストのログを出力するには、式を response.code >= 400 に設定します。 詳細については、「CEL 式とよく使用される属性」をご参照ください。
CEL 式とよく使用される属性
ログフィルター式は、Common Expression Language(CEL)で記述されます。 次の表は、CEL 式でよく使用される属性について説明しています。 詳細については、「CEL」および「Envoy」をご参照ください。
属性 | タイプ | 説明 |
request.path | 文字列 | リクエストパス。 |
request.url_path | 文字列 | クエリ文字列を含まないリクエストパス。 |
request.host | 文字列 | URL のホスト名部分。 |
request.method | 文字列 | リクエストメソッド。 |
request.headers | map<string, string> | 小文字のヘッダー名でインデックス化されたすべてのリクエストヘッダー。 |
request.useragent | 文字列 | ユーザーエージェントヘッダーの値。 |
request.time | タイムスタンプ | リクエストの最初のバイトが到着した時刻。 |
request.id | 文字列 | リクエスト ID。 |
request.protocol | 文字列 | リクエストプロトコル。 有効な値: |
request.query | 文字列 | リクエスト URL のクエリ部分。 |
response.code | int | レスポンスの HTTP ステータスコード。 |
response.code_details | 文字列 | レスポンスコードの詳細。 |
response.grpc_status | int | レスポンスの Google 遠隔手続き呼出し(gRPC)ステータスコード。 |
response.headers | map<string, string> | 小文字のヘッダー名でインデックス化されたすべてのレスポンスヘッダー。 |
response.size | int | レスポンス本文のサイズ。 単位:バイト。 |
response.total_size | int | レスポンスの合計サイズ。 単位:バイト。 |
メトリック設定
メトリック設定には、メトリックの有効化または無効化と、メトリックディメンションの編集が含まれます。
メトリックを有効または無効にする
メトリックは、クライアント側のメトリックとサーバー側のメトリックで構成されます。
クライアント側のメトリックは、サイドカープロキシがリクエストを開始するクライアントとして機能する場合に生成されるメトリックです。 ゲートウェイメトリックもクライアント側のメトリックに属します。
サーバー側のメトリックは、サイドカープロキシがアクセスされるサーバーとして機能する場合に生成されるメトリックです。
[メトリック設定] セクションで、[CLIENT 側の指標] または [SERVER 側の指標] 列の対応するメトリックの [有効] チェックボックスをオンまたはオフにします。
メトリックが有効になっている場合、ASM インスタンスのデータプレーン上のサイドカープロキシまたはゲートウェイは、ポート 15020 経由で
/stats/prometheusパスでメトリックを公開します。メトリックが無効になっている場合、ポート経由では公開されません。
次のコマンドを実行して、サイドカープロキシまたはゲートウェイによって公開されているメトリックを表示します。
kubectl を使用してサイドカープロキシまたはゲートウェイのコンテナに接続し、curl コマンドを実行してポート 15020 経由で
/stats/prometheusパスにアクセスし、エクスポートされたメトリックを表示できます。kubectl exec httpbin-5c5944c58c-w**** -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 ディメンションを使用して、特定のクライアント アプリケーションからのリクエストのメトリックをフィルタリングできます。
デフォルトディメンションの編集
[メトリック設定] のセクションで、有効な [クライアント側メトリック] または [サーバー側メトリック] の [ディメンションの編集] をクリックします。
[CLIENT ディメンション構成のカスタマイズ] または [SERVER ディメンション構成のカスタマイズ] ダイアログボックスで、エクスポートするディメンションを選択し、[送信] をクリックします。
たとえば、すべてのディメンションが有効になっている場合、kubectl を使用してサイドカープロキシまたはゲートウェイのコンテナに接続し、次の curl コマンドを実行してポート 15020 経由で /stats/prometheus パスにアクセスし、エクスポートされたメトリックを表示できます。
kubectl exec httpbin-5c5944c58c-w**** -c istio-proxy -- curl 127.0.0.1:15020/stats/prometheusメトリック [istio_request_bytes_sum](コントロールパネルの [REQUEST_SIZE] メトリックに対応)を例として使用します。 すべてのディメンションが含まれていることがわかります。
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] ディメンションのみを保持します。 次に、kubectl を使用してサイドカープロキシまたはゲートウェイのコンテナに接続し、curl コマンドを実行してポート 15020 経由で /stats/prometheus パスにアクセスし、エクスポートされたメトリックを表示します。 [response_code] ディメンションのみが含まれていることがわかります。
istio_request_bytes_sum{response_code="200"} 16550カスタムディメンションを追加する
次の手順を実行して、カスタムディメンションを追加できます。
[メトリック設定] セクションで、[クライアント側メトリック] または [サーバー側メトリック] 列の有効なメトリックの [ディメンションの編集] をクリックします。
[CLIENT ディメンション構成のカスタマイズ] または [SERVER ディメンション構成のカスタマイズ] ダイアログボックスで、[カスタムディメンション] タブをクリックし、[ディメンション名] パラメータと [値] パラメータを設定して、[送信] をクリックします。
たとえば、[サーバー側メトリック] 列の [REQUEST_SIZE] メトリックを編集し、ディメンション名を [request_path] に、ディメンション値を [request.path] に設定したカスタムディメンションを追加できます。 次に、kubectl を使用してサイドカープロキシまたはゲートウェイのコンテナに接続し、curl コマンドを実行してポート 15020 経由で /stats/prometheus パスにアクセスし、エクスポートされたメトリックを表示します。 メトリックには、カスタムディメンション [request_path] が含まれていることがわかります。
istio_request_bytes_sum{response_code="200",request_path="/spec.json"} 5800サービスで必要とされないデフォルトディメンションを削除して、Envoy と Prometheus のメモリ消費量を削減できます。 ただし、ほとんどのディメンションは保持されます。 したがって、[メトリック設定] セクションには、削除されたディメンションのみが表示されます。
トレース分析設定
トレース構成には、サンプリング率とカスタムタグが含まれます。 トレースでは、完全なトレースを構築するために、コールチェーン全体で一貫したレポート構成が必要になります。 レポートエンドポイントまたはサンプリングレートに一貫性がないと、トレースが不完全になる可能性があります。 このため、1.24.6.83 より前のバージョンでは、名前空間レベルまたはワークロードレベルのトレース構成はサポートされていません。 1.24.6.83 以降のバージョンでは、ASM は Kubernetes API を介した Telemetry リソースの変更をサポートしており、名前空間レベルおよびワークロードレベルのトレース構成を有効にできます。 詳細については、「Telemetry フィールドの説明」をご参照ください。
サンプリング率
サンプリング率は、トレース分析をトリガーするリクエストの割合を示します。 値を 0 に設定すると、トレース分析は無効になり、リクエストによってトレース分析がトリガーされることはありません。
カスタムタグ
トレース分析の Spans によって伝達されるタグをカスタマイズできます。 [トレース分析設定] セクションで、[カスタムタグを追加] をクリックし、[名前]、[タイプ]、[値] を設定します。
次の表に、タイプの値とタグ構成の例を示します。
タイプ | 説明 | タグ構成例 |
[固定値] | このタイプのタグの値は、設定した値に固定されます。 |
|
[リクエストヘッダー] | このタイプのタグの値は、指定されたリクエストヘッダーの値です。 リクエストにヘッダーが存在しない場合は、デフォルト値がタグ値として使用されます。 構成例では、タグ値は User-Agent ヘッダーから取得されます。 ヘッダーが存在しない場合は、デフォルト値 unknown がタグ値として使用されます。 |
|
[環境変数] | このタイプのタグの値は、ワークロードの指定された環境変数から取得されます。 ワークロードに環境変数が存在しない場合は、デフォルト値がタグ値として使用されます。 構成例では、タグ値は ENV 環境変数から取得されます。 環境変数が存在しない場合は、デフォルト値 unknown がタグ値として使用されます。 |
|