Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Что
Один из лучших способов выявления проблем в среде выполнения API — это логирование сообщений. Вы можете прикрепить и настроить политику логирования сообщений для вашего API, чтобы записывать пользовательские сообщения на локальный диск (только для Edge for Private Cloud) или в 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>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 используйте следующие элементы.
| Название поля | Описание поля | |
|---|---|---|
Место хранения файлов: локально. (Ведение журнала файлов поддерживается только в развертываниях Edge для частного облака.) Информацию о месте хранения файлов см. в разделе «Местоположение файлов журналов в Edge для частного облака» . | Message | Создайте сообщение для отправки в файл журнала, объединив текст с переменными для получения нужной информации. См. примеры . |
FileName | Базовое имя файла журнала. Не указывайте путь к файлу. Например, элемент FileName , указывающий путь к файлу, является недопустимым:<FileName>/opt/apigee/var/log/messages/mylog.log</FileName> Этот код задаёт только имя файла и является допустимым: <FileName>mylog.log</FileName> Информацию о месте хранения файла см. в разделе «Расположение файла журнала в Edge для частного облака» . | |
FileRotationOptions | ||
rotateFileOnStartup | Атрибут. Допустимые значения: Если установлено значение true, то файл журнала будет обновляться каждый раз при перезапуске системы обмена сообщениями. | |
FileRotationType | Задает политику ротации ( size или time ) файла журнала. | |
MaxFileSizeInMB | (При выборе size в качестве типа ротации) Указывает размер файла журнала, который запускает процесс перемещения сообщений журнала на сервер в отдельный файл. После достижения файлом журнала указанного размера сервер переименовывает текущий файл журнала. | |
RotationFrequency | (При выборе типа ротации по time ) Указывает время в минутах, по истечении которого сервер перемещает сообщения журнала в отдельный файл. По истечении указанного интервала текущий файл журнала переименовывается. | |
MaxFilesToRetain | Указывает максимальное количество файлов, которые будут сохранены в контексте настроек ротации. Значение по умолчанию — 8 . Если вы укажете ноль (0), файлы журналов будут храниться неограниченно долго, но с учетом настроек ротации файлов, при этом ни один из файлов не будет удален или переименован. Поэтому, чтобы избежать ошибок, связанных с переполнением диска в будущем, установите это значение больше нуля или внедрите регулярную автоматизированную систему очистки или архивирования старых сохраненных файлов журналов. | |
BufferMessage | Если для вашего прокси-сервера включена потоковая передача HTTP , сообщения запроса/ответа не буферизуются. Если вы хотите регистрировать контент, требующий анализа сообщения потока, установите для параметра BufferMessage значение true. Пример см. на вкладке "Включена потоковая передача". По умолчанию: false. | |
Адрес назначения для syslog-сообщений. Чтобы отправлять syslog-сообщения в Splunk, Sumo Logic или Loggly, см. раздел «Настройка сторонних служб управления журналами» . | Message | Сформируйте сообщение для отправки в системный журнал, объединив текст с переменными для получения необходимой информации. См. примеры . Примечание: Переменные ответа будут недоступны в PostClientFlow после обработки ошибки. Используйте переменные сообщения для записи информации об ответе как в случае ошибки, так и в случае успешного выполнения. См. также примечания по использованию . |
Host | Имя хоста или IP-адрес сервера, на который должны отправляться сообщения syslog. Если этот элемент не указан, по умолчанию используется localhost. | |
Port | Порт, на котором запущен syslog. Если этот элемент не указан, по умолчанию используется порт 514. | |
Protocol | TCP или UDP (по умолчанию). Хотя UDP более производительен, протокол TCP гарантирует доставку сообщений журнала на сервер syslog. Для отправки сообщений syslog по TLS/SSL поддерживается только TCP. | |
FormatMessage | Этот элемент позволяет управлять форматом содержимого, генерируемого Apigee и добавляемого в начало сообщения. Если установлено значение true, сообщение syslog будет начинаться с фиксированного количества символов, что позволяет отфильтровывать эту информацию из сообщений. Вот пример для фиксированного формата: Информация, сгенерированная Apigee, включает в себя:
Если установлено значение false (по умолчанию), сообщение не будет начинаться с этих фиксированных символов. | |
PayloadOnly | Этот элемент задает формат сообщений, генерируемых Apigee, таким образом, чтобы они содержали только тело сообщения syslog, без символов, указанных в параметре FormatMessage в начале. Если вы не включите этот элемент или оставите его пустым, значение по умолчанию будет См. FormatMessage . | |
DateFormat | Необязательный. Шаблон форматирования, используемый для форматирования метки времени каждого сообщения журнала. По умолчанию Apigee использует формат | |
SSLInfo | Позволяет записывать сообщения через SSL/TLS. Используйте с подэлементом Если вы не включите этот элемент или оставите его пустым, значение по умолчанию будет false (без TLS/SSL). <SSLInfo>
<Enabled>true</Enabled>
</SSLInfo>Вы можете настроить тег <SSLInfo> так же, как и на TargetEndpoint, включая включение двустороннего TLS/SSL, как описано в справочнике по настройке API-прокси . Поддерживается только протокол TCP . | |
logLevel | Необязательный. Допустимые значения: Укажите конкретный уровень информации, которая будет включена в журнал сообщений. Если вы используете элемент | |
Схемы
Примечания по использованию
При добавлении политики MessageLogging к потоку API-прокси рекомендуется размещать её в ответе ProxyEndpoint в специальном потоке под названием PostClientFlow. PostClientFlow выполняется после отправки ответа запрашивающему клиенту, что гарантирует доступность всех метрик для логирования. Подробную информацию об использовании PostClientFlow см. в справочнике по настройке API-прокси .
PostClientFlow уникален в двух отношениях:
- Это выполнялось только в рамках процесса обработки ответа.
- Это единственный поток, выполняемый после того, как прокси-сервер переходит в состояние ошибки.
Поскольку политика 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
Этот общесистемный параметр по умолчанию можно переопределить для мест назначения syslog с помощью элемента DateFormat . Поведение этого шаблона описано в документации к классу SimpleDateFormat в Java . Согласно этому определению, yyyy будет заменено четырехзначным годом, MM — двухзначным номером месяца и так далее. Приведенный выше формат может привести к строке следующего вида:
2022-09-28T22:38:11.721+0000
Для управления форматом сообщения можно использовать свойство conf_system_apigee.syslogger.dateFormat обработчика сообщений Edge. Например, можно изменить формат сообщения на:
yy/MM/dd'T'HH:mm:ss.SSSZ
...заменив тире косыми чертами и сократив год до двух цифр, получаем метку времени в следующем формате:
22/09/28T22:38:11.721+0000
Чтобы изменить формат:
- Откройте файл message-processor.properties в текстовом редакторе. Если файл не существует, создайте его:
> vi /opt/apigee/customer/application/message-processor.properties - Настройте свойства по своему усмотрению:
conf_system_apigee.syslogger.dateFormat=yy/MM/dd'T'HH:mm:ss.SSSZ - Сохраните изменения.
- Убедитесь, что файл свойств принадлежит пользователю 'apigee':
> chown apigee:apigee /opt/apigee/customer/application/message-processor.properties - Перезапустите обработчик сообщений Edge:
> /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Расположение файла журнала в Edge для частного облака
Edge for Private Cloud 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} .
Чтобы задать эти свойства:
- Откройте файл message-processor.properties в текстовом редакторе. Если файл не существует, создайте его:
> vi /opt/apigee/customer/application/message-processor.properties - Настройте свойства по своему усмотрению:
conf/message-logging.properties+log.root.dir= /opt/apigee/var/log/messages - Сохраните изменения.
- Убедитесь, что файл свойств принадлежит пользователю 'apigee':
> chown apigee:apigee /opt/apigee/customer/application/message-processor.properties - Перезапустите компонент Edge:
> /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Edge for Private Cloud 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 в этой политике.
Для настройки управления журналами сторонними сервисами см. следующую документацию:
- Splunk (выберите версию продукта)
См. также эту запись в сообществе Apigee: Передача сообщений журнала в Splunk. - Логика сумо
- Также ознакомьтесь с этой записью на форуме Apigee: Настройка логирования с помощью Sumo Logic: какой хост следует использовать?
- Полный пример использования Sumo Logic в качестве службы логирования см. в следующем сообщении на форуме Apigee Community. Решение использует единую политику JavaScript для отправки HTTP POST-запросов к Sumo Logic HTTP Source Collector: Logging to Sumo Logic using JavaScript and HTTP
- Логгли
При использовании Loggly в политике требуется, чтобы<FormatMessage>true</FormatMessage>был дочерним элементом элемента<Syslog>.
Также ознакомьтесь с этой записью на форуме Apigee Community для получения дополнительной информации о записи сообщений в Loggly: Запись сообщений в Loggly
Ссылка на ошибку
В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые устанавливаются Edge, когда эта политика вызывает ошибку. Эту информацию важно знать, если вы разрабатываете правила обработки ошибок. Дополнительные сведения см. в разделах Что нужно знать об ошибках политики и Обработка ошибок .
Ошибки выполнения
Эти ошибки могут возникнуть при выполнении политики.
| Код неисправности | Статус HTTP | Причина |
|---|---|---|
steps.messagelogging.StepDefinitionExecutionFailed | 500 | См. строку ошибки. |
Ошибки развертывания
Эти ошибки могут возникнуть при развертывании прокси-сервера, содержащего эту политику.
| Название ошибки | Причина | Исправить |
|---|---|---|
InvalidProtocol | Развертывание политики MessageLogging может завершиться с ошибкой из-за этой ошибки, если протокол, указанный в элементе <Protocol> , недействителен. Допустимые протоколы: TCP и UDP. Для отправки сообщений системного журнала через TLS/SSL поддерживается только TCP. | build |
InvalidPort | Развертывание политики регистрации сообщений может завершиться с ошибкой из-за этой ошибки, если номер порта не указан в элементе <Port> или если он недействителен. Номер порта должен быть целым числом, большим нуля. | build |
Переменные неисправности
Эти переменные устанавливаются при возникновении ошибки во время выполнения. Дополнительные сведения см. в разделе Что нужно знать об ошибках политики .
| Переменные | Где | Пример |
|---|---|---|
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
Связанные темы
- Переменные, предоставляемые Edge: Справочник по переменным