DQL в логах: различия между версиями

Материал из Документация Ключ-АСТРОМ
Полностью удалено содержимое страницы
 
Строка 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'''-фильтра, например, в средстве просмотра логов.

Текущая версия от 17:20, 22 октября 2026