KubernetesクラスターをService Mesh (ASM) インスタンスに追加すると、ASMインスタンスのデータプレーンにデプロイされたEnvoyプロキシは、クラスターのすべてのアクセスログを印刷できます。 ASMを使用すると、Envoyプロキシによって印刷されるアクセスログのフィールドをカスタマイズできます。 このトピックでは、アクセスログのフィールドをカスタマイズする方法について説明します。
前提条件
ステップ1: アクセスログの有効化
1.17.2.35より前のバージョンのASMインスタンスの場合
ASMコンソールにログインします。 左側のナビゲーションウィンドウで、 を選択します。
[メッシュ管理] ページで、ASMインスタンスの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
表示されるページの右上隅で、設定.
では、設定の更新パネル、選択アクセスログを有効にしてコンテナーstdoutに印刷するをクリックし、OK.
デフォルトでは、istio-proxyコンテナは次のフィールドを含むログを出力します。 アクセスログが無効になっている場合、istio-proxyコンテナーはアクセスログをJSON形式で出力しません。
バージョン1.17.2.35以降のASMインスタンスの場合
ASMコンソールにログインします。 左側のナビゲーションウィンドウで、 を選択します。
[メッシュ管理] ページで、ASMインスタンスの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[Observability Settings] ページで、[Global] 、[Namespace] 、または [Custom] タブをクリックします。
[名前空間] タブを選択した場合、[作成] をクリックし、[名前空間] ドロップダウンリストから名前空間を選択します。
[カスタム] タブを選択した場合、[作成] をクリックし、[名前空間] ドロップダウンリストから名前空間を選択し、[名前] と [マッチングラベル] を設定します。
[ログ設定] セクションで、[ログ出力の有効化] スイッチをオンにし、[送信] をクリックします。
スイッチをオンにすると、ASMインスタンスのデータプレーン上のサイドカープロキシまたはゲートウェイは、コンテナの標準出力へのアクセスログを印刷します。 ASMはログフィルター機能もサポートしています。 詳細については、「オブザーバビリティ設定の設定」トピックのログのフィルタリングをご参照ください。
データプレーン上のサイドカーコンテナの標準出力ストリームのログを表示します。
次の例は、kubectlを使用してアクセスログを表示する方法を示しています。
次のコマンドを実行して、サイドカープロキシのログを表示します。
kubectlログhttpbin-5c5944c58c-w **** -c istio-proxy -- tail 1次のコマンドを実行して、ingressゲートウェイのログを表示します。
kubectl -n istio-systemログistio-ingressgateway-6cff9b6b58-r **** -- tail 1
(オプション) Container Service for Kubernetes (ACK) コンソールでアクセスログを表示します。
ACKクラスターを使用している場合は、ACKコンソールでアクセスログを表示することもできます。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを検索し、その名前をクリックします。 左側のウィンドウで、 を選択します。
[ポッド] ページで、目的のポッドの名前をクリックし、[ログ] タブをクリックしてアクセスログを表示します。
ログの詳細については、「オブザーバビリティ設定の設定」および「バージョン1.17.2.35以降のASMインスタンスでのコントロールプレーンのログ収集とログベースのアラートの有効化」をご参照ください。
ステップ2: アクセスログのフィールドをカスタマイズする
1.17.2.35より前のバージョンのASMインスタンスの場合
ASMコンソールにログインします。 左側のナビゲーションウィンドウで、 を選択します。
[メッシュ管理] ページで、ASMインスタンスの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
では、設定情報表示されるページのセクションをクリックします。アクセスログ形式の更新次のアクセスログを有効にしてコンテナーstdoutに印刷する.
[アクセスログの形式の更新] ダイアログボックスで、accessLogFormatキーパラメーターをmy_custom_keyに、accessLogFormat値パラメーターを % REQ (エンドユーザー) % に設定して、フィールドを追加します。 次に、[OK] をクリックします。
この例では、my_custom_keyを使用して、BookinfoサンプルアプリケーションのHTTPリクエストのエンドユーザーヘッダーフィールドの値を抽出し、その値をアクセスログに挿入します。 ASMが提供するオプションのフィールドを選択するか、カスタムフィールドを追加できます。 次の図は、オプションフィールドとサンプルカスタムフィールドを示しています。 その後、アクセスログがカスタム形式で印刷されます。
バージョン1.17.2.35以降のASMインスタンスの場合
ASMコンソールにログインします。 左側のナビゲーションウィンドウで、 を選択します。
[メッシュ管理] ページで、ASMインスタンスの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[Observability Settings] ページで、[Global] 、[Namespace] 、または [Custom] タブをクリックします。
[名前空間] タブを選択した場合、[作成] をクリックし、[名前空間] ドロップダウンリストから名前空間を選択します。
[カスタム] タブを選択した場合、[作成] をクリックし、[名前空間] ドロップダウンリストから名前空間を選択し、[名前] と [マッチングラベル] を設定します。
[ログ設定] セクションで、目的のフィールドを選択するか、カスタムフィールドの情報を変更します。 下部のログメトリックの右側にある
アイコンをクリックして、ログフィールドを追加することもできます。 次に、[送信] をクリックします。 [ログ出力の有効化] をオンにした場合にのみ、アクセスログのフィールドをカスタマイズできます。 [ログ形式] セクションでは、デフォルトで選択されているログフィールドは必須であり、変更できません。 ログフィールドの値は、リクエストヘッダー、レスポンスヘッダー、またはEnvoy組み込み値から取得できます。
次の例では、accessLogFormatキーをaccept-encodingに、TypeをRequest Propertiesに、accessLogFormat値をAccept-Encodingに設定して、リクエストにaccept-encodingヘッダーを出力します。
次のコマンドを実行して、ASMインスタンスのデータプレーン上のコンポーネントのログを表示します。
kubectlログhttpbin-5c5944c58c-w **** -c istio-proxy -- tail 1 | grep accept-encoding -- color=autoサブステップ4で追加されたaccept-encodingヘッダーの値がアクセスログに出力されます。 ログの詳細については、「オブザーバビリティ設定の設定」および「バージョン1.17.2.35以降のASMインスタンスでのコントロールプレーンのログ収集とログベースのアラートの有効化」をご参照ください。
ステップ3: アクセスログの表示
アクセスログを有効にし、アクセスログのフィールドをカスタマイズすると、リクエストを開始したサイドカーコンテナーがアクセスログをカスタム形式で印刷します。
入力ingressゲートウェイのIPアドレス: productpageブラウザのアドレスバーで、Productpageアプリケーションにアクセスします。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
の上部にデプロイメントページを選択します。デフォルトから名前空間ドロップダウンリストをクリックし、詳細で、アクションの列productpage-v1アプリケーションを使用します。
アプリケーションの詳細ページで、ログタブを設定し、コンテナパラメーターをistio-proxy.
ログ出力ボックスには, 次のログが表示されます。 ログには、jasonという名前のエンドユーザーを指定するフィールドが含まれます。 これは、カスタム設定が有効になることを示します。
期間フィールド
Service Meshでは、「上流」は要求の受信者を示し、「下流」は要求の開始者を示す。 例えば、サービスAがサービスBへの要求を開始するとき、サービスaは下流サービスであり、サービスBは上流サービスである。
項目 | 値 | 説明 |
期間 | $DURATION % |
|
request_duration | % REQUEST_DURATION % |
|
request_tx_duration | % REQUEST_TX_DURATION % |
|
response_duration | % RESPONSE_DURATION % |
|
response_tx_duration | % RESPONSE_TX_DURATION % |
|
upstream_service_time (サイドカープロキシの場合) | % RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% | サイドカープロキシまたはゲートウェイのアクセスログでは、このフィールドは上流サービスの処理時間と上流サービスとの通信で消費された時間を示します。 このフィールドの値が予想より大きい場合は、次の項目を確認します。
|
upstream_response_time (ゲートウェイ用) |
Content-Lengthが0より大きいボディを持つHTTPリクエストの場合、リクエストは読み取り後に送信されるのではなく、同時に読み取られて上流のサービスに送信されます。 この場合、現在のノードがダウンストリームサービスから要求をゆっくりと読み取る場合、現在のノードのアップストリームサービスは、要求を読み取るのにより多くの時間を要する。
関連する API 操作
Simple Log Serviceを使用して、データプレーンのアクセスログを収集することもできます。 詳細については、「ASMゲートウェイのアクセスログの生成と収集の機能の設定」をご参照ください。