Política MessageLogging

Esta página se aplica a Apigee y Apigee Hybrid.

Consulta la documentación de Apigee Edge.

ícono de política

Qué

La política MessageLogging te permite registrar mensajes personalizados en Cloud Logging o syslog. Puedes usar la información en los registros para varias tareas, como el seguimiento de problemas en el entorno de ejecución de la API.

Esta política es una política extensible, y el uso de esta política puede tener implicaciones de costo o uso, según tu licencia de Apigee. Para obtener información sobre los tipos de políticas y sus implicaciones de uso, consulta Tipos de políticas.

Existen dos maneras de usar la política MessageLogging:

  • Con el elemento <CloudLogging>, se registran los mensajes en Cloud Logging. Para usar este método, debes habilitar las API de Cloud Logging en tu proyecto de Google Cloud. A fin de obtener más información sobre cómo habilitar las API para un proyecto de Google Cloud, consulta Habilita o inhabilita servicios.
  • El elemento <Syslog> registra los mensajes en syslog, un protocolo estándar para enviar registros del sistema o mensajes de eventos a un servidor específico. Para usar este método, debes tener un Servidor Syslog disponible. Si no lo haces, puedes usar los servicios de administración de registros públicos, como Splunk, Sumo Logic y Loggly. Consulta Configura servicios de administración de registros de terceros.

Nota: No puedes usar el elemento <CloudLogging> ni el elemento <Syslog> en la misma política.

Elemento <MessageLogging>

Define una política <MessageLogging>.

Valor predeterminado Consulta la pestaña Política predeterminada, a continuación
¿Es obligatorio? Obligatorio
Tipo TIPO
Elemento principal n/a
Elementos secundarios <CloudLogging>
<Syslog>
<logLevel>

El elemento <MessageLogging> usa la siguiente sintaxis:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<MessageLogging continueOnError="false" enabled="true" name="Message-Logging-1">
    <DisplayName>Message Logging-1</DisplayName>
    <Syslog>
<!-- Note: You cannot use both the <Syslog> element and the <CloudLogging> element in the same policy. -->
        <Message>Some message for syslog</Message>
        <Host>localhost</Host>
        <Port>514</Port>
    </Syslog>
    <CloudLogging>
<!-- Note: You cannot use both the <CloudLogging> and the <Syslog> element in the same policy. -->
        <LogName>projects/{organization.name}/logs/{log.id}</LogName>
        <Message contentType="application/json">{"{message.queryparam.key}": "{message.queryparam.value}"}</Message>
        <Labels>
            <Label>
                <Key>key1</Key>
                <Value>value1</Value>
            </Label>
            <Label>
                <Key>key2</Key>
                <Value>value2</Value>
            </Label>
        </Labels>
        <ResourceType>gce_instance</ResourceType>
    </CloudLogging>
    <logLevel>ALERT</logLevel>
</MessageLogging>

Este elemento tiene los siguientes atributos que son comunes a todas las políticas:

Atributo Predeterminada (obligatorio) Descripción
name N/A Obligatorio

El nombre interno de la política. El valor del atributo name puede contener letras, números, espacios, guiones, guiones bajos y puntos. Este valor no puede superar los 255 caracteres.

De forma opcional, usa el elemento <DisplayName> para etiquetar la política en el editor de proxy de la IU de administración con un nombre de lenguaje natural diferente.

continueOnError falso Opcional Configúralo como false para mostrar un error cuando una política falla. Este es el comportamiento previsto para la mayoría de las políticas. Configúralo como true para continuar con la ejecución del flujo incluso después de que una política falle. También consulta:
enabled true Opcional Configúralo como true para aplicar la política. Configúralo como false para desactivar la política. La política no se aplicará, incluso si permanece conectada a un flujo.
async   falso Obsoleta Este atributo dejó de estar disponible.

En la siguiente tabla, se proporciona una descripción de alto nivel de los elementos secundarios de <MessageLogging>:

Nombre del campo Descripción del campo
CloudLogging

Configura los mensajes que se registrarán en Cloud Logging.

Syslog

Configura los mensajes que se van a registrar en syslog.

Ejemplos

CloudLogging

<MessageLogging name="LogToCloudLogging">
    <CloudLogging>
        <LogName>projects/{organization.name}/logs/{log.id}</LogName>
        <Message contentType="application/json">{"{message.queryparam.key}": "{message.queryparam.value}"}</Message>
        <Labels>
            <Label>
                <Key>key1</Key>
                <Value>value1</Value>
            </Label>
            <Label>
                <Key>key2</Key>
                <Value>value2</Value>
            </Label>
        </Labels>
        <ResourceType>gce_instance</ResourceType>
    </CloudLogging>
</MessageLogging>

En este ejemplo, se ilustra el uso de las plantillas de mensajes. Dado que el elemento Message contiene las variables de flujo

