Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Что
Один из лучших способов выявить проблемы в среде выполнения API – это регистрировать сообщения. Вы можете прикрепить и настроить правило MessageLogging к API, чтобы регистрировать специальные сообщения на локальном диске (только в Edge для частного облака) или в системном журнале.
Примеры
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 для частного облака, то также можете записывать сообщения журнала в файл.
Syslog через 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. Пример можно посмотреть на вкладке Stream-enabled (С поддержкой потоковой передачи). Значение по умолчанию: false. |
|
|
Целевой сервер syslog. Чтобы отправлять системные журналы в Splunk, Sumo Logic или Loggly, ознакомьтесь со статьей Как настроить сторонние сервисы управления журналами. |
Message |
Создайте сообщение, которое будет отправлено в syslog, объединив текст с переменными, чтобы получить нужную информацию. См. раздел Примеры. Примечание. Переменные ответа будут недоступны в PostClientFlow после Error Flow. Используйте переменные сообщений, чтобы регистрировать информацию об ответе в случае ошибки и успеха. Также ознакомьтесь с замечаниями по использованию. |
Host |
Имя хоста или IP-адрес сервера, на который следует отправлять syslog. Если вы не добавите этот элемент, по умолчанию будет использоваться значение localhost. | |
Port |
Порт, на котором работает syslog. Если вы не укажете этот элемент, по умолчанию будет использоваться значение 514. | |
Protocol |
TCP или UDP (по умолчанию). Протокол UDP более эффективен, но протокол TCP гарантирует доставку журналов сообщений на сервер syslog. Для отправки сообщений syslog по протоколу TLS/SSL поддерживается только TCP. | |
FormatMessage |
Необязательно, но Этот элемент позволяет управлять форматом контента, созданного Apigee и добавленного в начало сообщения. Если задано значение true, перед сообщением syslog добавляется фиксированное количество символов, что позволяет отфильтровать эту информацию из сообщений. Пример для формата fixed:
Информация, сгенерированная 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:

В этом примере сбой произошел из-за недопустимого ключа, который был обнаружен правилом Verify API Key.
Ниже приведено определение ProxyEndpoint, включающее PostClientFlow:
<ProxyEndpoint name="default">
...
<PostClientFlow>
<Response>
<Step>
<Name>Message-Logging-1</Name>
</Step>
</Response>
</PostClientFlow>
...
</ProxyEndpoint>Edge регистрирует сообщения в виде обычного текста. Вы можете настроить ведение журнала так, чтобы в него включались переменные, например дата и время получения запроса или ответа, идентификатор пользователя в запросе, исходный IP-адрес, с которого был отправлен запрос, и т. д. Сообщения в журналы Edge записываются асинхронно, поэтому задержки, которые могут быть вызваны блокировкой вызовов, не влияют на ваш API.
Правило MessageLogging записывает зарегистрированные сообщения в буфер в памяти. Регистратор сообщений считывает сообщения из буфера и записывает их в настроенный вами пункт назначения. У каждого пункта назначения есть свой буфер.
Пользователи могут столкнуться с задержками при получении сообщений журнала, отправленных в новую конечную точку syslog. Это связано с предусмотренным правилом поведением при холодном запуске. Когда наряду с существующими целевыми папками для журналов настраивается новая, процессор сообщений может сначала поместить в память 1000 сообщений журнала, прежде чем отправить их. В средах с низким трафиком это может привести к начальной задержке. Эта начальная задержка не заметна при типичных рабочих нагрузках, поскольку сообщения должны накапливаться быстро. После достижения порогового значения сообщения журнала будут доставляться как обычно. При корректном перезапуске обработчика сообщений также может быть запущена доставка сообщений, находящихся в очереди.
Если скорость записи в буфер превышает скорость чтения, буфер переполняется и ведение журнала прекращается. В этом случае в файле журнала может появиться сообщение следующего содержания:
Log message size exceeded. Increase the max message size setting
Если вы столкнулись с этой проблемой в Edge для частного облака версии 4.15.07 или более ранней, найдите файл message-logging.properties и воспользуйтесь следующим решением:
Увеличьте значение свойства max.log.message.size.in.kb (по умолчанию 128 КБ) в файле message-logging.properties.
В Edge для частного облака версии 4.16.01 и более поздних задайте свойство conf/message-logging.properties+max.
log.message.size.in.kb в файле /opt/apigee/customer/application/message-processor.properties и перезапустите процессор сообщений. Обратите внимание, что по умолчанию это свойство закомментировано.
Примечание. переменные сообщения ответа в Edge недоступны в потоке ошибок. Эти переменные также недоступны в PostClientFlow, если предыдущим был Error Flow. Если вы хотите зарегистрировать информацию об ответе из PostClientFlow, используйте объект message. Этот объект можно использовать для получения заголовков и другой информации из ответа независимо от того, произошла ли ошибка. Подробнее о переменных сообщений…
Управление временной меткой сообщения в журнале в 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. Например, можно изменить формат сообщения на:
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 для Private Cloud
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 -
Sumo
Logic
- Также ознакомьтесь с записью в сообществе Apigee: Setting up logging with Sumo Logic, which host should I use? (Настройка ведения журналов с помощью Sumo Logic: какой хост следует использовать?).
- Полный пример использования Sumo Logic в качестве сервиса ведения журналов приведен в следующем сообщении на форуме Apigee Community. В решении используется одно правило JavaScript для отправки HTTP-запросов POST в коллектор источников HTTP Sumo Logic: Ведение журналов в Sumo Logic с помощью JavaScript и HTTP.
- Loggly
При использовании Loggly в правилах в качестве дочернего элемента элемента<Syslog>требуется указать<FormatMessage>true</FormatMessage>.
Также ознакомьтесь с записью на форуме сообщества Apigee, в которой рассказывается о том, как регистрировать сообщения в Loggly: Как регистрировать сообщения в Loggly
Справочник по ошибкам
В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые задаются Edge, когда это правило вызывает ошибку. Эта информация важна, если вы разрабатываете правила обработки ошибок. Подробнее о том, что нужно знать об ошибках в правилах и об обработке ошибок…
Ошибки времени выполнения
Эти ошибки могут возникать при выполнении правил.
| Код ошибки | Статус HTTP | Причина |
|---|---|---|
steps.messagelogging.StepDefinitionExecutionFailed |
500 | Посмотреть строку ошибки. |
Ошибки развертывания
Эти ошибки могут возникать при развертывании прокси-сервера, содержащего это правило.
| Название ошибки | Причина | Исправить |
|---|---|---|
InvalidProtocol |
Развертывание правила MessageLogging может завершиться с этой ошибкой, если протокол, указанный в элементе <Protocol>, недопустим. Допустимые протоколы – TCP и UDP.
Для отправки сообщений syslog по протоколу TLS/SSL поддерживается только TCP. |
build |
InvalidPort |
Развертывание правила MessageLogging может завершиться с этой ошибкой, если номер порта не указан в элементе <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.failedmessagelogging.{stepdefinition-name}.failed
Статьи по теме
- Переменные, доступные в Edge: справочник по переменным