Политика ведения журнала сообщений

Вы просматриваете документацию Apigee Edge .
Перейти к документации Apigee X.
info

Что

Один из лучших способов отслеживания проблем в среде выполнения API — ведение журнала сообщений. Вы можете подключить и настроить политику MessageLogging в своем API для записи пользовательских сообщений на локальный диск (только Edge для частного облака) или в системный журнал.

Образцы

Системный журнал

<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>yyyy-MM-dd'T'HH:mm:ss.SSSZ</DateFormat>
  </Syslog>
  <logLevel>ALERT</logLevel>
</MessageLogging>

Тип политики MessageLogging обычно используется для ведения журнала в учётной записи syslog. При настройке для syslog прокси-сервер API будет пересылать сообщения журнала из Apigee Edge на удалённый сервер syslog. Необходимо наличие сервера syslog. В противном случае доступны общедоступные службы управления журналами, такие как Splunk, Sumo Logic и Loggly. См. раздел «Настройка сторонних служб управления журналами» .

Например, представьте, что вам нужно регистрировать информацию о каждом запросе, который ваш API получает от потребительских приложений. Значение 3f509b58 представляет собой ключевое значение, специфичное для сервиса Loggly. Если у вас есть учётная запись Loggly, подставьте свой ключ Loggly. Сгенерированное сообщение журнала будет содержать четыре значения: название организации, прокси-сервера API и имя среды, связанные с транзакцией, а также значение параметра запроса в сообщении запроса.

Если у вас развернуто Edge for Private Cloud, вы также можете записывать сообщения журнала в файл.

Системный журнал через 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>
    <DateFormat>yyMMdd-HH:mm:ss.SSS</DateFormat>
  </Syslog>
  <logLevel>WARN</logLevel>
</MessageLogging>

Вы можете отправлять сообщения сторонним поставщикам регистрации сообщений по протоколу TLS/SSL, добавив блок <SSLInfo> .

Ротация файлов: размер

<MessageLogging name="LogPolicy">
  <File>
    <Message>This is a test message. Message id : {request.header.messageid}</Message>
      <FileName>test.log</FileName>
      <FileRotationOptions rotateFileOnStartup="true">
        <FileRotationType>SIZE</FileRotationType>
        <MaxFileSizeInMB>10</MaxFileSizeInMB>
        <MaxFilesToRetain>10</MaxFilesToRetain>
      </FileRotationOptions>
  </File>
  <logLevel>ERROR</logLevel>
</MessageLogging>

Ротация файлов на основе их размера.

Ротация файлов: время

<MessageLogging name="LogPolicy">
  <File>
    <Message>This is a test message. Message id : {request.header.messageid}</Message>
    <FileName>test.log</FileName>
    <FileRotationOptions rotateFileOnStartup="true">
      <FileRotationType>TIME</FileRotationType>
      <RotationFrequency unit="minute">10</RotationFrequency>
      <MaxFilesToRetain>10</MaxFilesToRetain>
    </FileRotationOptions>
  </File>
  <logLevel>ERROR</logLevel>
</MessageLogging>

Ротация файлов по времени.

Ротация файлов: время и размер

<MessageLogging name="LogPolicy">
  <File>
    <Message>This is a test message. Message id : {request.header.messageid}</Message>
    <FileName>test.log</FileName>
    <FileRotationOptions rotateFileOnStartup="true">
      <FileRotationType>TIME_SIZE</FileRotationType>
      <MaxFileSizeInMB>10</MaxFileSizeInMB>
      <MaxFilesToRetain>10</MaxFilesToRetain>
      <RotationFrequency unit="minute">10</RotationFrequency>
    </FileRotationOptions>
  </File>
  <logLevel>ERROR</logLevel>
</MessageLogging>

Ротация файлов по времени и размеру.

С поддержкой потоковой передачи

<MessageLogging name="LogPolicy">
  <File>
  ....
  ....
  </File>
  <BufferMessage>true</BufferMessage>
</MessageLogging>

