Journalisation et surveillance de l'équilibreur de charge d'application externe régional

Ce document explique comment configurer et utiliser Cloud Logging et Cloud Monitoring avec des équilibreurs de charge d'application externes régionaux.

Journalisation

Vous pouvez activer, désactiver et afficher les journaux d'un service de backend d'équilibreur de charge d'application externe.

Vous activez ou désactivez la journalisation pour chaque service de backend. Vous pouvez configurer la journalisation pour toutes les requêtes ou seulement pour une fraction échantillonnée de manière aléatoire.

Vous devez vérifier qu'aucune exclusion de journaux ne s'applique aux équilibreurs de charge d'application externes. Pour savoir comment vérifier si les journaux Cloud HTTP Load Balancer sont autorisés, consultez la section Afficher les exclusions de types de ressources.

Échantillonnage et collecte des journaux

Les requêtes (et les réponses correspondantes) gérées par les instances de machine virtuelle (VM) de backend d'équilibreur de charge sont échantillonnées. Ces requêtes échantillonnées sont ensuite traitées pour générer des journaux. Vous contrôlez la fraction des requêtes émises en tant qu'entrées de journal en fonction du paramètre logConfig.sampleRate. Lorsque logConfig.sampleRate est défini sur 1.0 (100%), cela signifie que les journaux sont générés pour toutes les requêtes et écrits dans Cloud Logging.

Champs facultatifs

Les enregistrements de journal contiennent des champs obligatoires et des champs facultatifs. La section Contenu consigné répertorie les champs facultatifs et les champs obligatoires. Tous les champs obligatoires sont toujours inclus. Vous pouvez personnaliser quels sont les champs facultatifs à conserver.

  • Si vous sélectionnez Inclure tous les champs facultatifs, tous les champs facultatifs du format d'enregistrement du journal sont inclus dans les journaux. Lorsque de nouveaux champs facultatifs sont ajoutés au format d'enregistrement, les journaux incluent automatiquement les nouveaux champs.

  • Si vous sélectionnez Exclure tous les champs facultatifs, tous les champs facultatifs sont omis.

  • Si vous sélectionnez Personnalisé, vous pouvez spécifier les champs facultatifs que vous souhaitez inclure, par exemple tls.protocol,tls.cipher.

Pour obtenir des instructions sur la personnalisation des champs facultatifs, consultez la section Activer la journalisation sur un nouveau service de backend.

Activer la journalisation sur un nouveau service de backend

Console

  1. Dans la console Google Cloud, accédez à la page Équilibrage de charge.

    Accéder à la page "Équilibrage de charge"

  2. Cliquez sur le nom de votre équilibreur de charge.

  3. Cliquez sur Modifier ().

  4. Cliquez sur Configuration du backend.

  5. Sélectionnez Créer un service backend.

  6. Renseignez les champs obligatoires du service de backend.

  7. Dans la section Journalisation, cochez la case Activer la journalisation.

  8. Définissez un taux d'échantillonnage. Vous pouvez définir un nombre compris entre 0.0 et 1.0, où 0.0 signifie qu'aucune requête n'est enregistrée et 1.0 signifie que 100% des requêtes sont enregistrées. La valeur par défaut est 1.0.

  9. Facultatif : pour inclure tous les champs facultatifs dans les journaux, dans la section Champs facultatifs, cliquez sur Inclure tous les champs facultatifs.

  10. Pour terminer la modification du service de backend, cliquez sur Mettre à jour.

  11. Pour terminer la modification de l'équilibreur de charge, cliquez sur Mettre à jour.

gcloud : mode régional

Créez un service de backend et activez la journalisation à l'aide de la commande gcloud compute backend-services create.

gcloud compute backend-services create BACKEND_SERVICE \
    --region=REGION \
    --enable-logging \
    --logging-sample-rate=VALUE \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --logging-optional=LOGGING_OPTIONAL_MODE \
    --logging-optional-fields=OPTIONAL_FIELDS

Où :

  • --region indique que le service de backend est régional. Utilisez ce champ pour les services de backend utilisés avec les équilibreurs de charge d'application externes régionaux.
  • --enable-logging active la journalisation pour ce service de backend.
  • --logging-sample-rate permet de spécifier une valeur entre 0.0 et 1.0, où 0.0 signifie qu'aucune requête n'est enregistrée et 1.0 signifie que 100 % des requêtes sont enregistrées. Ce paramètre n'est pertinent que lorsqu'il est associé au paramètre --enable-logging. L'activation de la journalisation en définissant le taux d'échantillonnage sur 0.0 équivaut à désactiver la journalisation. La valeur par défaut est 1.0.
  • --logging-optional vous permet de spécifier les champs facultatifs que vous souhaitez inclure dans les journaux :

    • INCLUDE_ALL_OPTIONAL pour inclure tous les champs facultatifs.

    • EXCLUDE_ALL_OPTIONAL (par défaut) pour exclure tous les champs facultatifs.

    • CUSTOM pour inclure une liste personnalisée de champs facultatifs que vous spécifiez dans OPTIONAL_FIELDS.

  • --logging-optional-fields vous permet de spécifier une liste de champs facultatifs séparés par une virgule que vous souhaitez inclure dans les journaux.

    Par exemple, tls.protocol,tls.cipher ne peut être défini que si LOGGING_OPTIONAL_MODE est défini sur CUSTOM.

Activer la journalisation sur un service de backend existant

Console

  1. Dans la console Google Cloud, accédez à la page Équilibrage de charge.

    Accéder à la page "Équilibrage de charge"

  2. Cliquez sur le nom de votre équilibreur de charge.

  3. Cliquez sur Modifier ().

  4. Cliquez sur Configuration du backend.

  5. Cliquez sur Modifier () à côté de votre service de backend.

  6. Dans la section Journalisation, cochez la case Activer la journalisation.

  7. Dans le champ Taux d'échantillonnage, définissez la probabilité d'échantillonnage. Vous pouvez définir un nombre compris entre 0.0 et 1.0, où 0.0 signifie qu'aucune requête n'est enregistrée et 1.0 signifie que 100 % des requêtes sont enregistrées. La valeur par défaut est 1.0.

  8. Facultatif : pour inclure tous les champs facultatifs dans les journaux, dans la section Champs facultatifs, cliquez sur Inclure tous les champs facultatifs.

  9. Pour terminer la modification du service de backend, cliquez sur Mettre à jour.

  10. Pour terminer la modification de l'équilibreur de charge, cliquez sur Mettre à jour.