{"{message.queryparam.key}": "{message.queryparam.value}"}

cuando alguien llama al proxy con los valores message.queryparam.key = "fruit" y message.queryparam.value = "apple", la entrada de registro resultante sería {"fruit": "apple"}.

Syslog

<MessageLogging name="LogToSyslog">
  <Syslog>
    <Message>[3f509b58 tag="{organization.name}.{apiproxy.name}.{environment.name}"] Weather request for WOEID {request.queryparam.w}.</Message>
    <Host>logs-01.loggly.com</Host>
    <Port>514</Port>
    <Protocol>TCP</Protocol>
    <FormatMessage>true</FormatMessage>
    <DateFormat>yyMMdd-HH:mm:ss.SSS</DateFormat>
  </Syslog>
  <logLevel>ALERT</logLevel>
</MessageLogging>

En este ejemplo, supongamos que necesitas registrar la información sobre cada mensaje de solicitud que recibe tu API de las aplicaciones para consumidores. El valor 3f509b58 representa un par clave-valor específico para el servicio de Loggly. Si tienes una cuenta de Loggly, sustituye la clave. El mensaje de registro que se genera se propaga con cuatro valores: la organización, el proxy de API y el nombre del entorno asociado con la transacción, junto con el valor de un parámetro de consulta en el mensaje de solicitud. El formato de las marcas de tiempo será similar a 230704-13:42:17.376, según el formato especificado en el elemento DateFormat.

Syslog por TLS/SSL

<MessageLogging name="LogToSyslog">
  <Syslog>
    <Message>[3f509b58 tag="{organization.name}.{apiproxy.name}.{environment.name}"] Weather request for WOEID {request.queryparam.w}.</Message>
    <Host>logs-01.loggly.com</Host>
    <Port>6514</Port>
    <Protocol>TCP</Protocol>
    <FormatMessage>true</FormatMessage>
    <SSLInfo>
        <Enabled>true</Enabled>
    </SSLInfo>
  </Syslog>
  <logLevel>WARN</logLevel>
</MessageLogging>

Agrega el bloque <SSLInfo> para enviar mensajes a proveedores de registro de mensajes de terceros a través de TLS/SSL.

Referencia del elemento secundario

En las siguientes secciones, se describen los elementos secundarios de <MessageLogging>.

<CloudLogging>

Usa el elemento <CloudLogging> para registrar los mensajes en Cloud Logging.

Nombre del campo ¿Es obligatorio? Descripción
LogName Nombre del registro. El nombre del registro debe estar en formato projects/{PROJECT_ID}/logs/{LOG_ID}. Puedes usar variables en lugar de {PROJECT_ID} y {LOG_ID}.
Message

El mensaje que se registrará. El mensaje tiene un atributo contentType, cuyo valor puede ser text/plain o application/json para los mensajes de texto y JSON, respectivamente. Consulta las muestras.

Label No La etiqueta que se adjuntará al mensaje de registro, si corresponde. Tendrán el formato de un par clave-valor como el siguiente:

<Label>
    <Key>key1</Key>
    <Value>value1</Value>
</Label>
ResourceType No (el valor predeterminado es global) Representa el recurso supervisado que genera los registros.

Autenticación para Cloud Logging

Para usar el elemento <CloudLogging>, debes implementar el proxy de API a fin de usar la autenticación de Google. Apigee usará las credenciales correspondientes a la identidad de la cuenta de servicio que especifiques en las solicitudes salientes a Cloud Logging. Para obtener más información, consulta Usa la autenticación de Google. La cuenta de servicio que conectes a tu proxy de API en el momento de la implementación debe tener un rol con el permiso logging.logEntries.create. Para obtener más información sobre los roles de Identity and Access Management (IAM) para <CloudLogging>, consulta Guía de control de acceso.

<Syslog>

Usa el elemento <Syslog> a fin de configurar los mensajes que se van a registrar en syslog. Cuando usas <Syslog>, un proxy de API reenvía los mensajes de registro de Apigee a un Servidor Syslog remoto. Para usar este método, debes tener un Servidor Syslog disponible. Si no lo haces, están disponibles los servicios de administración de registros públicos, como Splunk, Sumo Logic y Loggly. Consulta Configura servicios de administración de registros de terceros.

Nombre del campo ¿Es obligatorio? Descripción del campo
Message

El mensaje que se registrará. El mensaje tiene un atributo contentType, cuyo valor puede ser text/plain o application/json para los mensajes de texto y JSON, respectivamente. Consulta las muestras.