Ведение журнала сообщений с поддержкой потока


Ссылка на элемент

Используйте следующие элементы для настройки типа политики MessageLogging.

Имя поля Описание поля

File

Локальное место хранения файлов. (Ведение журнала файлов поддерживается только в развертываниях Edge для частного облака.) Информацию о том, где хранятся файлы, см. в разделе Расположение файла журнала в Edge для частного облака .

Message Создайте сообщение для отправки в файл журнала, объединив текст с переменными для сбора необходимой информации. См. примеры .
FileName Базовое имя файла журнала. Не указывайте путь к файлу. Например, этот элемент FileName указывает путь к файлу и недопустим:
<FileName>/opt/apigee/var/log/messages/mylog.log</FileName>

Этот код указывает только имя файла и является допустимым:

<FileName>mylog.log</FileName>

Информацию о месте хранения файла см. в разделе Расположение файла журнала в Edge для частного облака .

FileRotationOptions
rotateFileOnStartup

Атрибут. Допустимые значения: true / false

Если установлено значение true, то файл журнала будет обновляться каждый раз при перезапуске механизма обмена сообщениями.

FileRotationType Задает политику ротации ( size или time ) файла журнала.
MaxFileSizeInMB (При выборе size в качестве типа ротации) Указывает размер файла журнала, при достижении которого сервер переносит сообщения журнала в отдельный файл. Когда файл журнала достигает указанного размера, сервер переименовывает текущий файл журнала.
RotationFrequency (При выборе time в качестве типа ротации) Указывает время в минутах, по истечении которого сервер переместит сообщения журнала в отдельный файл. По истечении указанного времени текущий файл журнала переименовывается.
MaxFilesToRetain

Указывает максимальное количество сохраняемых файлов в контексте настроек ротации. Значение по умолчанию — 8 .

Если указать ноль (0), файлы журналов будут храниться неограниченное время, но в соответствии с настройками ротации файлов, при этом ни один из них не будет удален или переименован. Поэтому, чтобы избежать ошибок переполнения диска в будущем, установите значение больше нуля или внедрите регулярную автоматизированную систему очистки или архивации старых сохраненных файлов журналов.

BufferMessage

Если на вашем прокси-сервере включена потоковая передача HTTP , сообщения запросов/ответов не буферизуются. Если вы хотите регистрировать содержимое, требующее анализа сообщения потока, установите для BufferMessage значение true. См. пример на вкладке «Stream-enabled». Значение по умолчанию: false.

Syslog

Назначение системного журнала. Чтобы отправить системный журнал в Splunk, Sumo Logic или Loggly, см. раздел Настройка сторонних служб управления журналами .

Message

Создайте сообщение для отправки в системный журнал, комбинируя текст с переменными для сбора необходимой информации. См. примеры .

Примечание: переменные ответа не будут доступны в PostClientFlow после потока ошибок. Используйте переменные сообщения для регистрации информации об ответе как в случае ошибок, так и в случае успешного выполнения. См. также примечания по использованию .

Host Имя хоста или IP-адрес сервера, на который следует отправлять системный журнал. Если этот элемент не указан, по умолчанию используется localhost.
Port Порт, на котором работает системный журнал. Если этот элемент не указан, по умолчанию используется порт 514.
Protocol TCP или UDP (по умолчанию). Хотя UDP более производительный, протокол TCP гарантирует доставку журнала сообщений на сервер syslog. Для отправки сообщений syslog по TLS/SSL поддерживается только TCP.
FormatMessage

true или false (по умолчанию)

Необязательно, но <FormatMessage>true</FormatMessage> требуется для использования с Loggly.

Этот элемент позволяет управлять форматом контента, создаваемого Apigee и добавляемого к сообщению. Если установлено значение true, к сообщению syslog добавляется фиксированное количество символов, что позволяет отфильтровывать эту информацию из сообщений. Вот пример фиксированного формата:

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