gcloud : mode régional

Activez la journalisation sur un service de backend existant à l'aide de la commande gcloud compute backend-services update.

gcloud compute backend-services update BACKEND_SERVICE \
    --region=REGION \
    --enable-logging \
    --logging-sample-rate=VALUE \
    --logging-optional=LOGGING_OPTIONAL_MODE \
    --logging-optional-fields=OPTIONAL_FIELDS

Où :

  • --region indique que le service de backend est régional. Utilisez ce champ pour les services de backend utilisés avec les équilibreurs de charge d'application externes régionaux.
  • --enable-logging active la journalisation pour ce service de backend.
  • --logging-sample-rate permet de spécifier une valeur entre 0.0 et 1.0, où 0.0 signifie qu'aucune requête n'est enregistrée et 1.0 signifie que 100 % des requêtes sont enregistrées. Ce paramètre n'est pertinent que lorsqu'il est associé au paramètre --enable-logging. L'activation de la journalisation en définissant le taux d'échantillonnage sur 0.0 équivaut à désactiver la journalisation. La valeur par défaut est 1.0.
  • --logging-optional vous permet de spécifier les champs facultatifs que vous souhaitez inclure dans les journaux.

    • INCLUDE_ALL_OPTIONAL pour inclure tous les champs facultatifs.

    • EXCLUDE_ALL_OPTIONAL (par défaut) pour exclure tous les champs facultatifs.

    • CUSTOM pour inclure une liste personnalisée de champs facultatifs que vous spécifiez dans OPTIONAL_FIELDS.

  • --logging-optional-fields vous permet de spécifier une liste de champs facultatifs séparés par une virgule que vous souhaitez inclure dans les journaux.

    Par exemple, tls.protocol,tls.cipher. Ne peut être défini que si LOGGING_OPTIONAL_MODE est défini sur CUSTOM.

Désactiver ou modifier la journalisation sur un service de backend existant

Console

  1. Dans la console Google Cloud, accédez à la page Équilibrage de charge.

    Accéder à la page "Équilibrage de charge"

  2. Cliquez sur le nom de votre équilibreur de charge.

  3. Cliquez sur Modifier ().

  4. Cliquez sur Configuration du backend.

  5. Cliquez sur Modifier () à côté de votre service de backend.

  6. Pour désactiver complètement la journalisation, décochez la case Activer la journalisation dans la section Journalisation.

  7. Si vous laissez la journalisation activée, vous pouvez définir un autre taux d'échantillonnage. Vous pouvez définir un nombre compris entre 0.0 et 1.0, où 0.0 signifie qu'aucune requête n'est enregistrée et 1.0 signifie que 100% des requêtes sont enregistrées. La valeur par défaut est 1.0. Par exemple, 0.2 signifie que 20% des requêtes échantillonnées génèrent des journaux.

  8. Pour terminer la modification du service de backend, cliquez sur Mettre à jour.

  9. Pour terminer la modification de l'équilibreur de charge, cliquez sur Mettre à jour.

gcloud : mode régional

Désactivez la journalisation sur un service de backend à l'aide de la commande gcloud compute backend-services update.

Désactiver complètement la journalisation

gcloud compute backend-services update BACKEND_SERVICE \
    --region=REGION \
    --no-enable-logging

Où :

  • --region indique que le service de backend est régional. Utilisez ce champ pour les services de backend utilisés avec les équilibreurs de charge d'application externes régionaux.
  • --no-enable-logging désactive la journalisation pour ce service de backend.

Modifier le taux d'échantillonnage des journaux

gcloud compute backend-services update BACKEND_SERVICE \
 --global | --region=REGION \
 --logging-sample-rate=VALUE

Afficher les journaux

Les journaux HTTP(S) sont d'abord indexés par une règle de transfert, puis par un mappage d'URL.

Pour afficher les journaux, accédez à la page Explorateur de journaux :

Accéder à l'explorateur de journaux

  • Pour afficher tous les journaux, dans le menu de filtre Ressource, sélectionnez Équilibreur de charge HTTP Cloud > Toutes les règles de transfert.

  • Pour afficher les journaux d'une seule règle de transfert, sélectionnez un nom de règle de transfert.

  • Pour afficher les journaux d'un seul mappage d'URL, sélectionnez une règle de transfert, puis un mappage d'URL.

Les champs de journal de type booléen n'apparaissent généralement que s'ils comportent la valeur true. Si un champ booléen a la valeur false, il est omis du journal.

Le codage UTF-8 est appliqué aux champs de journaux. Les caractères qui ne sont pas au format UTF-8 sont remplacés par des points d'interrogation. Pour les équilibreurs de charge d'application externes régionaux,vous pouvez exporter des métriques basées sur les journaux à l'aide des journaux de ressources (resource.type="http_external_regional_lb_rule").

Contenu consigné

Les entrées des journaux d'équilibreur de charge d'application externe contiennent des informations utiles pour surveiller et déboguer votre trafic HTTP(S). Les enregistrements de journal contiennent des champs obligatoires, qui sont les champs par défaut de chaque enregistrement de journal. Les enregistrements de journal contiennent des champs facultatifs qui ajoutent des informations supplémentaires sur votre trafic HTTP(S). Ils peuvent être omis pour réduire les coûts de stockage.

Le format "multi-champs" de certains champs affiche plusieurs données dans un même champ. Par exemple, le champ tls est au format TlsDetails, qui contient le protocole TLS et l'algorithme de chiffrement TLS dans un seul champ. Ces champs particuliers sont décrits dans le tableau sur le format des enregistrements ci-dessous.