Host No El nombre de host o la dirección IP del servidor donde se debe enviar syslog. Si no incluyes este elemento, el valor predeterminado será localhost.
Port No Puerto donde se ejecuta syslog. Si no incluyes este elemento, el valor predeterminado será 514.
Protocol No TCP o UDP (predeterminado). Si bien UDP es más eficaz, el protocolo TCP garantiza la entrega del registro de mensajes al Servidor Syslog. Para enviar mensajes de syslog a través de TLS y SSL, solo se admite TCP.
FormatMessage No, pero se requiere <FormatMessage>true</FormatMessage> para usar con Loggly.

true o false (predeterminado)

Este elemento te permite controlar el formato del contenido generado por Apigee precedido por el mensaje. Si se configura como verdadero, el mensaje syslog recibe una cantidad fija de caracteres, lo que te permite filtrar esa información de los mensajes. Este es un ejemplo para el formato fijo:

<14>1 2023-03-20T09:24:39.039+0000 e49cd3a9-4cf6-48a7-abb9-7ftfe4d97d00 Apigee - - - Message starts here

La información generada por Apigee incluye lo siguiente:

  • <14>: Una puntuación de prioridad (consulta el Protocolo Syslog) según el nivel de registro y el nivel de instalación del mensaje.
  • 1. La versión de syslog actual.
  • Fecha con un desplazamiento UTC (UTC = +0000).
  • UUID del procesador de mensajes.
  • "Apigee - - - "

Si se configura como falso (predeterminado), al mensaje no se le agregan los caracteres fijos.

PayloadOnly No

true o false (predeterminado)

Este elemento establece el formato de los mensajes generados por Apigee para que contengan solo el cuerpo del mensaje syslog, sin los caracteres que preceden y se especifican por FormatMessage.

Si no incluyes este elemento o dejas el campo vacío, el valor predeterminado será false.

Consulta FormatMessage.

DateFormat No

Una string de plantilla de formato para usar en el formato de la marca de tiempo de cada mensaje de registro. De forma predeterminada, Apigee usa yyyy-MM-dd'T'HH:mm:ss.SSSZ. El comportamiento de esta plantilla se describe en la documentación de la clase SimpleDateFormat de Java. Según esa definición, yyyy en la string de formato se reemplazará por un año de 4 dígitos, MM se reemplazará por un número de mes de 2 dígitos, y así sucesivamente.

SSLInfo No

Te permite registrar mensajes a través de SSL/TLS. Se usa con el subelemento <Enabled>true</Enabled>.

Si no incluyes este elemento o dejas el campo vacío, el valor predeterminado será falso (sin TLS/SSL).


<SSLInfo>
    <Enabled>true</Enabled>
</SSLInfo>

Puedes configurar la etiqueta <SSLInfo> de la misma forma de un TargetEndpoint, además de habilitar TLS/SSL de forma bidireccional, como se describe en Referencia de configuración de proxy de API. Solo se admite el protocolo TCP.


<logLevel>

Los valores válidos para el elemento <logLevel> son: INFO (predeterminado), ALERT, WARN y ERROR.

Establece un nivel específico de información para incluir en el registro de mensajes.

Si usas el elemento <logLevel> (si lo estableces en verdadero), la configuración afectará la puntuación de prioridad calculada (el número dentro de los corchetes angulares) en la información generada por Apigee que se agrega al mensaje.

Notas de uso

Cuando adjuntas una política de MessageLogging a un flujo de proxy de API, considera colocarla en la respuesta ProxyEndpoint, en un flujo especial llamado PostClientFlow. El PostClientFlow se ejecuta después de que la respuesta se envía al cliente solicitante, lo que garantiza que todas las métricas estén disponibles para su registro. Para obtener detalles sobre el uso de PostClientFlow, consulta la Referencia de configuración del proxy de API.

El PostClientFlow es especial de las siguientes dos maneras:

  1. Solo se ejecuta como parte del flujo de respuesta.
  2. Es el único flujo que se ejecuta después de que el proxy entra en el estado de error.

Debido a que se ejecuta sin importar si el proxy se realizó de forma correcta o no, puedes colocar las políticas MessageLogging en PostClientFlow y estar seguro de que siempre se ejecutarán.

La siguiente imagen de depuración muestra una política MessageLogging que se ejecuta como parte del PostClientFlow, después de que se ejecuta DefaultFaultRule:

En este ejemplo, la política de verificación de la clave de API causó la falla debido a una clave no válida.

A continuación, se muestra la definición de ProxyEndpoint que incluye PostPostFlow:

<ProxyEndpoint name="default">
  ...
  <PostClientFlow>
    <Response>
      <Step>
        <Name>Message-Logging-1</Name>
      </Step>
    </Response>
  </PostClientFlow>
  ...
</ProxyEndpoint>

Apigee registra mensajes como texto simple y puedes configurar el registro para incluir variables, como la fecha y la hora en que se recibió la solicitud o respuesta, la identidad del usuario en la solicitud, la dirección IP de origen desde la cual la solicitud fue enviada, y así sucesivamente.

