|
|
| Строка 1: |
Строка 1: |
| = DQL в логах =
| |
|
| |
|
| С помощью Ключ-АСТРОМ вы можете использовать функции языка запросов Ключ-АСТРОМ ('''DQL''') и логические операторы в сопоставителях.
| |
|
| |
| Фильтр сопоставителя обрабатывает поступающие данные и сужает область обработки данных в соответствии с созданным вами правилом. Вы можете использовать фильтр сопоставителя в обработке логов и событий, метрик логов, событий логов и сегментов логов для:
| |
|
| |
| * Фильтрации записей, содержащих указанную фразу.
| |
| * Поиска в логах определенного значения по заданному атрибуту.
| |
| * Проверки, является ли значение NULL.
| |
| * Использования логических операторов для соединения двух или более выражений.
| |
|
| |
| Чтобы узнать об использовании логических операторов в '''DQL''', см. раздел «Логические операторы или операторы равенства».
| |
|
| |
| = Функции =
| |
|
| |
| == <code>matchesPhrase</code> ==
| |
|
| |
| Фильтрует записи, содержащие указанную фразу. Возвращает только соответствующие записи. Эта функция нечувствительна к регистру символов '''ASCII''', работает с многозначными атрибутами (соответствующими любому из значений), а символ звездочки (<code>*</code>) является подстановочным знаком, указывающим только на один термин, а не на все значение поля.
| |
|
| |
| '''Проверка''': Функция выполняет проверку наличия элемента <code>matchesPhrase</code> без учета регистра для всей строки запроса и не поддерживает подстановочные символы в середине строки. Для найденных результатов выполняется дополнительная проверка:
| |
| * Если запрос начинается со слова, то предшествующий ему символ должен быть не словом.
| |
| * Если запрос заканчивается символом слова, то следующий за ним символ должен быть не словом.
| |
| * Если запрос начинается со звездочки, проверка предшествующего символа не выполняется.
| |
| * Если запрос заканчивается звездочкой, проверка следующего символа не выполняется.
| |
|
| |
| '''Синтаксис'''
| |
| <pre>matchesPhrase(expression, phrase [, caseSensitive])</pre>
| |
|
| |
| '''Параметры'''
| |
|
| |
| {| class="wikitable"
| |
| |-
| |
| ! Имя !! Тип !! Обязательный !! По умолчанию !! Ограничения !! Описание
| |
| |-
| |
| | <code>expression</code> || строка, массив || да || || || Выражение (строка или массив строк), которое следует проверить.
| |
| |-
| |
| | <code>phrase</code> || строка || да || || || Фраза для поиска.
| |
| |-
| |
| | <code>caseSensitive</code> || логический || нет || false || Этот необязательный параметр (<code>caseSensitive</code>) не поддерживается сопоставителем. Функция <code>matchesPhrase</code> в сопоставителе выполняет поиск только без учета регистра. || Следует ли проводить сопоставление с учетом регистра символов?
| |
| |}
| |
|
| |
| '''Пример'''
| |
| В этом примере вы добавляете фильтр, который соответствует записям лога, содержащим фразу <code>error</code> в своем содержимом.
| |
|
| |
| <pre>matchesPhrase(content, "error")</pre>
| |
|
| |
| === Примеры обработки событий с использованием функции DQL <code>matchesPhrase</code> ===
| |
|
| |
| {| class="wikitable"
| |
| |-
| |
| ! Часть входного события !! Обработка запроса !! Результат совпадения !! Описание
| |
| |-
| |
| | <code>attribute="User 'käärmanü' failed to login from 192.168.0.1"</code> || <code>matchesPhrase(attribute, "192.168.0.1")</code> || Применимый || Точное совпадение по одному термину.
| |
| |-
| |
| | <code>attribute="User 'käärmanü' failed to login from 192.168.0.123"</code> || <code>matchesPhrase(attribute, "192.168.0.1")</code> || Непригодный || После символа ожидается несловарный символ <code>1</code>.
| |
| |-
| |
| | <code>attribute="User 'käärmanü' failed to login from 192.168.0.123"</code> || <code>matchesPhrase(attribute, "192.168.0.1*")</code> || Применимый || Запрос будет соответствовать всем IP-адресам, у которых последний октет находится между <code>100</code> и <code>199</code>.
| |
| |-
| |
| | <code>attribute="User 'käärmanü' failed to login from 192.168.0.1"</code> || <code>matchesPhrase(attribute, "failed to login")</code> || Применимый || Точное совпадение фразы.
| |
| |-
| |
| | <code>attribute="User 'käärmanü' failed to login from 192.168.0.1"</code> || <code>matchesPhrase(attribute, "failed to log")</code> || Непригодный || <code>log</code> не является полным словом; после <code>log</code>.
| |
| |-
| |
| | <code>attribute="User 'käärmanü' failed to login from 192.168.0.1"</code> || <code>matchesPhrase(attribute, "failed to log*")</code> || Применимый || Если запрос заканчивается символом-заменителем, проверка следующего за ним символа пропускается.
| |
| |-
| |
| | <code>attribute="User 'käärmanü' failed to login from 192.168.0.1"</code> || <code>matchesPhrase(attribute, "ed to login")</code> || Непригодный || <code>ed</code> не является полным словом, предшествующий символ <code>l</code> является частью слова.
| |
| |-
| |
| | <code>attribute="User 'käärmanü' failed to login from 192.168.0.1"</code> || <code>matchesPhrase(attribute, "*ed to login")</code> || Применимый || Если запрос начинается с символа-заменителя, проверка предшествующего символа пропускается.
| |
| |-
| |
| | <code>attribute="User 'käärmanü' failed to login from 192.168.0.1"</code> || <code>matchesPhrase(attribute, "*ed to log*")</code> || Применимый || Если запрос начинается и заканчивается символом-заменителем, проверка предшествующего и последующего символов пропускается.
| |
| |-
| |
| | <code>attribute="User 'käärmanü' failed to login from 192.168.0.1"</code> || <code>matchesPhrase(attribute, "käärmanü failed")</code> || Непригодный || Между <code>'</code> и <code>käärmanü</code> и <code>failed</code>.
| |
| |-
| |
| | <code>attribute="User 'käärmanü' failed to login from 192.168.0.1"</code> || <code>matchesPhrase(attribute, "rmanü' failed")</code> || Применимый || Символы, не входящие в ASCII-код <code>ä</code>, рассматриваются как символы, не являющиеся словами.
| |
| |-
| |
| | <code>attribute="User 'käärmanü' failed to login from 192.168.0.1"</code> || <code>matchesPhrase(attribute, " 'käärmanü' failed")</code> || Применимый || Если запрос начинается с символа, не являющегося словом, проверка предшествующего символа пропускается.
| |
| |-
| |
| | <code>attribute="Failed to assign monitoring configuration for com.astromkey.extension"</code> || <code>matchesPhrase(attribute, "configuration for")</code> || Непригодный || В запросе присутствует пробел, а в значении атрибута — табулятор.
| |
| |-
| |
| | <code>attribute="Failed to assign monitoring configuration for com.astromkey.extension"</code> || <code>matchesPhrase(attribute, "failed to")</code> || Непригодный || В запросе один пробел, а в значении атрибута — два пробела.
| |
| |-
| |
| | <code>attribute="Failed to assign monitoring configuration for com.astromkey.extension"</code> || <code>matchesPhrase(attribute, "failed to")</code> || Применимый || Поиск возможен с использованием нескольких пробелов.
| |
| |-
| |
| | <code>attribute=["Gdansk, Poland", "Linz, Austria", "Klagenfurt, Austria"]</code> || <code>matchesPhrase(attribute, "Austria")</code> || Применимый || Функция обрабатывает атрибуты с несколькими значениями в режиме "любое совпадение", в данном случае <code>Austria</code> совпадение происходит по второму и третьему значениям.
| |
| |-
| |
| | <code>attribute=["Gdansk, Poland", "Linz, Austria", "Klagenfurt, Austria"]</code> || <code>matchesPhrase(attribute, "Pol*")</code> || Применимый || Символ подстановки можно использовать также при работе с атрибутами, содержащими несколько значений.
| |
| |}
| |
|
| |
| == <code>matchesValue</code> ==
| |
|
| |
| Функция выполняет поиск в записях определенного значения в заданном атрибуте. Возвращает только совпадающие записи. Она нечувствительна к регистру символов '''ASCII''', работает с многозначными атрибутами (соответствующими любому из значений) и не поддерживает подстановочные символы в середине значения.
| |
|
| |
| '''Синтаксис'''
| |
| <pre>matchesValue(expression, value [, caseSensitive])</pre>
| |
|
| |
| '''Параметры'''
| |
|
| |
| {| class="wikitable"
| |
| |-
| |
| ! Имя !! Тип !! Обязательный !! По умолчанию !! Ограничения !! Описание
| |
| |-
| |
| | <code>expression</code> || строка, массив || да || || || Выражение (значение или массив значений), которое следует проверить.
| |
| |-
| |
| | <code>value</code> || строка || да || || || Значение, которое следует искать.
| |
| |-
| |
| | <code>caseSensitive</code> || логический || нет || false || Этот необязательный параметр (<code>caseSensitive</code>) не поддерживается сопоставителем. Функция <code>matchesValue</code> в сопоставителе выполняет поиск только без учета регистра. || Следует ли проводить сопоставление с учетом регистра символов?
| |
| |}
| |
|
| |
| '''Пример'''
| |
| В этом примере вы добавляете запись фильтра, в которой атрибут <code>process.technology</code> содержит значение <code>nginx</code>.
| |
|
| |
| <pre>matchesValue(process.technology, "nginx")</pre>
| |
|
| |
| === Примеры обработки событий с использованием функции DQL <code>matchesValue</code> ===
| |
|
| |
| {| class="wikitable"
| |
| |-
| |
| ! Часть входного события !! Обработка запроса !! Результат совпадения !! Описание
| |
| |-
| |
| | <code>attribute="astromkey"</code> || <code>matchesValue(attribute, "astromkey")</code> || Применимый || Равенство без учета регистра.
| |
| |-
| |
| | <code>attribute="User 'käärmanü' failed to login from 192.168.0.1"</code> || <code>matchesValue(attribute, "192.168.0.1")</code> || Непригодный || Учитывается значение атрибута целиком.
| |
| |-
| |
| | <code>attribute="User 'käärmanü' failed to login from 192.168.0.1"</code> || <code>matchesValue(attribute, "*192.168.0.1")</code> || Применимый || Значение заканчивается на <code>192.168.0.1</code>.
| |
| |-
| |
| | <code>attribute="User 'käärmanü' failed to login from 192.168.0.1"</code> || <code>matchesValue(attribute, "user*")</code> || Применимый || Значение начинается с <code>user</code> (регистр не учитывается).
| |
| |-
| |
| | <code>attribute="User 'käärmanü' failed to login from 192.168.0.1"</code> || <code>matchesValue(attribute, "*failed to log*")</code> || Применимый || Значение содержит строку <code>failed to log</code>.
| |
| |-
| |
| | <code>attribute="Österreich"</code> || <code>matchesValue(attribute, "österreich")</code> || Непригодный || Регистр нечувствителен только для символов ASCII.
| |
| |-
| |
| | <code>attribute="Österreich"</code> || <code>matchesValue(attribute, "Österreich")</code> || Применимый || Точное совпадение.
| |
| |-
| |
| | <code>attribute=["Java", "DOCKER", "k8s"]</code> || <code>matchesValue(attribute, "docker")</code> || Применимый || Функция обрабатывает атрибуты с несколькими значениями в режиме "любое совпадение", в данном случае <code>docker</code> совпадение происходит по второму значению.
| |
| |-
| |
| | <code>attribute=["Java11", "java17"]</code> || <code>matchesValue(attribute, "java")</code> || Непригодный || Ни одно из значений не равно строке <code>java</code>.
| |
| |-
| |
| | <code>attribute=["Java11", "java17"]</code> || <code>matchesValue(attribute, "java*")</code> || Применимый || Оба значения начинаются со строки <code>java</code>.
| |
| |}
| |
|
| |
| == <code>isNotNull</code> ==
| |
|
| |
| Проверяет, не является ли значение NULL.
| |
|
| |
| '''Синтаксис'''
| |
| <pre>isNotNull(<value>)</pre>
| |
|
| |
| '''Пример'''
| |
| В этом примере мы фильтруем (выбираем) данные, в которых поле <code>host.name</code> содержит значение.
| |
|
| |
| <pre>isNotNull(host.name)</pre>
| |
|
| |
| {| class="wikitable"
| |
| |-
| |
| ! timestamp !! content !! event.type !! host.name
| |
| |-
| |
| | 2022-08-03 11:27:19 || 2022-08-03 09:27:19.836 [QueueProcessor] RemoteReporter... || LOG || HOST-AF-710319
| |
| |}
| |
|
| |
| === Примеры обработки событий с использованием функции DQL <code>isNotNull</code> ===
| |
|
| |
| {| class="wikitable"
| |
| |-
| |
| ! Часть входного события !! Обработка запроса !! Результат совпадения !! Описание
| |
| |-
| |
| | <code>{"attribute":"astromkey"}</code> || <code>isNotNull(other)</code> || Непригодный || Атрибут <code>other</code> не существует.
| |
| |-
| |
| | <code>{"attribute":"astromkey"}</code> || <code>isNotNull(attribute)</code> || Применимый || Имеет <code>attribute</code> ненулевое значение.
| |
| |-
| |
| | <code>{"attribute":null}</code> || <code>isNotNull(attribute)</code> || Непригодный || Значение параметра <code>attribute</code> равно нулю.
| |
| |}
| |
|
| |
| == <code>isNull</code> ==
| |
|
| |
| Проверяет, является ли значение NULL.
| |
|
| |
| '''Синтаксис'''
| |
| <pre>isNull(<value>)</pre>
| |
|
| |
| '''Пример'''
| |
| В этом примере мы фильтруем (выбираем) данные, в которых поле <code>host.name</code> не содержит значения.
| |
|
| |
| <pre>filter isNull(host.name)</pre>
| |
|
| |
| {| class="wikitable"
| |
| |-
| |
| ! timestamp !! content !! event.type !! host.name
| |
| |-
| |
| | 2022-08-03 12:53:26 || 2022-08-03T10:52:31Z localhost haproxy[12529]: 192.168.19.100:38440 || LOG ||
| |
| |}
| |
|
| |
| === Примеры обработки событий с использованием функции DQL <code>isNull</code> ===
| |
|
| |
| {| class="wikitable"
| |
| |-
| |
| ! Часть входного события !! Обработка запроса !! Результат совпадения !! Описание
| |
| |-
| |
| | <code>{"attribute":"astromkey"}</code> || <code>isNull(other)</code> || Применимый || Атрибут <code>other</code> не существует.
| |
| |-
| |
| | <code>{"attribute":"astromkey"}</code> || <code>isNull(attribute)</code> || Непригодный || Имеет <code>attribute</code> ненулевое значение.
| |
| |-
| |
| | <code>{"attribute":null}</code> || <code>isNull(attribute)</code> || Применимый || Значение параметра <code>attribute</code> равно нулю.
| |
| |}
| |
|
| |
| = Операторы =
| |
|
| |
| Логические операторы можно использовать для соединения двух или более выражений. Подробнее о поведении логических операторов в '''DQL''' можно узнать в разделе «Логические операторы или операторы равенства».
| |
|
| |
| == <code>OR</code> ==
| |
|
| |
| Логическое сложение.
| |
|
| |
| '''Синтаксис'''
| |
| <pre><expression_1> or <expression_2></pre>
| |
|
| |
| '''Пример'''
| |
| В этом примере вы добавляете сопоставитель для фильтрации записей, содержимое которых содержит либо фразу <code>timestamp</code>, либо выражение <code>trigger</code>.
| |
|
| |
| <pre>matchesPhrase(content, "timestamp") or matchesPhrase(content, "trigger")</pre>
| |
|
| |
| == <code>AND</code> ==
| |
|
| |
| Логическое умножение.
| |
|
| |
| '''Синтаксис'''
| |
| <pre><expression_1> and <expression_2></pre>
| |
|
| |
| '''Пример'''
| |
| В этом примере вы добавляете сопоставитель для фильтрации записей, содержимое которых содержит слова «фраза» <code>timestamp</code> и «фраза» <code>trigger</code>.
| |
|
| |
| <pre>matchesPhrase(content, "timestamp") and matchesPhrase(content, "trigger")</pre>
| |
|
| |
| == <code>NOT</code> ==
| |
|
| |
| Логическое отрицание.
| |
|
| |
| '''Синтаксис'''
| |
| <pre>not <expression></pre>
| |
|
| |
| '''Пример'''
| |
| В этом примере вы добавляете сопоставитель для фильтрации записей, содержимое которых не содержит фразу <code>timestamp</code>.
| |
|
| |
| <pre>not matchesPhrase(content, "timestamp")</pre>
| |
|
| |
| == Строгое равенство (<code>==</code>) ==
| |
|
| |
| Логический оператор (<code>==</code>) указывает на точное совпадение.
| |
|
| |
| * Типы данных должны быть идентичными. Однако, если десятичное значение равно 0, числа с плавающей запятой можно сравнивать с целыми числами. Например, <code>1 == 1.0</code>.
| |
| * Для строк поиск чувствителен к регистру.
| |
| * В отличие от функции <code>matchesValue</code>, оператор строгого равенства выполняет сравнение с учетом регистра, не поддерживает подстановочные знаки и не работает с элементами, входящими в состав многозначных атрибутов.
| |
|
| |
| '''Синтаксис'''
| |
| <pre><expression1> == <expression2></pre>
| |
|
| |
| === Примеры использования оператора строгого равенства ===
| |
|
| |
| {| class="wikitable"
| |
| |-
| |
| ! Часть входного события !! Обработка запроса !! Результат совпадения !! Описание
| |
| |-
| |
| | <code>{"attribute":"astromkey"}</code> || <code>attribute == "astromkey"</code> || Применимый || Атрибут имеет строковый тип и одинаковое значение.
| |
| |-
| |
| | <code>{"attribute":"astromkey"}</code> || <code>attribute == "astromkey"</code> || Непригодный || Строгое равенство чувствительно к регистру.
| |
| |-
| |
| | <code>{"attribute":"1"}</code> || <code>attribute == 1</code> || Непригодный || Атрибуты имеют различные типы данных.
| |
| |-
| |
| | <code>{"attribute":"1.0"}</code> || <code>attribute == 1</code> || Применимый || Числа с плавающей запятой можно сравнивать с целыми числами, если их десятичная часть равна 0.
| |
| |-
| |
| | <code>{"attribute":["Java", "DOCKER", "k8s"]}</code> || <code>attribute == "Java"</code> || Непригодный || Атрибуты имеют разные типы данных.
| |
| |}
| |
|
| |
| == Группировка ==
| |
|
| |
| Условную группировку можно создать с помощью скобок <code>( )</code>.
| |
|
| |
| <pre>matchesValue(process.technology, "nginx") and (matchesPhrase(content, "error") or matchesPhrase(content, "warn"))</pre>
| |
|
| |
| = Повторное использование выражений =
| |
|
| |
| Все выражения сопоставления, используемые в событиях логирования, метриках, обработке или конфигурациях сегментов, являются допустимыми '''DQL'''-выражениями. Это означает, что вы также можете использовать эти выражения вместе с командой '''DQL'''-фильтра, например, в средстве просмотра логов.
| |