Champ Format du champ Type de champ : obligatoire ou facultatif Description
gravité
ID d'insertion
code temporel
Nom du journal
LogEntry Obligatoire Champs généraux décrits dans une entrée de journal.
httpRequest HttpRequest Obligatoire Protocole courant pour la journalisation des requêtes HTTP.
resource MonitoredResource Obligatoire

MonitoredResource est le type de ressource associé à une entrée de journal.

MonitoredResourceDescriptor décrit le schéma d'un objet MonitoredResource à l'aide d'un nom de type et d'un ensemble de libellés. Pour en savoir plus, consultez la section Libellés de ressources.

jsonPayload object (format Struct) Obligatoire Charge utile de l'entrée de journal, exprimée sous la forme d'un objet JSON. L'objet JSON contient les champs suivants :
  • proxyStatus
  • tls
  • backendTargetProjectNumber
  • mtls
  • authzPolicyInfo
chaîne Obligatoire

Le champ proxyStatus contient une chaîne qui spécifie la raison pour laquelle l'équilibreur de charge d'application externe régional a renvoyé le HttpRequest.status.

Le champ n'est pas consigné si la valeur est une chaîne vide. Cela peut se produire si le proxy ou le backend ne renvoie pas d'erreur ou si le code d'erreur n'est pas 0, 4XX ou 5XX.

Le champ proxyStatus se compose de deux parties :

AuthzPolicyInfo Obligatoire Le champ authzPolicyInfo stocke des informations sur le résultat de la stratégie d'autorisation. Ces informations ne sont disponibles que pour les équilibreurs de charge d'application externes régionaux pour lesquels la Règle d'autorisation est activée. Pour en savoir plus, consultez la section Qu'est-ce qui est consigné pour la règle d'autorisation ?.
TlsDetails Facultatif Le champ tls contient TlsDetails qui spécifie les métadonnées TLS pour la connexion entre le client et l'équilibreur de charge d'application externe régional. Ce champ n'est disponible que si le client utilise le chiffrement TLS/SSL.
MtlsDetails Facultatif Le champ mtls contient la valeur MtlsDetails qui spécifie les métadonnées mTLS pour la connexion entre le client et l'équilibreur de charge d'application externe régional. Ce champ n'est disponible que si l'équilibreur de charge utilise le protocole d'authentification TLS mutuelle (mTLS) d'interface.

Format de champ TlsDetails

Champ Format du champ Type de champ : obligatoire ou facultatif Description
protocol chaîne Facultatif Protocole TLS utilisé par les clients pour établir une connexion avec l'équilibreur de charge. Les valeurs possibles sont TLS 1.0, 1.1, 1.2, 1.3, et QUIC. Cette valeur est définie sur NULL si le client n'utilise pas le chiffrement TLS/SSL.
cipher chaîne Facultatif Algorithme de chiffrement TLS que les clients peuvent utiliser pour établir une connexion avec l'équilibreur de charge. Cette valeur est définie sur NULL si le client n'utilise pas HTTP(S) ou s'il n'utilise pas le chiffrement TLS/SSL.

Format de champ MtlsDetails

Champ Format du champ Type de champ : obligatoire ou facultatif Description
clientCertPresent Bool Facultatif

true si le client a fourni un certificat lors du handshake TLS. Sinon, false.

clientCertChainVerified Bool Facultatif

true si la chaîne de certificats client est validée par rapport à une configuration TrustStore configurée ou false.

clientCertError chaîne Facultatif

Chaînes prédéfinies représentant les conditions d'erreur. Pour plus d'informations sur les chaînes d'erreur, consultez la section Modes de validation des clients mTLS.

clientCertSha256Fingerprint chaîne Facultatif

Empreinte SHA-256 du certificat client, encodée en base64.

clientCertSerialNumber chaîne Facultatif

Numéro de série du certificat client. Si le numéro de série est plus de 50 octets, la chaîne client_cert_serial_number_exceeded_size_limit est ajoutée à client_cert_error et le numéro de série est défini sur une chaîne vide.

clientCertValidStartTime chaîne Facultatif

Horodatage (format de chaîne de date RFC 3339) avant lequel le certificat client n'est pas valide. Par exemple, 2022-07-01T18:05:09+00:00.

clientCertValidEndTime chaîne Facultatif

Horodatage (format de chaîne de date RFC 3339) après lequel le certificat client n'est pas valide. Par exemple, 2022-07-01T18:05:09+00:00.

clientCertSpiffeId chaîne Facultatif

L'ID SPIFFE du champ "Autre nom de l'objet (SAN)". Si la valeur n'est pas valide ou dépasse 2 048 octets, l'ID SPIFFE est défini sur une chaîne vide.

Si l'ID SPIFFE dépasse 2 048 octets, la chaîne client_cert_spiffe_id_exceeded_size_limit est ajoutée à client_cert_error.

clientCertUriSans chaîne Facultatif

Liste des extensions SAN de type URI encodées en base64, séparées par une virgule. Les extensions SAN sont extraites du certificat client. L'ID SPIFFE n'est pas inclus dans le champ client_cert_uri_sans.

Si le champ client_cert_uri_sans comporte plus de 512 octets, la chaîne client_cert_uri_sans_exceeded_size_limit est ajoutée à client_cert_error et la liste d'éléments séparés par des virgules est définie sur une chaîne vide.

clientCertDnsnameSans chaîne Facultatif

Liste des extensions SAN de type DNSName encodées en base64, séparées par une virgule. Les extensions SAN sont extraites du certificat client.

Si le champ client_cert_dnsname_sans comporte plus de 512 octets, la chaîne client_cert_dnsname_sans_exceeded_size_limit est ajoutée à client_cert_error et la liste d'éléments séparés par des virgules est définie sur une chaîne vide.

clientCertIssuerDn chaîne Facultatif

Champ Issuer (émetteur) complet, encodé en base64, tiré du certificat.

Si le champ client_cert_issuer_dn dépasse 512 octets, la chaîne client_cert_issuer_dn_exceeded_size_limit est ajoutée à client_cert_error et client_cert_issuer_dn est défini sur une chaîne vide.

