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

Вы просматриваете документацию 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 в этой политике.

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

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

В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые устанавливаются Edge, когда эта политика вызывает ошибку. Эту информацию важно знать, если вы разрабатываете правила обработки ошибок. Дополнительные сведения см. в разделах Что нужно знать об ошибках политики и Обработка ошибок .

Ошибки выполнения

Эти ошибки могут возникнуть при выполнении политики.

Код неисправности Статус HTTP Причина
steps.messagelogging.StepDefinitionExecutionFailed 500 См. строку ошибки.

Ошибки развертывания

Эти ошибки могут возникнуть при развертывании прокси-сервера, содержащего эту политику.

Название ошибки Причина Исправить
InvalidProtocol Развертывание политики MessageLogging может завершиться с ошибкой из-за этой ошибки, если протокол, указанный в элементе <Protocol> , недействителен. Допустимые протоколы: TCP и UDP. Для отправки сообщений системного журнала через TLS/SSL поддерживается только TCP.
InvalidPort Развертывание политики регистрации сообщений может завершиться с ошибкой из-за этой ошибки, если номер порта не указан в элементе <Port> или если он недействителен. Номер порта должен быть целым числом, большим нуля.

Переменные неисправности

Эти переменные устанавливаются при возникновении ошибки во время выполнения. Дополнительные сведения см. в разделе Что нужно знать об ошибках политики .

Переменные Где Пример
fault.name=" fault_name " fault_name — это имя ошибки, как указано в таблице ошибок времени выполнения выше. Имя неисправности — это последняя часть кода неисправности. fault.name Matches "StepDefinitionExecutionFailed"
messagelogging. policy_name .failed policy_name — указанное пользователем имя политики, вызвавшей ошибку. messagelogging.ML-LogMessages.failed = true

Пример ответа об ошибке

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

Пример правила неисправности

<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

Похожие темы