すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Service Mesh:CELを使用してアクセスログをフィルタリングするルールを設定する

最終更新日:Jan 14, 2025

アクセスログを使用すると、ビジネスおよびService Mesh (ASM) データプレーンの実行ステータスを確認できます。 多数のアクセス要求があるビジネスシナリオでは、特定の条件に基づいてログをフィルタリングして、サイドカープロキシのパフォーマンスオーバーヘッドを減らし、キーログの内容に集中できます。 ASMでは、Common Expression Language (CEL) を使用してログをフィルタリングするためのルールを設定できます。 このトピックでは、CELを使用してASMアクセスログとCELでサポートされるフィールドをフィルタリングするルールを設定する方法について説明します。

フィルタリングルール

CEL式がtrueに評価された場合、アクセスログが返されます。 それ以外の場合、アクセスログは返されません。

例1: 応答ステータスコードが400以上のアクセスログのみを返す

response.code >= 400

response.codeは、HTTPレスポンスのHTTPステータスコードを示します。 HTTPレスポンスのHTTPステータスコードが400以上の場合、式はtrueと評価され、リクエストのアクセスログが返されます。

例2: リクエストURIにログイン部分文字列を含むアクセスログのみを返す

request.url_path.contains('login')
  • request.url_pathは、クエリ文字列を含まないHTTPリクエストのパスを示します。

  • containsは、文字列に指定された部分文字列が含まれているかどうかを判断するために使用されるブール値を返す標準のCEL文字列メソッドです。 request.url_pathlogin部分文字列が含まれている場合、式は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_pathloginが含まれ、リクエストにx-user-typeリクエストヘッダーが含まれ、リクエストヘッダーの値がdevの場合、リクエストのアクセスログが返されます。

  • 論理OR (| |)

    request.url_path.contains('login') | | request.url_path.contains('logout')
    • request.url_pathは、クエリ文字列を含まないHTTPリクエストのパスを示します。

    • request.url_pathloginまたは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

証明書の検証に失敗したなど、アップストリーム送信の失敗の理由。