clientCertSubjectDn chaîne Facultatif

Champ Subject (objet) complet, encodé en base64, tiré du certificat.

Si le champ client_cert_subject_dn dépasse 512 octets, la chaîne client_cert_subject_dn_exceeded_size_limit est ajoutée à client_cert_error et client_cert_subject_dn est défini sur une chaîne vide.

clientCertLeaf chaîne Facultatif

Certificat d'entité finale du client pour une connexion mTLS établie où le certificat a été validé. L'encodage des certificats est conforme à RFC 9440 : le certificat DER binaire est encodé en base64 (sans sauts de ligne, espaces ni autres caractères en dehors de l'alphabet en base64) et est délimité par des signes deux-points de chaque côté.

Si client_cert_leaf dépasse 16 Ko non encodé, client_cert_validated_leaf_exceeded_size_limit est défini sur client_cert_error et client_cert_leaf est défini sur une chaîne vide.

clientCertChain chaîne Facultatif

Liste de certificats séparés par une virgule (dans l'ordre TLS standard) de la chaîne de certificats client pour une connexion mTLS établie où le certificat client a été validé, sans inclure le certificat d'entité finale. L'encodage du certificat est conforme à la norme RFC 9440.

Si la taille combinée de client_cert_leaf et client_cert_chain avant encodage en base64 dépasse 16 Ko, la chaîne client_cert_validated_chain_exceeded_size_limit est ajoutée à client_cert_error et client_cert_chain est défini sur une chaîne vide.

Étiquettes de ressource

Le tableau suivant liste les libellés de ressources pour resource.type="http_external_regional_lb_rule".

Champ Type Description
backend_name chaîne Nom du groupe d'instances backend ou groupe de points de terminaison du réseau. Toutefois, le libellé est vide pour une connexion TLS échouée.
backend_scope chaîne Champ d'application du backend (nom de la zone ou nom de la région). Peut être UNKNOWN quand backend_name est inconnu.
backend_scope_type chaîne Champ d'application du backend (REGION/ZONE). Peut être UNKNOWN quand backend_name est inconnu.
backend_target_name chaîne Nom du backend sélectionné pour gérer la requête, en fonction de la règle de chemin de mappage d'URL ou de la règle de routage correspondant à la requête.
backend_target_type chaîne Type de la cible de backend. Peut être BACKEND_SERVICE ou UNKNOWN si le backend n'a pas été attribué.
backend_type chaîne Type du groupe de backend. Peut être INSTANCE_GROUP, NETWORK_ENDPOINT_GROUP ou UNKNOWN si le backend n'a pas été attribué.
forwarding_rule_name chaîne Nom de l'objet de règle de transfert.
matched_url_path_rule chaîne Règle de chemin de mappage d'URL ou règle de routage configurée dans le cadre de la clé de mappage d'URL. En cas d'absence de correspondance, ce champ peut prendre la valeur UNMATCHED ou UNKNOWN.
  • UNMATCHED fait référence à une requête qui ne correspond à aucune règle de chemin d'URL, et utilise donc la règle de chemin par défaut.
  • UNKNOWN indique une erreur interne ou une connexion TLS échouée.
network_name chaîne Nom du réseau VPC de l'équilibreur de charge.
project_id chaîne Identifiant du projet Google Cloud associé à cette ressource.
region chaîne Région dans laquelle l'équilibreur de charge est défini.
target_proxy_name chaîne Nom de l'objet de proxy cible référencé par la règle de transfert.
url_map_name chaîne Nom de l'objet de mappage d'URL configuré pour sélectionner un service de backend. Il est vide en cas d'échec de la connexion TLS.

Champ d'erreur proxyStatus

Le champ proxyStatus contient une chaîne qui spécifie la raison pour laquelle l'équilibreur de charge a renvoyé une erreur. Le champ proxyStatus comporte deux parties : proxyStatus error et proxyStatus details. Cette section décrit les chaînes compatibles avec le champ proxyStatus error.

Le champ proxyStatus error est applicable aux équilibreurs de charge suivants :

  • Équilibreur de charge d'application externe régional
  • Équilibreur de charge d'application interne interrégional
  • Équilibreur de charge d'application interne régional
Erreur proxyStatus Description Codes de réponse d'accompagnement courants
destination_unavailable L'équilibreur de charge considère que le backend est indisponible. Par exemple, les tentatives récentes de communication avec le backend ont échoué, ou une vérification de l'état a peut-être entraîné un échec. 500, 503
connection_timeout La tentative d'ouverture d'une connexion au backend par l'équilibreur de charge a expiré. 504
connection_terminated

La connexion de l'équilibreur de charge au backend s'est terminée avant la réception d'une réponse complète.

Ce proxyStatus error est renvoyé dans l'un des cas suivants :

  • La connexion de l'équilibreur de charge au backend s'est terminée avant la réception d'une réponse complète.
  • La connexion TLS a échoué lors du handshake SSL et le client n'a pas établi de connexion avec l'équilibreur de charge.

0, 502, 503
connection_refused La connexion de l'équilibreur de charge au backend est refusée. 502, 503
connection_limit_reached

L'équilibreur de charge est configuré pour limiter le nombre de connexions au backend dont il dispose, et cette limite a été dépassée.

Ce proxyStatus error est renvoyé dans l'un des cas suivants :

  • Si un backend est en mode maintenance, le trafic ne peut pas être acheminé vers le backend.
  • Si la requête est limitée localement
  • Envoy gère les conditions d'erreur telles que la mémoire insuffisante.
502, 503
destination_not_found L'équilibreur de charge ne peut pas déterminer le backend approprié à utiliser pour cette requête. Par exemple, le backend peut ne pas être configuré. 500, 404
dns_error L'équilibreur de charge a rencontré une erreur DNS lors de la tentative de recherche d'une adresse IP pour le nom d'hôte du backend. 502, 503
proxy_configuration_error L'équilibreur de charge a rencontré une erreur de configuration interne. 500
proxy_internal_error L'équilibreur de charge a rencontré une erreur interne. 0, 500, 502
proxy_internal_response L'équilibreur de charge a généré la réponse sans tenter de se connecter au backend. Tout code de réponse en fonction du type de problème. Par exemple, le code de réponse 410 signifie que le backend n'est pas disponible en raison d'un défaut de paiement.
http_response_timeout L'équilibreur de charge a atteint un délai avant expiration configuré pour le service de backend en attendant la réponse complète du backend. 504, 408
http_request_error L'équilibreur de charge a rencontré une erreur HTTP 4xx, ce qui indique des problèmes avec la requête client. 400, 403, 405, 406, 408, 411, 413, 414, 415, 416, 417 ou 429
http_protocol_error L'équilibreur de charge a rencontré une erreur de protocole HTTP lors de la communication avec le backend. 502
tls_protocol_error L'équilibreur de charge a rencontré une erreur TLS lors du handshake TLS. 0
tls_certificate_error L'équilibreur de charge a rencontré une erreur au moment de la vérification du certificat présenté par le serveur ou par le client lorsque mTLS est activé. 0
tls_alert_received L'équilibreur de charge a rencontré une alerte TLS fatale lors du handshake TLS. 0

Champ "proxyStatus details"

Le champ proxyStatus contient une chaîne qui spécifie la raison pour laquelle l'équilibreur de charge a renvoyé une erreur. Le champ proxyStatus comporte deux parties : proxyStatus error et proxyStatus details. Le champ proxyStatus details est facultatif et ne s'affiche que lorsque des informations supplémentaires sont disponibles. Cette section décrit les chaînes compatibles avec le champ proxyStatus details.

Le champ proxyStatus details s'applique aux équilibreurs de charge suivants :

  • Équilibreur de charge d'application externe régional
  • Équilibreur de charge d'application interne régional
  • Équilibreur de charge d'application interne interrégional
Détails du proxyStatus Description Codes de réponse d'accompagnement courants
client_disconnected_before_any_response La connexion au client a été interrompue avant que l'équilibreur de charge n'ait envoyé de réponse. 0
backend_connection_closed Le backend a fermé de manière inattendue sa connexion à l'équilibreur de charge. Cela peut se produire si l'équilibreur de charge envoie du trafic vers une autre entité, par exemple une application tierce dont le délai avant expiration TCP est inférieur à celui de l'équilibreur de charge, qui est de 10 minutes (600 secondes). 502
failed_to_connect_to_backend L'équilibreur de charge n'a pas pu se connecter au backend. Cet échec inclut les délais avant expiration pendant la phase de connexion. 503
failed_to_pick_backend L'équilibreur de charge n'a pas pu sélectionner un backend opérationnel pour traiter la requête. 502
response_sent_by_backend La requête HTTP a bien été envoyée par proxy au backend et la réponse a été renvoyée par le backend. Le code de réponse HTTP est défini par le logiciel exécuté sur le backend.
client_timed_out

La connexion entre l'équilibreur de charge et le client a dépassé le délai d'inactivité.

Pour plus d'informations sur l'équilibreur de charge d'application externe régional, consultez la section Délai d'expiration du message keepalive HTTP client. Pour plus d'informations sur l'équilibreur de charge d'application interne, consultez la page Délai d'expiration du message keepalive HTTP client.
0, 408
backend_timeout

Le backend a expiré lors de la génération d'une réponse.

502
http_protocol_error_from_backend_response La réponse du backend contient une erreur de protocole HTTP. 501, 502
http_protocol_error_from_request La requête du client contient une erreur de protocole HTTP. 400, 503
http_version_not_supported La version du protocole HTTP n'est pas acceptée. Actuellement, seuls les protocoles HTTP 0.9, 1.0, 1.1 et 2.0 sont compatibles. 400
handled_by_identity_aware_proxy Cette réponse a été générée par Identity-Aware Proxy (IAP) lors de la vérification d'identité du client avant d'autoriser l'accès. 200, 302, 400, 401, 403, 500, 502
invalid_request_headers

Les en-têtes de requêtes HTTP reçus d'un client contiennent au moins un caractère non autorisé par une spécification HTTP applicable.

Par exemple, les noms de champ d'en-tête qui incluent des guillemets doubles (") ou des caractères en dehors de la plage ASCII standard (c'est-à-dire tout octet >= 0x80) ne sont pas valides.

Pour en savoir plus, consultez les pages suivantes :

400, 404
ip_detection_failed L'adresse IP d'origine n'a pas pu être détectée. Tout code de réponse possible en fonction de la nature de l'échec. La valeur doit être comprise entre 400 et 599.
request_body_too_large Le corps de la requête HTTP dépasse la longueur maximale acceptée par l'équilibreur de charge. 413, 507
request_header_timeout L'en-tête de requête a expiré, car l'équilibreur de charge n'a pas reçu la requête complète dans les cinq secondes. 408, 504
denied_by_security_policy L'équilibreur de charge a refusé cette requête en raison d'une règle de sécurité Google Cloud Armor. 403
throttled_by_security_policy La requête a été bloquée par une règle de limitation de Google Cloud Armor. 429
client_cert_chain_invalid_eku Le certificat client ou son émetteur ne dispose pas d'usage étendu de clé qui inclut clientAuth. Pour en savoir plus, consultez la section Erreurs consignées pour les connexions fermées. 0
client_cert_chain_max_name_constraints_exceeded Un certificat intermédiaire fourni pour la validation comportait plus de 10 contraintes de nom. Pour en savoir plus, consultez la section Erreurs consignées pour les connexions fermées. 0
client_cert_invalid_rsa_key_size La taille de la clé RSA d'un certificat intermédiaire ou feuille client n'est pas valide. Pour en savoir plus, consultez la section Erreurs consignées pour les connexions fermées. 0
client_cert_not_provided Le client n'a pas fourni le certificat demandé lors du handshake. Pour en savoir plus, consultez la section Erreurs consignées pour les connexions fermées. 0
client_cert_pki_too_large L'infrastructure PKI à utiliser pour la validation dispose de plus de trois certificats intermédiaires qui partagent les mêmes Subject et Subject Public Key Info. Pour en savoir plus, consultez la section Erreurs consignées pour les connexions fermées. 0
client_cert_unsupported_elliptic_curve_key Un client ou un certificat intermédiaire utilise une courbe elliptique non compatible. Pour en savoir plus, consultez la section Erreurs consignées pour les connexions fermées. 0
client_cert_unsupported_key_algorithm Un client ou un certificat intermédiaire utilise un algorithme non RSA ou ECDSA. Pour en savoir plus, consultez la section Erreurs consignées pour les connexions fermées. 0
client_cert_validation_failed La validation du certificat client échoue avec la ressource TrustConfig. Pour en savoir plus, consultez la section Erreurs consignées pour les connexions fermées. 0
client_cert_validation_not_performed Vous avez configuré le protocole TLS mutuel sans configurer de clé TrustConfig. Pour en savoir plus, consultez la section Erreurs consignées pour les connexions fermées. 0
client_cert_validation_search_limit_exceeded La limite de profondeur ou d'itération est atteinte lors de la tentative de validation de la chaîne de certificats. Pour en savoir plus, consultez la section Erreurs consignées pour les connexions fermées. 0
client_cert_validation_timed_out Le délai a été dépassé (200 ms) lors de la validation de la chaîne de certificats. Pour en savoir plus, consultez la section Erreurs consignées pour les connexions fermées. 0
tls_version_not_supported La version du protocole TLS est reconnue, mais n'est pas prise en charge. L'erreur entraîne une connexion TLS fermée. 0
unknown_psk_identity Les serveurs envoient cette erreur lorsque l'établissement de clés PSK est requis, mais que le client ne fournit pas d'identité PSK acceptable. Cette erreur entraîne une connexion TLS fermée. 0
no_application_protocol Envoyés par les serveurs lorsqu'une extension client "application_layer_protocol_negociation" n'annonce que des protocoles non compatibles avec le serveur. Consultez la section Extension de négociation de protocole de couche application TLS. Cette erreur entraîne une connexion TLS fermée. 0
no_certificate Aucun certificat n'a été trouvé. Cette erreur entraîne une connexion TLS fermée. 0
bad_certificate Un certificat n'est pas valide ou contient des signatures qui n'ont pas pu être validées. Cette erreur entraîne une connexion TLS fermée. 0
unsupported_certificate Le type d'un certificat n'est pas compatible. L'erreur entraîne une connexion TLS fermée. 0
certificate_revoked Un certificat a été révoqué par son signataire. L'erreur entraîne une connexion TLS fermée. 0
certificate_expired Un certificat a expiré ou n'est pas valide. L'erreur entraîne une connexion TLS fermée. 0
certificate_unknown Des problèmes non spécifiés sont survenus lors du traitement du certificat, ce qui le rend inacceptable. Cette erreur entraîne une connexion TLS fermée. 0
unknown_ca Une chaîne de certificats valide ou une chaîne partielle a été reçue, mais le certificat n'a pas été accepté, car il n'a pas pu être localisé ni mis en correspondance avec une ancre de confiance connue. L'erreur entraîne une connexion TLS fermée. 0
unexpected_message Un message inapproprié, tel qu'un message de handshake incorrect ou de données d'application prématurées a été reçu. Cette erreur entraîne une connexion TLS fermée. 0
bad_record_mac La protection d'un enregistrement reçu ne peut pas être annulée. L'erreur entraîne une connexion TLS fermée. 0
record_overflow Un enregistrement TLSCiphertext a été reçu d'une longueur supérieure à 214+256 octets ou un enregistrement a été déchiffré comme enregistrement TLSPlaintext avec plus de 214 octets (ou une autre limite négociée). L'erreur entraîne une connexion TLS fermée. 0
handshake_failure Impossible de négocier un ensemble acceptable de paramètres de sécurité compte tenu des options disponibles. Cette erreur entraîne une connexion TLS fermée. 0
illegal_parameter Un champ du handshake était incorrect ou incohérent avec les autres champs. Cette erreur entraîne une connexion TLS fermée. 0
access_denied Un certificat ou une clé PSK valide a été reçu, mais le client n'a pas commencé la négociation lorsque le contrôle des accès a été appliqué. Cette erreur entraîne une connexion TLS fermée. 0
decode_error Un message n'a pas pu être décodé, car certains champs étaient en dehors de la plage spécifiée ou la longueur du message était incorrecte. Cette erreur entraîne une connexion TLS fermée. 0
decrypt_error Échec d'une opération cryptographique de handshake (et non de la couche d'enregistrement), y compris l'impossibilité de valider correctement une signature ou de valider un message terminé ou un liant PSK. Cette erreur entraîne une connexion TLS fermée. 0
insufficient_security Une négociation a échoué spécifiquement car le serveur requiert des paramètres plus sécurisés que ceux acceptés par le client. Cette erreur entraîne une connexion TLS fermée. 0
inappropriate_fallback Envoyée par un serveur en réponse à une tentative de nouvelle connexion non valide d'un client. Cette erreur entraîne une connexion TLS fermée. 0
user_cancelled L'utilisateur annule le handshake pour une raison sans rapport avec un échec de protocole. Cette erreur entraîne une connexion TLS fermée. 0
missing_extension Envoyés par les points de terminaison qui reçoivent un message de handshake ne contenant pas d'extension obligatoire à envoyer pour la version TLS proposée ou d'autres paramètres négociés. Cette erreur entraîne une connexion TLS fermée. 0
unsupported_extension Envoyés par les points de terminaison qui reçoivent un message de handshake contenant une extension dont l'inclusion dans le message de handshake donné est interdite, ou contenant des extensions dans ServerHello ou Certificate, et qui n'a pas été proposé dans l'élément ClientHello ou CertificateRequest correspondant. Cette erreur entraîne une connexion TLS fermée. 0
unrecognized_name Envoyés par les serveurs lorsqu'aucun serveur ne peut être identifié par le nom fourni par le client via l'extension "server_name". Consultez les définitions des extensions TLS. 0
bad_certificate_status_response Envoyée par les clients lorsqu'une réponse OCSP non valide ou non acceptable est fournie par le serveur via l'extension "status_request". Consultez les définitions des extensions TLS. Cette erreur entraîne une connexion TLS fermée. 0
load_balancer_configured_resource_limits_reached L'équilibreur de charge a atteint les limites de ressources configurées, telles que le nombre maximal de connexions. 400, 500, 503