Информация, генерируемая Apigee, включает в себя:

  • <14> - Оценка приоритета (см. протокол Syslog ) на основе уровня журнала и уровня объекта сообщения.
  • 1 — Текущая версия системного журнала.
  • Дата со смещением относительно UTC (UTC = +0000).
  • UUID процессора сообщений.
  • "Апиги-Эдж - - - "

Если задано значение false (по умолчанию), сообщение не будет начинаться с этих фиксированных символов.

PayloadOnly

true или false (по умолчанию)

Этот элемент задает формат сообщений, созданных Apigee, так, чтобы они содержали только тело сообщения syslog без добавленных символов, указанных FormatMessage .

Если этот элемент не включен или оставлен пустым, значением по умолчанию будет false .

См. FormatMessage .

DateFormat

Необязательный.

Строка шаблона форматирования, используемая для форматирования временной метки для каждого сообщения журнала. По умолчанию Apigee использует формат yyyy-MM-dd'T'HH:mm:ss.SSSZ . Поведение этого шаблона описано в документации по классу SimpleDateFormat в Java .

SSLInfo

Позволяет регистрировать сообщения через SSL/TLS. Используйте с подэлементом <Enabled>true</Enabled> .

Если этот элемент не включен или оставлен пустым, значением по умолчанию будет false (без TLS/SSL).

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

Тег <SSLInfo> можно настроить так же, как и в TargetEndpoint, включая включение двустороннего протокола TLS/SSL, как описано в справочнике по настройке прокси-сервера API . Поддерживается только протокол TCP .

logLevel

Необязательный.

Допустимые значения: INFO (по умолчанию), ALERT , WARN , ERROR

Установите определенный уровень информации, которая будет включена в журнал сообщений.

Если вы используете элемент FormatMessage (устанавливая его в значение true), настройка logLevel влияет на расчетный показатель приоритета (число внутри угловых скобок) в информации, сгенерированной Apigee, добавляемой к сообщению.

Схемы


Примечания по использованию

При подключении политики MessageLogging к потоку прокси-API рекомендуется разместить её в ответе ProxyEndpoint, в специальном потоке, называемом PostClientFlow. PostClientFlow выполняется после отправки ответа запрашивающему клиенту, что гарантирует доступность всех метрик для регистрации. Подробнее об использовании PostClientFlow см. в справочнике по настройке прокси-API .

PostClientFlow является особенным в двух отношениях:

  1. Он выполняется только как часть потока ответов.
  2. Это единственный поток, выполняемый после того, как прокси-сервер переходит в состояние ошибки.

Поскольку он выполняется независимо от того, успешно ли выполнился прокси-сервер или нет, вы можете поместить политики MessageLogging в PostClientFlow и быть уверенным, что они всегда будут выполняться.

На следующем изображении трассировки показана политика MessageLogging, выполняемая как часть PostClientFlow после выполнения DefaultFaultRule:

В этом примере политика проверки ключа API вызвала ошибку из-за недействительного ключа.

Ниже показано определение ProxyEndpoint, включающее PostClientFlow:

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

Edge регистрирует сообщения в виде простого текста, и вы можете настроить ведение журнала так, чтобы он включал переменные, такие как дата и время получения запроса или ответа, идентификатор пользователя, отправившего запрос, исходный IP-адрес, с которого был отправлен запрос, и т. д. Edge регистрирует сообщения асинхронно, что исключает задержку, которая может возникнуть из-за блокировки вызовов в вашем API.

Политика MessageLogging записывает зарегистрированные сообщения в буфер памяти. Регистратор сообщений считывает сообщения из буфера и затем записывает их в указанное вами место назначения. Каждое место назначения имеет свой собственный буфер.