Apigee registra los mensajes de forma asíncrona: la respuesta se muestra mientras se escriben. Como resultado, no se introduce latencia en tu API mediante el bloqueo de textos destacados. Puede haber ocasiones en que los registros no se escriban sin que se muestre un error, pero estos eventos son poco frecuentes.

La política MessageLogging escribe en un búfer los mensajes registrados en la memoria. El registrador de mensajes lee los mensajes del búfer y, luego, escribe en el destino que configuras. Cada destino tiene su propio búfer.

Si la tasa de escritura en el búfer aumenta más allá de la tasa de lectura, el búfer se sobre carga y el registro fallará. Si esto sucede, es posible que encuentres uno de los siguientes mensajes en el archivo de registro:

  • Usa <CloudLoggingg> de la siguiente manera:
    steps.messagelogging.TooManyPendingLoggingRequest
  • Usa <Syslog> de la siguiente manera:
    Log message size exceeded. Increase the max message size setting

Aumenta la propiedad max.log.message.size.in.kb (valor predeterminado = 128 KB) en el archivo message-logging.properties.

Valores predeterminados para las variables en las plantillas de mensajes

Se pueden especificar valores predeterminados para cada variable en la plantilla de mensajes por separado. Por ejemplo, si la variable request.header.id no se puede resolver, entonces su valor se reemplaza por el valor unknown.

<Message>This is a test message. id = {request.header.id:unknown}</Message>

Se puede especificar un valor predeterminado común para todas las variables sin resolver mediante la configuración del atributo defaultVariableValue en el elemento Message:

<Message defaultVariableValue="unknown">This is a test message. id = {request.header.id}</Message>

Configura servicios de administración de registros de terceros

La política MessageLogging te permite enviar mensajes syslog a servicios de administración de registros de terceros, como Splunk, Sumo Logic y Loggly. Si deseas enviar syslog a uno de esos servicios, consulta la documentación de ese servicio para configurar el host, el puerto y el protocolo del servicio y, luego, establece el elemento Syslog en esta política según corresponda.

Consulta la siguiente documentación para la configuración de administración de registros de terceros:

  • Splunk (selecciona la versión del producto)
    Consulta también esta publicación de comunidad de Apigee: Registra mensajes en Splunk
  • Sumo Logic
  • Loggly
    Cuando se usa Loggly, <FormatMessage>true</FormatMessage> es obligatorio en la política como un elemento secundario del elemento <Syslog>.
    Consulta esta publicación de la comunidad de Apigee para obtener más información sobre el registro de mensajes en Loggly: Registrar mensajes en Loggly

Referencia de errores

This section describes the fault codes and error messages that are returned and fault variables that are set by Apigee when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause
steps.messagelogging.StepDefinitionExecutionFailed 500 See fault string.
steps.messagelogging.InvalidGoogleCloudLogName 500 This error is thrown when the LogName does not evaluate to the valid format of projects/{project}/logs/{logid}.
steps.messagelogging.InvalidJsonMessage 500 This error is thrown when the contentType attributes value has been chosen as application/json but the actual message value is not a valid JSON string,
steps.messagelogging.TooManyPendingLoggingRequest 500 This error is thrown when there are more than 2500 pending requests that are yet to be written to Cloud Logging. The 2500 limit is for each Apigee runtime pod. For example, if the traffic is distributed over two instances of Apigee runtime pods, the effective limit is 5000 requests.
-

Deployment errors

These errors can occur when you deploy a proxy containing this policy.

Error name Cause Fix
InvalidProtocol The deployment of the MessageLogging policy can fail with this error if the protocol specified within the <Protocol> element is not valid. The valid protocols are TCP and UDP. For sending syslog messages over TLS/SSL, only TCP is supported.
InvalidPort The deployment of the MessageLogging policy can fail with this error if the port number is not specified within the <Port> element or if it is not valid. The port number must be an integer greater than zero.

Fault variables

These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name Matches "StepDefinitionExecutionFailed"
messagelogging.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. messagelogging.ML-LogMessages.failed = true

Example error response

{  
   "fault":{
      "detail":{
         "errorcode":"steps.messagelogging.StepDefinitionExecutionFailed"
      },
      "faultstring":"Execution failed"
   }
}

Example fault rule

<FaultRule name="MessageLogging">
    <Step>
        <Name>ML-LogMessages</Name>
        <Condition>(fault.name Matches "StepDefinitionExecutionFailed") </Condition>
    </Step>
    <Condition>(messagelogging.ML-LogMessages.failed = true) </Condition>
</FaultRule>


Variables de flujo

Las siguientes variables se propagan sobre fallas de política.

  • messagelogging.failed
  • messagelogging.{stepdefinition-name}.failed

Temas relacionados