Спецификации файла формата

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

Файл формата можно изменять во время работы экземпляра агента. Агент читает файл при запуске, после чего каждые 60 секунд проверяет, не изменилась ли отметка времени этого файла. Если отметка времени файла конфигурации изменится, агент реинициализирует свою конфигурацию динамически, не требуя перезапуска. Дополнительную информацию смотрите в разделе Изменение файлов конфигурации агента и файлов формата.

Чтобы создать новые шаблоны соответствия для события, используйте новый синтаксис регулярного выражения, который состоит из следующих частей:

  • Заголовок формата
  • Регулярное выражение
  • Отображения слотов
  • Оператор завершения

Заголовок формата содержит ключевое слово REGEX, которое сообщает агенту, что вы используете регулярное выражение для сопоставления с шаблоном в отслеживаемом журнале.

Назначьте это регулярное выражение классу событий, как показано в следующем примере:
REGEX REExample
Если в качестве класса событий вы используете специальный предопределенный класс событий *DISCARD*, любые записи журнала, сопоставленные соответствующему шаблону, отбрасываются, и никакие события для них не генерируются. Например:
REGEX *DISCARD*
Если найден соответствующий шаблон, то в журнал несовпадений ничего не записывается. Эти отброшенные события включаются в число сопоставленных записей о состоянии в файле журнала.
Прим.: Можно назначить несколько определений событий одному или нескольким классам событий. Имя класса произвольно, и его можно использовать, чтобы тем или иным способом указать на тип события или сгруппировать события.

После заголовка формата содержимое формата состоит из регулярного выражения на первой строке, затем идут отображения. Каждое отображение показано на отдельной строке, и эти отображения описаны в следующем примере.

Все строки, соответствующие регулярным выражениям, выбираются и отправляются на сервер мониторинга как события. Регулярное выражение содержит подвыражения. Можно использовать подвыражения для сопоставления определенных частей этих строк с переменной, которая в Event Integration Facility называется слот.

Приведенный здесь журнал мониторинга содержит три строки, которые нужно отследить:
Ошибка: отказ диска 
Ошибка: недостаточно памяти 
ПРЕДУПРЕЖДЕНИЕ: неправильный вход в систему  
Например, вы генерируете событие для определенной ошибки, и вам нужно включить строки, начинающиеся с Error:, и проигнорировать строку, начинающуюся с Warning:. Регулярное выражение должно сопоставить строки, начинающиеся с Error, а также должно включать в себя подвыражение. Подвыражение отмечено круглыми скобками и должно сопоставить только тот входной текст, который нужно назначить слоту msg. Следующее определение формата содержит простое регулярное выражение с одним единственным подвыражением.
REGEX REExample
Error: (.*)
msg $1
END

С учетом этой спецификации формата и приведенного перед этим набора данных журнала агент генерирует два события. Обоим событиям назначается класс событий REEXample. В первом событии значение disk failure назначается слоту msg. Кроме того, во втором событии значение out of memory назначается слоту msg. Поскольку строка Warning не соответствует регулярному выражению, она игнорируется, и событие не генерируется.

Если вы зададите значение $1 слоту msg, этому слоту будет назначено значение первого подвыражения.

Если у вас есть текст журнала, содержащий следующие ошибки, может потребоваться назначить таким сообщениям об ошибках свой класс событий, чтобы немедленно получать оповещения о сбое диска:
Error: disk failure on device /dev/sd0: bad sector
Error: disk failure on device /dev/sd1: temperature out of range
Можно включить в событие описание диска, на котором возникла ошибка, и более конкретное сообщение об ошибке диска.
Следующее регулярное выражение содержит два подвыражения, определяющие эту информацию:
REGEX DiskFailure
Error: disk failure on device (/dev/sd[0-9]):(.*)
device $1 CustomSlot1
msg $2
END

Назначьте эти два подвыражения слотам событий. Два сгенерированных события будут содержать такие значения:

"device=/dev/sd0" and "msg=bad sector"
"device=/dev/sd1" and "msg=temperature out of range"

Если для генерирования первого события используется EIF, вывод будет как в следующем примере:

DiskError;device='/dev/sd0';msg='bad sector';END

Если событие отправлено на сервер сервер Cloud APM, то слот с именем msg назначается атрибуту Performance Management с тем же именем. Но у слота device нет предопределенного атрибута.

Если нужно узнать значение, непосредственно назначенное device на консоли консоль Cloud APM, или записать пороги для него, необходимо назначить это значение атрибуту Performance Management.

Агент OS включает в себя следующие 13 предопределенных атрибутов:
  • Десять атрибутов типа строки в диапазоне от CustomSlot1 до CustomSlot10
  • Три атрибута целочисленного типа в диапазоне от CustomInteger1 до CustomInteger3