Пользователи могут столкнуться с задержками при получении сообщений журнала, отправленных на новую конечную точку syslog. Это связано с предусмотренным в политике поведением «холодного запуска». При настройке нового места назначения журнала, в дополнение к существующим местам назначения журнала, обработчик сообщений (MP) может сначала поставить в очередь 1000 сообщений журнала в памяти перед их отправкой. Это может привести к первоначальной задержке в средах с низким трафиком. Эта первоначальная задержка незаметна для типичных производственных рабочих нагрузок, поскольку сообщения должны накапливаться быстро. После достижения порогового значения сообщения журнала будут доставляться в соответствии с ожиданиями. Выполнение корректного перезапуска обработчика сообщений также может инициировать доставку сообщений из очереди по мере их удаления из неё.

Если скорость записи в буфер превысит скорость чтения, буфер переполнится, и запись в журнал прервётся. В этом случае в файле журнала может появиться следующее сообщение:

Log message size exceeded. Increase the max message size setting

Если вы столкнулись с этой проблемой в Edge for Private Cloud 4.15.07 и более ранних версиях, найдите файл message-logging.properties и воспользуйтесь следующим решением:

Увеличьте свойство max.log.message.size.in.kb (значение по умолчанию = 128 КБ) в файле message-logging.properties .

Для Edge for Private Cloud версии 4.16.01 и более поздних версий задайте свойство conf/message-logging.properties+max. log.message.size.in.kb в файле /opt/apigee/customer/application/message-processor.properties и перезапустите обработчик сообщений. Обратите внимание, что это свойство изначально закомментировано по умолчанию.

Примечание: переменные сообщения ответа в Edge недоступны из потока ошибок. Эти переменные также недоступны в PostClientFlow, если предшествующий поток был потоком ошибок. Если вы хотите регистрировать информацию об ответе из PostClientFlow, используйте объект сообщения . Этот объект можно использовать для получения заголовков и другой информации из ответа, чтобы определить, произошла ли ошибка. Подробнее и пример см. в разделе «Переменные сообщения» .

Управление меткой времени сообщений журнала в Edge для частного облака

По умолчанию временная метка во всех сообщениях журнала имеет формат:

yyyy-MM-dd'T'HH:mm:ss.SSSZ

Это системное значение по умолчанию можно переопределить для пунктов назначения системного журнала с помощью элемента DateFormat . Поведение этого шаблона описано в документации по классу SimpleDateFormat в Java . Согласно этому определению, yyyy будет заменен на четырёхзначный год, MM — на двузначный номер месяца и т. д. Приведённый выше формат может привести к строке следующего вида:

2022-09-28T22:38:11.721+0000

Для управления этим форматом можно использовать свойство conf_system_apigee.syslogger.dateFormat в Edge Message Processor. Например, можно изменить формат сообщения на:

yy/MM/dd'T'HH:mm:ss.SSSZ

..заменив тире на косые черты и сократив год до 2 цифр, можно записать временную метку в форме:

22/09/28T22:38:11.721+0000

Чтобы изменить формат:

  1. Откройте файл message-processor.properties в редакторе. Если файл не существует, создайте его:
    > vi /opt/apigee/customer/application/message-processor.properties
  2. Задайте желаемые свойства:
    conf_system_apigee.syslogger.dateFormat=yy/MM/dd'T'HH:mm:ss.SSSZ
  3. Сохраните изменения.
  4. Убедитесь, что файл свойств принадлежит пользователю «apigee»:
    > chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  5. Перезапустите процессор Edge Message:
    > /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Расположение файла журнала в Edge для частного облака

Edge для частного облака 4.16.01 и более поздние версии

По умолчанию журналы сообщений частного облака находятся в следующем каталоге на узлах процессора сообщений:

/opt/apigee/var/log/edge-message-processor/messagelogging/org_name/environment/api_proxy_name/revision/logging_policy_name/

