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

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

Что

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

Образцы

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

<MessageLogging name="LogToSy>slo<g">;
  S<yslog
 >   Message[3f509b58 tag="{organization.name}.{apiproxy.name}.{environment.name}"] Weather request for WOEID {re<quest.qu>erypa<ram.>w}./Message
    Ho<stlog>s-01.<logg>ly.<com/H>ost
 <   Port5>14/<Port
    >Proto<colTCP/Protoc>ol
 <   FormatMessa>getru<e/FormatMe>ssage
    DateFormatyyyy-M<M-dd'T&>#39<;HH:mm:>ss.<SSSZ/Dat>eForm<at
  /Sys>l<og
  logLevelAL>ERT/logLevel
/MessageLogging

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

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

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

Системный журнал через TLS/SSL

<MessageLogging name="LogToSy>slo<g">;
  S<yslog
 >   Message[3f509b58 tag="{organization.name}.{apiproxy.name}.{environment.name}"] Weather request for WOEID {re<quest.qu>erypa<ram.>w}./Message
    Ho<stlog>s-01.<logg>ly.c<om/Ho>st
  <  Port65>14/<Port
    >Proto<colTCP/Protoc>ol
 <   FormatMessa>getru<e/Forma>tMessage
<    SSL>Info<
       > Enab<ledtrue/>Enabl<ed
    /SS>LInfo
    DateForma<tyyMMdd-HH:>mm:<ss.SSS/>Dat<eFormat
>  /S<yslog
  l>o<gLevelWARN/logL>evel
/MessageLogging

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

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

<MessageLogging name="LogPo>lic<y&qu>ot;
 < File
 >   MessageThis is a test message. Message id : {request.header.<messagei>d}/Mess<age
    >  FileNa<metest.lo>g/FileN<ame
      FileRotationOptions rotateFileOnStar>tup="<;true"
    >    <FileRotationTypeS>IZE/FileR<otationType
   >  <   MaxFileSizeIn>MB10/MaxF<ileSizeInMB
    >  <  MaxFilesToRetai>n10/Max<FilesToRetain
      >/Fi<leRot>ati<onOption>s
  /<File
  lo>g<LevelERROR/logL>evel
/MessageLogging

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

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

<MessageLogging name="LogPo>lic<y&qu>ot;
 < File
 >   MessageThis is a test message. Message id : {request.header.<messagei>d}/Me<ssage
  >  FileNa<metest.lo>g/Fil<eName
    FileRotationOptions rotateFileOnStar>tup=&qu<ot;true"
  >    <FileRotationTypeT>IME/Fil<eRotationType
      RotationFre>qu<ency unit="mi>nute&qu<ot;10/RotationFr>eq<uency
      MaxFi>lesTo<Retain10/MaxFilesToR>eta<in
  >  /<FileRota>tionO<ptions
  >/<File
  logLevel>ERROR/logLevel
/MessageLogging

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

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

<MessageLogging name="LogPo>lic<y&qu>ot;
 < File
 >   MessageThis is a test message. Message id : {request.header.<messagei>d}/Me<ssage
  >  FileNa<metest.lo>g/Fil<eName
    FileRotationOptions rotateFileOnStar>tup=&qu<ot;true"
  >    FileR<otationTypeTIME_S>IZE/Fil<eRotationType
 >  <   MaxFileSizeIn>MB10/Ma<xFileSizeInMB
  >  <  MaxFilesToRetai>n10/Max<FilesToRetain
      RotationFre>qu<ency unit="mi>nute&<quot;10/RotationFreq>uen<cy
  >  /<FileRota>tionO<ptions
  >/<File
  logLevel>ERROR/logLevel
/MessageLogging

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

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

<MessageLogging name="LogPo>lic<y&qu>ot;
  File
  ....<
  ..>..
<  /File
  Buf>ferM<essagetrue/Buf>f<erMessage
/Mess>ageLogging

Потоковая регистрация сообщений


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

Используйте следующие элементы для настройки типа политики 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

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

Message

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

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

Host Имя хоста или IP-адрес сервера, на который должен быть отправлен syslog. Если вы не включите этот элемент, по умолчанию будет localhost.
Port Порт, на котором запущен syslog. Если вы не включите этот элемент, по умолчанию будет 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 proxy рассмотрите возможность ее размещения в ответе ProxyEndpoint, в специальном потоке, называемом PostClientFlow. PostClientFlow выполняется после отправки ответа запрашивающему клиенту, что гарантирует доступность всех метрик для регистрации. Подробнее об использовании PostClientFlow см. в Справочнике по настройке API proxy .

PostClientFlow имеет два особых преимущества:

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

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

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

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

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

<ProxyEndpoint name="def>ault"<;
  ...
  Post>Clien<tFlow
  >  Respo<nse
>      Ste<p
  >      NameMessage<-Logg>ing-1/N<ame
 >     </Step
   > /R<esponse
  /Post>ClientF<low
  ...
/Pro>xyEndpoint

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 и перезапустите Message Processor. Обратите внимание, что это свойство изначально закомментировано по умолчанию.

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

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

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

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

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

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:
    > /opt/apigee/apigee-service/bin/apigee-service edge-message-processor перезапустить

Расположение файла журнала в 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 перезапустить

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 на Message Processors. Сообщения хранятся в каталоге, указанном в свойствах выше, а имена файлов имеют вид {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="unk>nown"This is a test message. id = {request.<header.i>d}/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

Похожие темы