Entrées de journal de connexion TLS ayant échoué

Lorsque la connexion TLS entre le client et l'équilibreur de charge échoue avant qu'un backend ne soit sélectionné, les entrées de journal enregistrent les erreurs. Vous pouvez configurer les services de backend avec différents taux d'échantillonnage des journaux. Lorsqu'une connexion TLS échoue, le taux d'échantillonnage du journal de la connexion TLS est le plus élevé pour tous les service de backend. Par exemple, si vous avez configuré deux services de backend avec un taux d'échantillonnage de journalisation de 0.3 et 0.5, le taux d'échantillonnage du journal de connexion TLS ayant échoué est 0.5.

Vous pouvez identifier les échecs de connexions TLS en vérifiant les détails d'entrée de journal suivants:

  • Le type d'erreur proxyStatus est tls_alert_received, tls_certificate_error, tls_protocol_error ou connection_terminated.
  • Aucune information de backend n'est disponible.

L'exemple suivant montre une entrée de journal TLS ayant échoué avec le champ proxyStatus error:

   json_payload:    {
   @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
   proxyStatus: "error="tls_alert_received"; details="server_to_client: handshake_failure""
   log_name: "projects/529254013417/logs/mockservice.googleapis.com%20name"
   }
   http_request {
    latency {
      nanos: 12412000
    }
    protocol: "HTTP/1.0"
    remote_ip: "127.0.0.2"
   }
  resource {
    type: "mock_internal_http_lb_rule"
    labels {
      backend_name: ""
      backend_scope: ""
      backend_scope_type: "UNKNOWN"
      backend_target_name: ""
      backend_target_type: "UNKNOWN"
      backend_type: "UNKNOWN"
      forwarding_rule_name: "l7-ilb-https-forwarding-rule-dev"
      matched_url_path_rule: "UNKNOWN"
      network_name: "lb-network"
      region: "REGION"
      target_proxy_name: "l7-ilb-https-proxy-dev"
      url_map_name: ""
    }
  }
  timestamp: "2023-08-15T16:49:30.850785Z"
  

