Расширенный режим Визуализации метрик: различия между версиями

Материал из Документация Ключ-АСТРОМ
Строка 144: Строка 144:
# При отключенном '''расширенном режиме''' выберите метрики, агрегации и фильтры.  [[Файл:13.png|граница]]
# При отключенном '''расширенном режиме''' выберите метрики, агрегации и фильтры.  [[Файл:13.png|граница]]
# Включив '''расширенный режим''', просмотрите код запроса.  [[Файл:15.png|граница]]
# Включив '''расширенный режим''', просмотрите код запроса.  [[Файл:15.png|граница]]
# Скопируйте и вставьте содержимое поля редактирования '''B''' в поле редактирования '''A''' , объединив два запроса с добавлением скобок и знака деления, а затем удалите '''B'''. Если '''A''' — первый операнд:  <code>builtin:apps.web.action.countOfErrors:filter(and(or(in("dt.entity.application_method",entitySelector("type(application_method),entityName.equals(~"loading of page /easytravel/home~")"))))):splitBy():sum:auto:sort(value(sum,descending)):limit(20)</code> а '''B''' — второй операнд:  <code>builtin:apps.web.action.count.load.browser:filter(and(or(in("dt.entity.application_method",entitySelector("type(application_method),entityName.equals(~"loading of page /easytravel/home~")"))))):splitBy():sum:auto:sort(value(sum,descending)):limit(20)</code> мы хотим разделить <code>(A)/(B)</code>:  <code>((builtin:apps.web.action.countOfErrors:filter(and(or(in("dt.entity.application_method",entitySelector("type(application_method),entityName.equals(~"loading of page /easytravel/home~")"))))):splitBy():sum:auto:sort(value(sum,descending)):limit(20))</code> <code>/</code> <code>(builtin:apps.web.action.count.load.browser:filter(and(or(in("dt.entity.application_method",entitySelector("type(application_method),entityName.equals(~"loading of page /easytravel/home~")"))))):splitBy():sum:auto:sort(value(sum,descending)):limit(20))</code>
# Скопируйте и вставьте содержимое поля редактирования '''B''' в поле редактирования '''A''' , объединив два запроса с добавлением скобок и знака деления, а затем удалите '''B'''.   Если '''A''' — первый операнд:  <code>builtin:apps.web.action.countOfErrors:filter(and(or(in("dt.entity.application_method",entitySelector("type(application_method),entityName.equals(~"loading of page /easytravel/home~")"))))):splitBy():sum:auto:sort(value(sum,descending)):limit(20)</code>   а '''B''' — второй операнд:  <code>builtin:apps.web.action.count.load.browser:filter(and(or(in("dt.entity.application_method",entitySelector("type(application_method),entityName.equals(~"loading of page /easytravel/home~")"))))):splitBy():sum:auto:sort(value(sum,descending)):limit(20)</code>   мы хотим разделить <code>(A)/(B)</code>:  <code>((builtin:apps.web.action.countOfErrors:filter(and(or(in("dt.entity.application_method",entitySelector("type(application_method),entityName.equals(~"loading of page /easytravel/home~")"))))):splitBy():sum:auto:sort(value(sum,descending)):limit(20))</code>   <code>/</code>   <code>(builtin:apps.web.action.count.load.browser:filter(and(or(in("dt.entity.application_method",entitySelector("type(application_method),entityName.equals(~"loading of page /easytravel/home~")"))))):splitBy():sum:auto:sort(value(sum,descending)):limit(20))</code>
# Результат должен быть примерно таким:
# Результат должен быть примерно таким: [[Файл:16.png|граница]]
# Выполните запрос.
# Нажмите на кнопку '''Запуск запроса'''.


Теперь вы можете добавлять пороговые значения и закреплять запрос на панели мониторинга.
Теперь вы можете добавлять пороговые значения и закреплять запрос на дашборде.
 
== Пример: сравнение показателя с предыдущим таймфреймом ==
Узнайте, как добавлять контекст к вашим визуализациям, например, к линейным диаграммам, чтобы ответить на вопрос: «Что считается нормой?»
 
