Service Mesh(ASM)では、ログ設定、メトリック設定、トレース分析設定などの可観測性設定を構成できます。 ASMコンソールでは、アクセスログの形式、メトリックのディメンション、特定のメトリックを有効にするかどうか、トレース分析のサンプリング率など、グローバル、名前空間レベル、またはワークロードレベルの構成をカスタマイズできます。 このトピックでは、可観測性設定を構成する方法について説明します。
前提条件
バージョン 1.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 Key] を accept-encoding に設定し、[タイプ] を [リクエストプロパティ] に設定し、[accesslogformat Value] を 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 | string | リクエストパス。 |
request.url_path | string | クエリ文字列を含まないリクエストパス。 |
request.host | string | URL のホスト名部分。 |
request.method | string | リクエストメソッド。 |
request.headers | map<string, string> | 小文字のヘッダー名でインデックス化されたすべてのリクエストヘッダー。 |
request.useragent | string | ユーザーエージェントヘッダーの値。 |
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 | レスポンスの Google Remote Procedure Call(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 側インデックス] 列の [ディメンションの編集] をクリックします。
[CLIENT ディメンション構成のカスタマイズ] ダイアログボックスで、メトリックのエクスポートに使用するディメンションをオンまたはオフにし、[送信] をクリックします。
メトリックディメンションを追加することはできません。 不要なメトリックディメンションを削除して、Prometheus のストレージスペースを節約できます。 通常、ほとんどのディメンションは保持されます。 したがって、[メトリック設定] セクションには、削除されたディメンションのみが表示されます。
トレース分析設定の説明
トレース分析設定セクションでは、サンプリング率とカスタムタグを構成できます。 設定はグローバルに有効になります。
サンプリング率
サンプリング率は、トレース分析をトリガーするリクエストの割合を示します。 値を 0 に設定すると、トレース分析は無効になり、リクエストによってトレース分析はトリガーされません。
カスタムタグ
トレース分析のスパンによって伝達されるタグをカスタマイズできます。 [トレース分析設定] セクションで、[カスタムタグの追加] をクリックし、[名前]、[タイプ]、[値] を設定します。
次の表に、タイプの値とタグ構成の例を示します。
タイプ | 説明 | タグ構成例 |
固定値 | このタイプのタグの値は、設定した値に固定されています。 |
|
リクエストヘッダー | このタイプのタグの値は、指定されたリクエストヘッダーの値です。 リクエストにヘッダーが存在しない場合は、デフォルト値がタグ値として使用されます。 構成例では、タグ値は User-Agent ヘッダーから取得されます。 ヘッダーが存在しない場合は、デフォルト値 unknow がタグ値として使用されます。 |
|
環境変数 | このタイプのタグの値は、ワークロードの指定された環境変数から取得されます。 ワークロードに環境変数が存在しない場合は、デフォルト値がタグ値として使用されます。 構成例では、タグ値は ENV 環境変数から取得されます。 環境変数が存在しない場合は、デフォルト値 unknow がタグ値として使用されます。 |
|