Вы можете изменить местоположение журнала по умолчанию, изменив свойства в файле message-logging.properties в обработчиках сообщений:

  • bin_setenv_data_dir — задаёт корневой путь для хранения файлов журнала. Например, bin_setenv_data_dir=/opt/apigee/var/log
  • conf_message-logging_log.root.dir — если указать относительный путь, например conf/message-logging.properties+log.root.dir=custom/folder/ , the path is appended to the bin_setenv_data_dir location.

    Если указать абсолютный путь, например, conf/message-logging.properties+log.root.dir=/opt/apigee/var/log/messages , журналы сообщений будут храниться в каталоге /opt/apigee/var/log/messages/messagelog/ . Абсолютный путь имеет приоритет над bin_setenv_data_dir .

    Обратите внимание, что ссылку на свойство необходимо указывать как conf/message-logging.properties+log.root.dir, поскольку по умолчанию оно закомментировано. Подробнее см. в разделе «Установка токена, который в данный момент закомментирован» .

Если вы хотите хранить файлы журналов в плоской файловой структуре, чтобы все они находились в одном каталоге, установите для параметра conf/message-logging.properties+enable.flat.directory.structure значение true в файле message-logging.properties. Сообщения будут храниться в каталоге, указанном в свойствах выше, а имена файлов будут иметь вид {org}_{environment}_{api_proxy_name}_{revision}_{logging_policy_name}_{filename} .

Чтобы установить эти свойства:

  1. Откройте файл message-processor.properties в редакторе. Если файл не существует, создайте его:
    > vi /opt/apigee/customer/application/message-processor.properties
  2. Задайте желаемые свойства:
    conf/message-logging.properties+log.root.dir= /opt/apigee/var/log/messages
  3. Сохраните изменения.
  4. Убедитесь, что файл свойств принадлежит пользователю «apigee»:
    > chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  5. Перезапустите компонент Edge:
    > /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Edge для частного облака 4.15.07 и более ранние версии

По умолчанию журналы сообщений находятся в следующем месте на процессорах сообщений:

/opt/apigee4/var/log/apigee/message-processor/messagelog/{org}/{environment}/{api_proxy_name}/{revision}/{logging_policy_name}/

Вы можете изменить местоположение журнала по умолчанию, изменив следующие свойства в файле message-logging.properties на процессорах сообщений:

  • data.dir — задаёт корневой путь для хранения файлов журнала. Например, data.dir=/opt/apigee4/var/log
  • log.root.dir — если указать относительный путь, например, log.root.dir=custom/folder/, путь будет добавлен к расположению data.dir.

Например, комбинация этих двух свойств установит каталог ведения журнала в /opt/apigee4/var/log/custom/folder/messagelog/ (обратите внимание, что /messagelog добавляется автоматически).

Если указать абсолютный путь, например, log.root.dir=/opt/apigee4/var/log/messages , журналы сообщений будут храниться в каталоге /opt/apigee4/var/log/messages/messagelog/. Абсолютный путь в log.root.dir имеет приоритет над data.dir .

Если вы хотите хранить файлы журналов в плоской структуре, чтобы все файлы журналов находились в одном каталоге, установите для свойства enable.flat.directory.structure значение true в файле message-logging.properties в разделе «Обработчики сообщений». Сообщения хранятся в каталоге, указанном в свойствах выше, а имена файлов имеют вид {org}_{environment}_{api_proxy_name}_{revision}_{logging_policy_name}_{filename} .

Значения по умолчанию для переменных в шаблоне сообщения

Значения по умолчанию можно указать для каждой переменной в шаблоне сообщения отдельно. Например, если переменная request.header.id не может быть разрешена, её значение заменяется на unknown .

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

Общее значение по умолчанию можно указать для всех неразрешенных переменных, установив атрибут defaultVariableValue в элементе Message :

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

Настройка сторонних служб управления журналами

Политика MessageLogging позволяет отправлять сообщения syslog в сторонние службы управления журналами, такие как Splunk, Sumo Logic и Loggly. Если вы хотите отправлять сообщения syslog в одну из этих служб, обратитесь к документации по этой службе, чтобы настроить хост, порт и протокол, а затем соответствующим образом настройте элемент Syslog в этой политике.

Информацию о настройке стороннего управления журналами см. в следующей документации:

Ссылка на ошибку

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge 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.

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>


Переменные потока

Следующие переменные заполняются при сбое политики.

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

Похожие темы