Journaux des requêtes de règles d'autorisation

L'objet authz_info de la charge utile JSON de l'entrée de journal de l'équilibreur de charge contient des informations sur les règles d'autorisation. Vous pouvez configurer des métriques basées sur les journaux pour le trafic autorisé ou refusé par ces règles. Consultez plus d'informations sur le journal des règles d'autorisation.

Champ Type Description
authz_info.policies[] objet Liste des règles correspondant à la requête.
authz_info.policies[].name chaîne Nom de la règle d'autorisation correspondant à la requête.
Le nom est vide pour les raisons suivantes :
  • Aucune règle ALLOW ne correspond à la requête, et celle-ci est refusée.
  • Aucune règle DENY ne correspond à la requête, et celle-ci est autorisée.
authz_info.policies[].result énum Le résultat peut être ALLOWED ou DENIED.
authz_info.policies[].details chaîne Ces détails incluent les suivants :
  • allowed_as_no_deny_policies_matched_request
  • denied_as_no_allow_policies_matched_request
  • denied_by_authz_extension
  • denied_by_cloud_iap
authz_info.overall_result énum Le résultat peut être ALLOWED ou DENIED.

Interagir avec les journaux

Vous pouvez interagir avec les journaux de l'équilibreur de charge d'application externe à l'aide de l'API Cloud Logging. L'API Logging permet de filtrer de manière interactive les journaux pour lesquels des champs spécifiques sont définis. Il exporte les journaux correspondants vers Cloud Logging, Cloud Storage, BigQuery ou Pub/Sub. Pour en savoir plus sur l'API Logging, consultez la page Présentation de l'API Cloud Logging.

