Les journaux d'accès du plan de données Service Mesh (ASM) offrent une visibilité sur les modèles de requêtes, les taux d'erreur et le comportement des services. Dans les environnements à fort trafic, la journalisation non filtrée surcharge les proxys sidecar et génère plus de données que vous ne pouvez analyser utilement.
Common Expression Language (CEL) vous permet d'écrire des règles de filtrage qui contrôlent les entrées de journal émises par le proxy sidecar. Chaque expression CEL est évaluée pour chaque requête : les entrées sont enregistrées lorsque l'expression renvoie true et ignorées lorsqu'elle renvoie false.
Exemples d'expressions CEL
Les exemples ci-dessous vont des filtres à condition unique aux règles multi-conditions.
Filtrer par code d'état de réponse
Enregistrez uniquement les réponses d'erreur (code d'état 400 et supérieur) :
response.code >= 400
response.code correspond au code d'état HTTP. Cette expression ignore les entrées 1xx, 2xx et 3xx, en conservant uniquement les erreurs client (4xx) et les erreurs serveur (5xx).
Faire correspondre les chemins d'URL de requête
Enregistrez les requêtes dont le chemin contient une sous-chaîne spécifique :
request.url_path.contains('login')
request.url_path représente le chemin de la requête HTTP sans la chaîne de requête. contains est une méthode de chaîne standard CEL qui renvoie un booléen.
Combiner des conditions avec des opérateurs logiques
Créez des filtres multi-conditions à l'aide de && (ET) et || (OU).
ET -- toutes les conditions doivent correspondre :
request.url_path.contains('login') && request.headers['x-user-type'] == 'dev'
Enregistre les requêtes dont le chemin contient login et dont l'en-tête x-user-type est égal à dev. request.headers est une map<string, string> contenant tous les en-têtes de requête.
OU -- au moins une condition doit correspondre :
request.url_path.contains('login') || request.url_path.contains('logout')
Enregistre les requêtes dont le chemin contient login ou logout.
Attributs CEL pris en charge
Attributs de requête
| Attribut | Type | Description |
|---|---|---|
request.path |
string | Chemin URL HTTP avec la chaîne de requête |
request.url_path |
string | Chemin URL HTTP sans la chaîne de requête |
request.host |
string | Nom d'hôte issu de l'URL HTTP |
request.scheme |
string | Schéma d'URL, tel que HTTP ou HTTPS |
request.method |
string | Méthode HTTP, telle que GET ou POST |
request.headers |
map |
Tous les en-têtes de requête |
request.referer |
string | Valeur de l'en-tête Referer |
request.useragent |
string | Valeur de l'en-tête User-Agent |
request.time |
timestamp | Heure de réception du premier octet de la requête |
request.id |
string | Valeur de l'en-tête x-request-id |
request.protocol |
string | Protocole de requête, tel que HTTP/1.0, HTTP/1, HTTP/2 ou HTTP/3 |
request.query |
string | Chaîne de requête URL, telle que name1=value1&name2=value2 |
request.duration |
duration | Durée totale de la requête |
request.size |
int | Taille du corps de la requête. Utilise la valeur de l'en-tête Content-Length lorsque celle-ci est disponible. |
request.total_size |
int | Taille totale de la requête, y compris les en-têtes |
Attributs de réponse
| Attribut | Type | Description |
|---|---|---|
response.code |
int | Code d'état HTTP |
response.code_details |
string | Description du code d'état de la réponse |
response.flags |
int | Détails supplémentaires de la réponse au-delà du code d'état HTTP, encodés sous forme de vecteur de bits |
response.grpc_status |
int | Code d'état gRPC |
response.headers |
map |
Tous les en-têtes de réponse |
response.trailers |
map |
Tous les trailers de réponse |
response.size |
int | Taille du corps de la réponse |
response.total_size |
int | Taille totale de la réponse, y compris les en-têtes |
Attributs de connexion descendante (downstream)
| Attribut | Type | Description |
|---|---|---|
source.address |
string | Adresse du client descendant |
source.port |
int | Port du client descendant |
destination.address |
string | Adresse de destination de la connexion descendante |
destination.port |
int | Port de destination de la connexion descendante |
connection.id |
uint | ID de la connexion descendante |
connection.mtls |
bool | Indique si mTLS est activé et si la connexion transporte un certificat client |
connection.requested_server_name |
string | Nom du serveur demandé par la connexion TLS descendante (SNI) |
connection.tls_version |
string | Version TLS de la connexion descendante |
connection.subject_local_certificate |
string | Champ Subject du certificat serveur |
connection.subject_peer_certificate |
string | Champ Subject du certificat client |
connection.dns_san_local_certificate |
string | Première entrée DNS dans le champ SAN du certificat serveur |
connection.dns_san_peer_certificate |
string | Première entrée DNS dans le champ SAN du certificat client |
connection.uri_san_local_certificate |
string | Première entrée URI dans le champ SAN du certificat serveur |
connection.uri_san_peer_certificate |
string | Première entrée URI dans le champ SAN du certificat client |
connection.sha256_peer_certificate_digest |
string | Digest SHA256 du certificat client |
connection.transport_failure_reason |
string | Raison de l'échec du transport, telle qu'un échec de validation du certificat |
Attributs de connexion amont (upstream)
| Attribut | Type | Description |
|---|---|---|
upstream.address |
string | Adresse de destination de la connexion amont |
upstream.port |
int | Port de destination de la connexion amont |
upstream.tls_version |
string | Version TLS de la connexion amont |
upstream.subject_local_certificate |
string | Champ Subject du certificat client utilisé pour la connexion amont |
upstream.subject_peer_certificate |
string | Champ Subject du certificat serveur utilisé pour la connexion amont |
upstream.dns_san_local_certificate |
string | Première entrée DNS dans le champ SAN du certificat client |
upstream.dns_san_peer_certificate |
string | Première entrée DNS dans le champ SAN du certificat serveur |
upstream.uri_san_local_certificate |
string | Première entrée URI dans le champ SAN du certificat client |
upstream.uri_san_peer_certificate |
string | Première entrée URI dans le champ SAN du certificat serveur |
upstream.sha256_peer_certificate_digest |
string | Digest SHA256 du certificat serveur |
upstream.local_address |
string | Adresse locale de la connexion amont |
upstream.transport_failure_reason |
string | Raison de l'échec du transport amont, telle qu'un échec de validation du certificat |