При просмотре данных на панелях мониторинга линии или отдельные значения сами по себе часто бесполезны, особенно для новых пользователей, которым может не хватать знаний и опыта, чтобы быстро оценить, можно ли считать аномалией пик на линейной диаграмме или определенное число. Добавление контекста к визуализациям может сыграть решающую роль в обеспечении лучшей и более быстрой интерпретации.
 
В этом примере мы узнаем, как дублировать вашу метрику, а затем применить преобразование <code>:timeshift</code>, чтобы добавить контекст к вашим линейным графикам. Мы начнем с <code>builtin:apps.web.largestContentfulPaint.load.browser</code>, встроенной метрики [https://web.dev/articles/vitals?hl=ru#core-web-vitals '''''Core web vitals'''''] , которая обеспечивает самые большие измерения отрисовки контента для всех действий по загрузке для всех ваших веб-приложений.
 
Мы можем создать этот запрос, практически ничего не добавляя
 
# При отключенном '''расширенном режиме''' выберите метрику, разделения, агрегации и фильтры.
# Дублируйте метрику, выбрав '''Дополнительно ( … ) > Дублировать''' для этой строки.
# Включите '''расширенный режим''' , чтобы просмотреть код запроса.
# Добавьте сдвиг по времени (-1w) в конце второго '''(B)''' запроса.
# Нажмите на кнопку '''Запуск запроса'''.
 
Окончательный код запроса для '''A''' и '''B''' должен выглядеть примерно так (в зависимости от вашего выбора на шаге 1):
 
'''А''' без сдвига во времени:
 
<code>builtin:apps.web.largestContentfulPaint.load.browser:splitBy():percentile(75):auto:sort(value(percentile(75),descending)):limit(10)</code>
 
'''B''' с применением сдвига во времени:
 
<code>builtin:apps.web.largestContentfulPaint.load.browser:timeshift(-1w):splitBy():percentile(75):auto:sort(value(percentile(75),descending)):limit(10)</code>
 
== Пример: Фильтры отношений ==
Узнайте, как использовать [[Селектор объектов|'''''селектор объектов''''']] и связи для фильтрации метрики по значениям связанного объекта.
 
В этом примере мы:
 
* Начнем с метрики <code>builtin:cloud.kubernetes.node.cores</code>
* Применим <code>in</code> фильтр для узлов Kubernetes, например <code>dt.entity.kubernetes_node</code>
* Используем селектор объектов для проверки всех узлов Kubernetes, работающих в заданном кластере Kubernetes.
 
Давайте разберем селектор объектов по его компонентам, чтобы лучше их объяснить, прежде чем рассматривать окончательный запрос:
 
* <code>type(KUBERNETES_NODE)</code> определяет тип искомого объекта.
* <code>toRelationships.IS_KUBERNETES_CLUSTER_OF_NODE(</code> определяет связь между узлом (левая часть) и кластером (правая часть; см. ниже). Помните, нам нужны все узлы Kubernetes в данном кластере, поэтому это можно интерпретировать следующим образом: «из объекта, который я определил ранее (узел Kubernetes), я ищу все кластеры Kubernetes этого узла».
* <code>type(KUBERNETES_CLUSTER),entityId(KUBERNETES_CLUSTER-A943C5CF0A41A684))")))</code> определяет объект правой стороны этого отношения как кластер Kubernetes и заданный идентификатор объекта.
 
Окончательный запрос выглядит так:
 
<code>(builtin:cloud.kubernetes.node.cores:avg)</code>
 
<code>:filter(in("dt.entity.kubernetes_node",</code>
 
<code>entitySelector("type(KUBERNETES_NODE),toRelationships.IS_KUBERNETES_CLUSTER_OF_NODE(type(KUBERNETES_CLUSTER),entityId(KUBERNETES_CLUSTER-A943C5CF0A41A684))")))</code>

Версия 07:46, 30 июля 2024

(API Кластера v2)

Чтобы в полной мере использовать возможности запросов API Кластера v2 из веб-интерфейса Ключ-АСТРОМ, используйте Визуализацию метрик в расширенном режиме.

В расширенном режиме вы можете:

  • Проверить и отредактировать запрос, созданный вами с помощью параметров веб-интерфейса Ключ-АСТРОМ (при отключенном расширенном режиме).
  • Использовать селекторы метрик для применения преобразований, которые в противном случае невозможны. Например, сдвиги таймфреймов.
  • Использовать метрические выражения для создания простых арифметических операций с несколькими различными метрическими значениями. Например, metric A+ metric B.
  • Работать с селекторами объектов, чтобы применять более сложные фильтры к вашим метрикам. Например, чтобы отфильтровать метрику узла Kubernetes для определенного кластера Kubernetes.

Включить расширенный режим

Вы можете начать создавать простой запрос через веб-интерфейс, а затем включить расширенный режим , чтобы увидеть базовый запрос.

Например, если вы начнете с этого запроса при отключенном расширенном режиме:

Image12уйыа.png

Вы увидите это, когда включите расширенный режим:

Расширенный режим.png

Базовый код запроса отображается в том виде, в котором он передается в Metrics API v2:

builtin:host.cpu.usage:splitBy("dt.entity.host"):avg:auto:sort(value(avg,descending)):limit(20)

Отключить расширенный режим

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

  • Разделить по измерениям метрики (если вы не добавили никаких дополнительных измерений через селектор сущностей в расширенном режиме)
  • Фильтровать , по принципу действия ИЛИ
  • Сортировать по
  • Ограничение

Подробное описание отдельных преобразований см. в разделе Селектор показателей.

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

Например, если вы изначально применили преобразование сортировки с выключенным расширенным режимом, вы можете изменить порядок сортировки с ascending на descending с включенным расширенным режимом, а затем снова выключить расширенный режим. Однако после добавления новых частей в запрос — например, путем добавления преобразований, таких как сдвиг во времени или метрические выражения, которые пока невозможны при выключенном расширенном режиме — вы не сможете снова выключить расширенный режим и продолжить работу.

Редактировать запрос

Основные функции редактора запросов одинаковы независимо от того, включен ли расширенный режим :

  • Чтобы добавить метрику, нажмите кнопку Добавить метрику , чтобы добавить строку (еще одну метрику) в запрос.
  • Чтобы продублировать метрику, выберите Дополнительно ( … ) > Дублировать , чтобы продублировать эту строку (метрику).
  • Чтобы удалить метрику, выберите Дополнительно ( … ) > Удалить в строке, чтобы удалить эту строку (метрику).
  • Чтобы изменить порядок метрик, выберите и перетащите метрику на новую позицию в списке метрик. Повторно запустите запрос, чтобы увидеть изменения. Image8з.png Порядок, в котором метрики перечислены в вашем запросе, влияет на следующее:
    • Порядок, в котором отображаются элементы рисунка: метрики запроса отображаются сверху вниз, поэтому последняя отображается поверх остальных.
    • Порядок столбцов в визуализации таблицы
    • Порядок отображения настроек на панели настроек
  • Чтобы посмотреть на запрос, нажмите на кнопку Запуск запроса. Текст рядом с кнопкой Запуск запроса отображает статус последнего запуска.

Основное отличие заключается в способе редактирования запроса и количестве доступных вариантов:

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

Добавить метрику

Самый простой способ выбрать метрики для запроса — начать с выключенного расширенного режима.

  1. Наведите указатель/курсор в строку и начните вводить название метрики. Соответствующие метрики перечислены. Например, введите cpu usage и выберите builtin:host.cpu.usageиз списка. Imageссмчм.png
  2. Вы можете выбрать часто применяемые агрегации, измерения и преобразования:
    • Разделить по: выбрать один из перечисленных параметров для выбранной метрики
    • Агрегат: выберите Average, Count, Maximum, Minimum, Sum, Median, Percentile 10th, Percentile 75th или Percentile 90th. Выбранная агрегация применяется после Разделить по. Например, если вы выбираете Percentile 10th и Разделить по Host для метрики калибра, такой как builtin:host.cpu.idle, процентиль рассчитывается по значениям после Разделить по хосту.
    • Сортировать по: выберите по возрастанию или по убыванию
    • Фильтровать: выберите размеры и атрибуты фильтра
    • Ограничение: выберите предельное значение
  3. Включите расширенный режим.
  4. При необходимости отредактируйте результаты.
    • Копируйте и вставляйте из одной строки в другую
    • Добавляйте, дублируйте и удаляйте строки по мере необходимости.

Чтобы добавить метрику в расширенном режиме

  1. Наведите указатель/курсор в строку и начните вводить ключ метрики. Соответствующие метрики перечислены. Например, введите host.cpu и затем выберите builtin:host.cpu.usage из списка. Image1ауф.png
  2. Все преобразования необходимо добавлять вручную.

Изменить метрику

В поле редактирования:

  • Введите двоеточие (:), чтобы увидеть, что можно добавить в этой точке вставки, а затем выберите из списка.
  • Нажмите Shift-Enter, чтобы принудительно перейти на новую строку. Это может быть полезно для удобства чтения и не влияет на оценку запроса.
  • Выберите показатель или число и нажмите ( на клавиатуре, чтобы заключить выбранное значение в скобки.

Подробнее о метриках

Операнды

Операнд — это метрика или число.

  • Каждый операнд должен быть заключен в скобки (). Вы также можете использовать скобки для обеспечения приоритета.
  • Все метрики, включающие в себя более одной точки данных, должны иметь одинаковое разрешение.
  • В качестве операнда можно использовать любую метрику, включая метрики, измененные любым селектором метрик, а также можно применять преобразования к результату выражения.

Выражения

Метрические выражения позволяют применять простые арифметические операции к операндам (метрикам или числам).

Например, это выражение вычисляет соотношение (в процентах) двух метрик:

((metric1)/(metric2))*(100)

Основываясь на приведенном выше примере, у нас есть следующие основные компоненты для работы:

  • Операнд: метрика или число
  • Круглые скобки:()
  • Арифметические операторы: +, -, *,/
  • Отрицание:-()

Арифметические операции используют точки данных кортежей (уникальные комбинации метрика—измерение—значение измерения) метрик. Идентичные кортежи каждой метрики объединяются в пары, а затем их точки данных выравниваются. Подробности см. в Выражение метрик.

Пример: дельта

Узнайте, как:

  • Создать метрику в расширенном режиме
  • Использовать дельту

В этом примере показано, как преобразовать метрику калибровки в метрику дельта-счетчика.

  1. При включенном расширенном режиме мы собрали следующую метрику , builtin:cloud.kubernetes.pod.containerRestarts:splitBy() выполнив следующую серию выборов из вариантов, предлагаемых в редакторе: Выберите метрику: вводите часть ключа метрики, пока не увидите метрику, которую хотите выбрать. 7.png Выберите splitBy (Разделить по): введите двоеточие (:), а затем часть строки поиска того, что вы хотите добавить (в данном случае splitBy), затем выберите его из списка. 8.png Промежуточное состояние: 9.png builtin:cloud.kubernetes.pod.containerRestarts:splitBy()
  2. Но мы решили, что хотим отобразить это как показатель дельта-счета. Выберите avg (Среднее): введите двоеточие (:), а затем часть строки поиска для avg, затем выберите его из списка. 10.png Выберите дельту: введите двоеточие (:), а затем часть строки поиска для delta, затем выберите ее из списка. 11.png Конечное состояние: 12.png builtin:cloud.kubernetes.pod.containerRestarts:splitBy():avg:delta
  3. Запустите запрос

Пример: рассчитать частоту ошибок

Узнайте, как:

  • Объединить две строки в одну с помощью метрического выражения
  • Сделать простой расчет

В этом примере мы хотим отобразить частоту ошибок для страницы конверсии. Мы можем начать с этих метрик:

  • Количество действий (builtin:apps.web.action.count.load.browser)
  • Количество ошибок (builtin:apps.web.action.countOfErrors)

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

Мы можем создать этот запрос, практически ничего не добавляя.

  1. При отключенном расширенном режиме выберите метрики, агрегации и фильтры. 13.png
  2. Включив расширенный режим, просмотрите код запроса. 15.png
  3. Скопируйте и вставьте содержимое поля редактирования B в поле редактирования A , объединив два запроса с добавлением скобок и знака деления, а затем удалите B. Если A — первый операнд: builtin:apps.web.action.countOfErrors:filter(and(or(in("dt.entity.application_method",entitySelector("type(application_method),entityName.equals(~"loading of page /easytravel/home~")"))))):splitBy():sum:auto:sort(value(sum,descending)):limit(20) а B — второй операнд: builtin:apps.web.action.count.load.browser:filter(and(or(in("dt.entity.application_method",entitySelector("type(application_method),entityName.equals(~"loading of page /easytravel/home~")"))))):splitBy():sum:auto:sort(value(sum,descending)):limit(20) мы хотим разделить (A)/(B): ((builtin:apps.web.action.countOfErrors:filter(and(or(in("dt.entity.application_method",entitySelector("type(application_method),entityName.equals(~"loading of page /easytravel/home~")"))))):splitBy():sum:auto:sort(value(sum,descending)):limit(20)) / (builtin:apps.web.action.count.load.browser:filter(and(or(in("dt.entity.application_method",entitySelector("type(application_method),entityName.equals(~"loading of page /easytravel/home~")"))))):splitBy():sum:auto:sort(value(sum,descending)):limit(20))
  4. Результат должен быть примерно таким: 16.png
  5. Нажмите на кнопку Запуск запроса.

Теперь вы можете добавлять пороговые значения и закреплять запрос на дашборде.

Пример: сравнение показателя с предыдущим таймфреймом

Узнайте, как добавлять контекст к вашим визуализациям, например, к линейным диаграммам, чтобы ответить на вопрос: «Что считается нормой?»

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

В этом примере мы узнаем, как дублировать вашу метрику, а затем применить преобразование :timeshift, чтобы добавить контекст к вашим линейным графикам. Мы начнем с builtin:apps.web.largestContentfulPaint.load.browser, встроенной метрики Core web vitals , которая обеспечивает самые большие измерения отрисовки контента для всех действий по загрузке для всех ваших веб-приложений.

Мы можем создать этот запрос, практически ничего не добавляя

  1. При отключенном расширенном режиме выберите метрику, разделения, агрегации и фильтры.
  2. Дублируйте метрику, выбрав Дополнительно ( … ) > Дублировать для этой строки.
  3. Включите расширенный режим , чтобы просмотреть код запроса.
  4. Добавьте сдвиг по времени (-1w) в конце второго (B) запроса.
  5. Нажмите на кнопку Запуск запроса.

Окончательный код запроса для A и B должен выглядеть примерно так (в зависимости от вашего выбора на шаге 1):

А без сдвига во времени:

builtin:apps.web.largestContentfulPaint.load.browser:splitBy():percentile(75):auto:sort(value(percentile(75),descending)):limit(10)

B с применением сдвига во времени:

builtin:apps.web.largestContentfulPaint.load.browser:timeshift(-1w):splitBy():percentile(75):auto:sort(value(percentile(75),descending)):limit(10)

Пример: Фильтры отношений

Узнайте, как использовать селектор объектов и связи для фильтрации метрики по значениям связанного объекта.

В этом примере мы:

  • Начнем с метрики builtin:cloud.kubernetes.node.cores
  • Применим in фильтр для узлов Kubernetes, например dt.entity.kubernetes_node
  • Используем селектор объектов для проверки всех узлов Kubernetes, работающих в заданном кластере Kubernetes.

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

  • type(KUBERNETES_NODE) определяет тип искомого объекта.
  • toRelationships.IS_KUBERNETES_CLUSTER_OF_NODE( определяет связь между узлом (левая часть) и кластером (правая часть; см. ниже). Помните, нам нужны все узлы Kubernetes в данном кластере, поэтому это можно интерпретировать следующим образом: «из объекта, который я определил ранее (узел Kubernetes), я ищу все кластеры Kubernetes этого узла».
  • type(KUBERNETES_CLUSTER),entityId(KUBERNETES_CLUSTER-A943C5CF0A41A684))"))) определяет объект правой стороны этого отношения как кластер Kubernetes и заданный идентификатор объекта.

Окончательный запрос выглядит так:

(builtin:cloud.kubernetes.node.cores:avg)

:filter(in("dt.entity.kubernetes_node",

entitySelector("type(KUBERNETES_NODE),toRelationships.IS_KUBERNETES_CLUSTER_OF_NODE(type(KUBERNETES_CLUSTER),entityId(KUBERNETES_CLUSTER-A943C5CF0A41A684))")))