Surveillance

L'équilibreur de charge exporte les données de surveillance vers Cloud Monitoring.

Vous pouvez utiliser des métriques de surveillance pour effectuer les opérations suivantes :

  • Évaluer la configuration, l'utilisation et les performances d'un équilibreur de charge
  • Dépannage
  • Améliorer l'utilisation des ressources et l'expérience utilisateur

En plus des tableaux de bord prédéfinis dans Cloud Monitoring, vous pouvez créer des tableaux de bord personnalisés, configurer des alertes et interroger les métriques via l'API Cloud Monitoring.

Définir des règles d'alerte

Vous pouvez créer des règles d'alerte pour surveiller les valeurs des métriques et être informé lorsqu'elles ne respectent pas une condition.

  1. Dans la console Google Cloud, accédez à la page Alertes :

    Accéder à l'interface des alertes

    Si vous utilisez la barre de recherche pour trouver cette page, sélectionnez le résultat dont le sous-titre est Monitoring.

  2. Si vous n'avez pas créé vos canaux de notification et que vous souhaitez être averti, cliquez sur Modifier les canaux de notification et ajoutez vos canaux de notification. Revenez à la page Alertes après avoir ajouté vos canaux.
  3. Sur la page Alertes, cliquez sur Créer une règle.
  4. Pour sélectionner la métrique, développez le menu Sélectionner une métrique, puis procédez comme suit :
    1. Pour limiter le menu aux entrées pertinentes, saisissez Regional External Application Load Balancer Rule dans la barre de filtre. Si aucun résultat ne s'affiche après avoir filtré le menu, désactivez l'option Afficher seulement les ressources et les métriques actives.
    2. Pour le champ Type de ressource, sélectionnez Règle d'équilibreur de charge d'application externe régional.
    3. Sélectionnez une Catégorie de métrique et une Métrique, puis cliquez sur Appliquer.
  5. Cliquez sur Suivant.
  6. Les paramètres de la page Configurer le déclencheur d'alerte déterminent le moment où l'alerte se déclenche. Sélectionnez un type de condition et, si nécessaire, spécifiez un seuil. Pour plus d'informations, consultez la page Créer des règles d'alerte basées sur un seuil de métrique.
  7. Cliquez sur Suivant.
  8. Facultatif : Pour ajouter des notifications à votre règle d'alerte, cliquez sur Canaux de notification. Dans la boîte de dialogue, sélectionnez un ou plusieurs canaux de notification dans le menu, puis cliquez sur OK.
  9. (Facultatif) Mettez à jour la durée de fermeture automatique de l'incident. Ce champ détermine à quel moment Monitoring ferme les incidents en l'absence de données de métriques.
  10. Facultatif : Cliquez sur Documentation, puis ajoutez les informations à inclure dans le message de notification.
  11. Cliquez sur Nom de l'alerte et saisissez un nom pour la règle d'alerte.
  12. Cliquez sur Créer une stratégie.