При использовании этих имен атрибутов в файле формата заполняются одноименные атрибуты Performance Management. Использование этих атрибутов не влияет на содержимое события EIF, отправляемого непосредственно в OMNIbus.
Прим.: В именах атрибутов CustomSlot и CustomInteger учитывается регистр, так что их нужно вводить точно так, как показано.

Назначьте слот из определения события одному из этих пользовательских атрибутов Performance Management в файле формата.

Назначьте слот device атрибуту Performance Management строкового типа с именем CustomSlot1, как показано в следующем примере:
REGEX DiskFailure
Error: disk failure on device (/dev/sd[0-9]):(.*)
device $1 CustomSlot1
msg $2
END

Когда событие выводится на Сводная панель Производительность приложений, назначенное device значение назначается атрибуту Performance Management CustomSlot1. Это значение можно вывести на консоль консоль Cloud APM или использовать для определения порогов. Любой слот в определении события можно назначить любому из 10 пользовательских атрибутов агента аналогичным образом, используя "CustomSlotn", где n - это число от 1 до 10 рядом с определением слота.

В этом примере первое подвыражение конкретное, (/dev/sd[0-9]), а второе подвыражение - общее, (.*). Определяя максимально конкретные регулярные выражения, вы повышаете производительность. Таким образом, если вы вводите поиск ошибки для устройства, не соответствующего конкретному сообщению об ошибке, определенному здесь, процедура поиска останавливается сразу, как только ошибка не была найдена. При этом время на поиск соответствия не тратится.

Ключевое слово END завершает спецификацию формата. Заголовок формата, регулярное выражение и ключевое слово END должны начинаться каждое на новой строке, как показано в следующем примере:
REGEX REExample 
Ошибка:
msg $1
END <EOL>
<EOF>
Прим.: Для последнего формата в файле надо вставить новую строку после ключевого слова END, как показано в примере. В противном случае возникнет ошибка синтаксического анализа.

Пользовательские атрибуты от CustomInteger1 до CustomInteger3 - это атрибуты 64-битового целого типа. Их можно использовать так же, как атрибуты CustomSlot строкового типа. Можно использовать эти атрибуты для отображения отдельных слотов или подвыражений, из файла журнала на отдельные атрибуты Cloud APM. Поскольку эти атрибуты числовые, для них можно использовать арифметические операции сравнения < и >, не доступные для строковых атрибутов.

Прим.: Хотя эти значения оцениваются компонентом сервер Cloud APM как целые числа, для EIF и в пределах файла формата они все равно обрабатываются как строки. Например, чтобы использовать слот целого типа в операторе PRINTF, все равно нужно указывать его как “%s”, а не как “%d”.
Следующий пример иллюстрирует использование пользовательского атрибута целого типа. Допустим, что периодически поступает сообщение UNIX syslog, в котором сообщается свободный процент файловой системы, например, в виде такой записи в журнал:
Oct 24 11:05:10 jimmy fschecker[2165]: Filesystem /usr is 97% full.
Вы можете использовать следующий оператор в файле формата, чтобы посмотреть, каков свободный процент файловой системы:
REGEX FileSystemUsage
^([A-Z][a-z]{2}) ([ 0-9][0-9]) ([0-9]{2}:[0-9]{2}:[0-9]{2}) (.*?) (.*?): 
Файловая система (.*?) полна на ([0-9]+)%\.$
Месяц              $1 CustomSlot1
Дата               $2 CustomSlot2
Время              $3 CustomSlot3
Хост               $4 CustomSlot4
Служба             $5 CustomSlot5
Файловая система   $6 CustomSlot6
Процент заполнения $7  CustomInteger1
msg          PRINTF("%s: %s% full", Filesystem, PctFull)
END
Прим.: В предыдущем операторе все между обозначениями ^ и $ на второй и третьей строках должно быть на одной строке.
Поскольку у вас могли бы быть другие события, вставляющие значения в CustomInteger1, чтобы не перепутать различные типы событий, можно воспользоваться значением атрибута Class, ограничив его влияние нужным типом ошибок. Например, следующая пороговая формула заставляет порог срабатывать, только когда событие класса событий FileSystemUsage содержит в слоте CustomInteger1 значение большее или равное 95:
(  Class == 'FileSystemUsage' AND CustomInteger1 >= 95)
Затем другое событие может использовать CustomInteger1 для других целей без нежелательного срабатывания этого порога.

Итак, теперь вы можете написать в Performance Management порог, который использует для атрибутов CustomInteger арифметические операции, недопустимые для атрибутов CustomSlots.

Прим.: Если отобразить данные не целого типа на атрибуты CustomInteger, могут возникнуть нулевые или непредвиденные значения.