アクセスログを使用すると、ビジネスおよびService Mesh (ASM) データプレーンの実行ステータスを確認できます。 多数のアクセス要求があるビジネスシナリオでは、特定の条件に基づいてログをフィルタリングして、サイドカープロキシのパフォーマンスオーバーヘッドを減らし、キーログの内容に集中できます。 ASMでは、Common Expression Language (CEL) を使用してログをフィルタリングするためのルールを設定できます。 このトピックでは、CELを使用してASMアクセスログとCELでサポートされるフィールドをフィルタリングするルールを設定する方法について説明します。
フィルタリングルール
CEL式がtrueに評価された場合、アクセスログが返されます。 それ以外の場合、アクセスログは返されません。
例
例1: 応答ステータスコードが400以上のアクセスログのみを返す
response.code >= 400response.codeは、HTTPレスポンスのHTTPステータスコードを示します。 HTTPレスポンスのHTTPステータスコードが400以上の場合、式はtrueと評価され、リクエストのアクセスログが返されます。
例2: リクエストURIにログイン部分文字列を含むアクセスログのみを返す
request.url_path.contains('login')request.url_pathは、クエリ文字列を含まないHTTPリクエストのパスを示します。containsは、文字列に指定された部分文字列が含まれているかどうかを判断するために使用されるブール値を返す標準のCEL文字列メソッドです。request.url_pathにlogin部分文字列が含まれている場合、式はtrueと評価され、リクエストのアクセスログが返されます。
例3: 論理ANDと論理ORを使用して複数の条件に基づいて判断を下す
論理AND (&&)
request.url_path.contains('login') && request.headers['x-user-type'] ='dev'request.url_pathは、クエリ文字列を含まないHTTPリクエストのパスを示します。request.headersは、リクエスト内のリクエストヘッダーを示します。 その値型はmap<string, string> です。request.url_pathにloginが含まれ、リクエストにx-user-typeリクエストヘッダーが含まれ、リクエストヘッダーの値がdevの場合、リクエストのアクセスログが返されます。
論理OR (| |)
request.url_path.contains('login') | | request.url_path.contains('logout')request.url_pathは、クエリ文字列を含まないHTTPリクエストのパスを示します。request.url_pathにloginまたはlogoutが含まれている場合、リクエストのアクセスログが返されます。
CELがサポートするフィールド
リクエスト属性
属性 | データ型 | 説明 |
request.path | String | クエリ文字列を含むHTTP URLのパス部分。 |
request.url_path | String | クエリ文字列のないHTTP URLのパス部分。 |
request.host | String | HTTP URLのホスト名部分。 |
request.scheme | String | HTTPまたはHTTPSなどのHTTP URLのスキーム部分。 |
request.method | String | GETやPOSTなどのリクエストメソッド。 |
request.headers | map<string, string> | すべてのリクエストヘッダーのマップ。 |
request.referer | String | リクエスト内の参照ヘッダーの値。 |
request.us eragent | String | リクエスト内のUser-Agentヘッダーの値。 |
request.time | timestamp | リクエストの最初のバイトが受信されたときのタイムスタンプ。 |
request.id | String | リクエスト内のx-request-idヘッダーの値。 |
request.protocol | String | HTTP/1.0、HTTP/1、HTTP/2、HTTP/3などのリクエストプロトコル。 |
request.query | String | URL内のクエリ文字列。たとえば、name1=value1&name2=value2です。 |
request.duration | 期間 | リクエストの合計期間。 |
request.size | int | リクエストボディのサイズ。 Content-Lengthヘッダーが存在する場合、その値が使用されます。 |
request.total_size | int | リクエストヘッダーを含む完全なリクエストのサイズ。 |
レスポンス属性
属性 | データ型 | 説明 |
response.code | int | レスポンスのHTTPステータスコード。 |
response.code_details | String | 応答ステータスコードの説明。 |
response.flags | int | 追加の情報は、応答のHTTPステータスコードに加えて、ビットベクトルとしてエンコードされます。 |
response.grpc_status | int | レスポンスのGRPCステータスコード。 |
response.headers | map<string, string> | すべてのレスポンスヘッダーのマップ。 |
response.trailers | map<string, string> | 応答内のすべてのトレーラーのマップ。 |
response.size | int | レスポンスボディのサイズ。 |
response.total_size | int | 応答ヘッダーを含む完全な応答のサイズ。 |
ダウンストリーム接続の属性
属性 | データ型 | 説明 |
source.address | String | ダウンストリームクライアントのアドレス。 |
source.port | int | ダウンストリームクライアントのポート。 |
destination.address | String | ダウンストリーム接続の宛先アドレス。 |
destination.port | int | ダウンストリーム接続の宛先ポート。 |
connection.id | uint | ダウンストリーム接続のID。 |
connection.mtls | bool | ダウンストリーム接続でTLSを有効にするかどうか、およびダウンストリーム接続が証明書を保持するかどうかを指定します。 |
connection.requested_server_name | String | ダウンストリームTLS接続によって要求されたサーバーの名前。 |
connection.tls_version | String | ダウンストリーム接続のTLSバージョン。 |
connection.subject_local_certificate | String | ダウンストリーム接続に使用されるサーバー証明書のSubjectフィールド。 |
connection.subject_peer_certificate | String | ダウンストリーム接続に使用されるクライアント証明書のSubjectフィールド。 |
接続. dns_san_local_certificate | String | ダウンストリームTLS接続に使用されるサーバー証明書のSANフィールドの最初のDNSエントリ。 |
接続. dns_san_peer_certificate | String | ダウンストリームTLS接続に使用されるクライアント証明書のSANフィールドの最初のDNSエントリ。 |
connection.uri_san_local_certificate | String | ダウンストリームTLS接続に使用されるサーバー証明書のSANフィールドの最初のURIエントリ。 |
connection.uri_san_peer_certificate | String | ダウンストリームTLS接続に使用されるクライアント証明書のSANフィールドの最初のURIエントリ。 |
connection.sha256_peer_certificate_digest | String | ダウンストリームTLS接続に使用されるクライアント証明書のSHA256ハッシュ文字列。 |
connection.transport_failure_reason | String | 証明書の検証に失敗したなど、送信失敗の理由。 |
アップストリーム接続の属性
属性 | データ型 | 説明 |
upstream.address | String | アップストリーム接続の宛先アドレス。 |
upstream.port | int | アップストリーム接続の宛先ポート。 |
upstream.tls_version | String | アップストリーム接続のTLSバージョン。 |
upstream.subject_local_certificate | String | アップストリーム接続に使用されるクライアント証明書のSubjectフィールドの値。 |
upstream.subject_peer_certificate | String | アップストリーム接続に使用されるサーバー証明書のSubjectフィールドの値。 |
upstream.dns_san_local_certificate | String | アップストリーム接続に使用されるクライアント証明書のSANフィールドの最初のDNSエントリ。 |
upstream.dns_san_peer_certificate | String | アップストリーム接続に使用されるサーバー証明書のSANフィールドの最初のDNSエントリ。 |
upstream.uri_san_local_certificate | String | アップストリーム接続に使用されるクライアント証明書のSANフィールドの最初のURIエントリ。 |
upstream.uri_san_peer_certificate | String | アップストリーム接続に使用されるサーバー証明書のSANフィールドの最初のURIエントリ。 |
アップストリームsha256_peer_certificate_digest | String | ダウンストリームTLS接続に使用されるサーバー証明書のSHA256ハッシュ文字列。 |
upstream.local_address | String | アップストリームクライアントのローカルアドレス。 |
upstream.transport_failure_reason | String | 証明書の検証に失敗したなど、アップストリーム送信の失敗の理由。 |