Pour en savoir plus, consultez la page Règles d'alerte.

Définir des tableaux de bord personnalisés Cloud Monitoring

Vous pouvez créer des tableaux de bord Cloud Monitoring personnalisés pour les métriques de l'équilibreur de charge :

  1. Dans la console Google Cloud, accédez à la page Monitoring.

    Accéder à Monitoring

  2. Sélectionnez Tableaux de bord > Créer un tableau de bord.

  3. Cliquez sur Ajouter un graphique, puis attribuez-lui un titre.

  4. Pour identifier la série temporelle à afficher, choisissez un type de ressource et un type de métrique :

    1. Dans la section Ressource et métrique, cliquez sur le graphique, puis sélectionnez l'une des options disponibles dans la section Sélectionner une métrique :
    2. Pour un équilibreur de charge d'application externe régional, sélectionnez le type de ressource Règle d'équilibreur de charge d'application externe régional.
    3. Cliquez sur Appliquer.
  5. Pour spécifier des filtres de surveillance, cliquez sur Filtres > Ajouter un filtre.

  6. Cliquez sur Enregistrer.

Fréquence et conservation des rapports sur les métriques

Les métriques des équilibreurs de charge d'application externes sont exportées vers Cloud Monitoring par lots de précision d'une minute. Les données de surveillance sont conservées pendant six semaines.

Le tableau de bord fournit une analyse des données à des intervalles par défaut d'une heure, de six heures, d'un jour, d'une semaine et de six semaines. Vous pouvez demander manuellement une analyse à un intervalle compris entre une minute et six semaines.

Métriques de surveillance

Vous pouvez surveiller les métriques suivantes pour les équilibreurs de charge d'application externes.

Les métriques suivantes pour les équilibreurs de charge d'application externes régionaux sont consignées dans Cloud Monitoring. Ces métriques sont précédées du préfixe loadbalancing.googleapis.com/.

Métrique Nom Description
Nombre de requêtes https/external/regional/request_count Nombre de requêtes diffusées par l'équilibreur de charge d'application externe régional.
Nombre d'octets de requête https/external/regional/request_bytes Nombre d'octets envoyés en tant que requêtes par les clients à l'équilibreur de charge d'application externe régional.
Nombre d'octets de réponse https/external/regional/response_bytes Nombre d'octets envoyés en tant que réponses au client depuis l'équilibreur de charge d'application externe régional.
Total des latences https/external/regional/total_latencies Distribution de la latence, en millisecondes. La latence est mesurée entre le moment où le proxy reçoit le premier octet de la requête et le moment où le proxy envoie le dernier octet de la réponse.
Latences de backend https/external/regional/backend_latencies Distribution de la latence, en millisecondes. La latence est mesurée entre le moment où le proxy envoie le premier octet de la requête au backend et le moment où le proxy reçoit le dernier octet de la réponse du backend.

Filtrer les dimensions pour les métriques

Vous pouvez appliquer des filtres de métriques pour les équilibreurs de charge d'application externes.

Les métriques sont agrégées pour chaque équilibreur de charge d'application externe régional. Vous pouvez filtrer les métriques agrégées à l'aide des dimensions suivantes pour resource.type="http_external_regional_lb_rule".

Propriété Description
backend_name Nom du groupe d'instances backend ou groupe de points de terminaison du réseau.
backend_scope Champ d'application du backend (nom de la zone ou nom de la région). Peut être UNKNOWN quand backend_name est inconnu.
backend_scope_type Champ d'application du backend (REGION/ZONE). Peut être UNKNOWN quand backend_name est inconnu.
backend_target_name Nom du backend sélectionné pour gérer la requête, en fonction de la règle de chemin de mappage d'URL ou de la règle de routage correspondant à la requête.
backend_target_type Type de la cible de backend. Peut être BACKEND_SERVICE ou UNKNOWN si le backend n'a pas été attribué.
backend_type Type du groupe de backend. Peut être INSTANCE_GROUP, NETWORK_ENDPOINT_GROUP ou UNKNOWN si le backend n'a pas été attribué.
forwarding_rule_name Nom de l'objet de règle de transfert.
matched_url_path_rule Règle de chemin de mappage d'URL ou règle de routage configurée dans le cadre de la clé de mappage d'URL. En cas d'absence de correspondance, ce champ peut prendre la valeur UNMATCHED ou UNKNOWN.
  • UNMATCHED fait référence à une requête qui ne correspond à aucune règle de chemin d'URL, et utilise donc la règle de chemin par défaut.
  • UNKNOWN indique une erreur interne.
network_name Nom du réseau VPC de l'équilibreur de charge.
project_id Identifiant du projet Google Cloud associé à cette ressource.
region Région dans laquelle l'équilibreur de charge est défini.
target_proxy_name Nom de l'objet de proxy cible référencé par la règle de transfert.
url_map_name Nom de l'objet de mappage d'URL configuré pour sélectionner un service de backend.

Étapes suivantes