Размещение поглощаемой точки данных: различия между версиями

Материал из Документация Ключ-АСТРОМ
(Новая страница: «Выражения метрик позволяют использовать простые арифметические операции прямо в селек...»)
 
Строка 1: Строка 1:
Выражения метрик позволяют использовать простые арифметические операции прямо в селекторе метрик.
Отправляет пользовательские точки данных в Ключ-ААСТРОМ.


Например, это выражение вычисляет соотношение (в процентах) двух показателей:
Предоставленные точки данных должны соответствовать протоколу приема метрик. Вам не нужно сначала регистрировать метрику. После того, как Ключ-АСТРОМ приняла и обработала данные, вы можете использовать их так же, как и любые другие показатели в Ключ-АСТРОМ, например, в диаграммах или событиях показателей. Вы также можете предоставить метаданные для введенной метрики через API настроек.
<code>metric1 / metric2 * 100</code>
В качестве операндов выражения можно использовать метрики или числа.


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


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


* Селектор должен содержать хотя бы один ключ метрики.
* Обозреватель данных
* Вы можете запрашивать точки данных до 10 метрик в одном запросе.
* ПОЛУЧИТЬ запрос точек данных метрики из API Metric v2.


Для целей этого ограничения одно выражение (например, <code>metric2 + metric2</code>) считается одной метрикой.
Запрос потребляет <code>text/plain</code>полезную нагрузку. Полезная нагрузка ограничена <code>1,000</code>строками.
{| class="wikitable"
| rowspan="3" |POST
|Managed
|<code><nowiki>https://{your-domain}/e/{your-environment-id}/api/v2/metrics/ingest</nowiki></code>
|-
|SaaS
|<code><nowiki>https://{your-environment-id}.live.ruscomtech.ru/api/v2/metrics/ingest</nowiki></code>
|-
|Окружающая среда АктивногоШлюза
|<code><nowiki>https://{your-activegate-domain}/e/{your-environment-id}/api/v2/metrics/ingest</nowiki></code>
|}


== Приоритет ==
== Аутентификация ==
Применяются стандартные правила математического приоритета:
Чтобы выполнить этот запрос, вам нужен токен доступа с областью действия Ingest metrics (<code>metrics.ingest</code>). Чтобы узнать, как получить и использовать его, см. раздел [[Токены и аутентификация (API)|Токены и аутентификация]].


# Скобки, метрические преобразования
== Параметры ==
# Отрицание
{| class="wikitable"
# Умножение, деление
!Параметр
# Сложение, вычитание
!Тип
!Описание
!In
!Необходимость
|-
|body
|string
|Точки данных, указанные в линейном протоколе. Каждая строка представляет одну точку данных.
|body
|требуется
|}


== Агрегация ==
=== Запрос объектов тела ===
Если агрегация была применена в цепочке преобразования, используется эта агрегация. Если преобразование не применялось, используется агрегация по умолчанию. Ваши метрические операнды могут быть разных агрегатов. Например, <code>metric:max - metric:min</code>.


== Разрешение выражений ==
==== Объект <code>RequestBody</code> ====
Метрические выражения разрешаются следующим образом:
Объект не предоставляет никаких параметров.


# Сформируйте пары кортежей для каждой пары метрик.
== Ответ ==
# Выровняйте точки данных в каждом кортеже.
# Примените арифметическую операцию к выровненным точкам данных.


=== Кортежи ===
=== Коды ответов ===
В арифметических операциях используются точки данных кортежей (уникальные комбинации метрика-измерение-значение измерения) метрик. Идентичные кортежи каждой метрики объединяются в пары, а затем их точки данных выравниваются.
{| class="wikitable"
!Код
!Описание
|-
|202
|Предоставленные точки данных метрики принимаются и будут обрабатываться в фоновом режиме.
|-
|400
|Некоторые точки данных являются недопустимыми. Допустимые точки данных принимаются и будут обрабатываться в фоновом режиме.
|}


Если одна метрика является безразмерной (имеет только один кортеж без измерений и значений измерений), то этот единственный кортеж сопоставляется с каждым кортежем других метрик. То же самое относится и к числам.
== Пример ==
 
<code>curl</code>С помощью этой команды вы будете использовать метрику, назначенную измерению.<code>cpu.temperatureHOST-06F288EE2A930951</code>
Непарные кортежи игнорируются выражением и не представлены в результате.
  <code>curl -L -X POST '<nowiki>https://mySampleEnv.live.ruscomtech.ru.com/api/v2/metrics/ingest'</nowiki> \
 
  -H 'Authorization: Api-Token dt0c01.abc123.abcdefjhij1234567890' \
=== Точки данных ===
  -H 'Content-Type: text/plain' \
После формирования пар кортежей точки данных выравниваются, а затем к выровненным точкам данных применяется желаемая арифметическая операция.
  --data-raw 'cpu.temperature,dt.entity.host=HOST-06F288EE2A930951,cpu=1 55'</code>
 
* Если какая-либо из выровненных точек данных равна <code>null</code>, выражение преобразуется в <code>null</code>.
* Если в операции задействовано число, оно выравнивается с каждой точкой данных метрического операнда.
* Если одна метрика представляет собой одну точку данных, а другая представляет собой ряд, одна точка данных выравнивается с каждой точкой данных ряда.
* Если обе метрики представляют собой одну точку данных, точки данных выравниваются, и результирующий временной интервал охватывает обе точки данных.
* Если обе метрики являются сериями, точки данных выравниваются по отметкам времени.
 
Для любых невыровненных точек данных выражение разрешается в <code>null</code>.
 
== Лучшие практики ==
 
=== Используйте только при необходимости ===
Используйте метрическое выражение только в том случае, если вы не можете достичь своей цели без него. Допустим, вы хотите рассчитать среднее использование ЦП двумя хостами <code>HOST-001</code>и <code>HOST-002</code>. Вы можете сделать это с помощью метрического выражения:
<code>(
    builtin:host.cpu.usage:filter(eq("dt.entity.host","HOST-001")):splitBy()
    +
    builtin:host.cpu.usage:filter(eq("dt.entity.host","HOST-002")):splitBy()
)
/2</code>
При таком подходе есть две проблемы. Во-первых, выражение трудно читать и, следовательно, подвержено синтаксическим ошибкам. Во-вторых, если один из хостов находится в автономном режиме, результат выражения будет пустым. Несмотря на то, что вторая проблема может быть решена с помощью преобразования по умолчанию , использование средней агрегации более эффективно:
  <code>builtin:host.cpu.usage
:filter(
    or(
        eq("dt.entity.host","HOST-001"),
        eq("dt.entity.host","HOST-002")
    )
)
:splitBy()
:avg</code>
 
=== Не конвертировать единицы ===
Не используйте метрическое выражение для преобразования единиц измерения данных. Вместо этого используйте преобразование toUnit . Единственным исключением из этого правила являются устройства, которые Dynatrace не поддерживает. Используйте запрос GET для всех единиц , чтобы получить список поддерживаемых единиц.
 
=== Ограничить использование преобразований ===
Всегда применяйте предельное преобразование к результату вычисления, а не к его операндам.
 
Рассмотрим следующий запрос, который пытается добавить 10 самых популярных периодов использования ЦП к 10 основным периодам простоя ЦП.
<code>builtin:host.cpu.usage:sort(value(avg,descending)):limit(10)
+
builtin:host.cpu.idle:sort(value(avg,descending)):limit(10)</code>
Если у вас большая среда с сотнями хостов, маловероятно, что 10 хостов с максимальной загрузкой ЦП входят в число 10 хостов с наибольшим временем простоя ЦП. У операндов не будет совпадающих кортежей, поэтому результат выражения будет пустым. Решение состоит в том, чтобы вместо этого применить ограничение к результату выражения:
<code>(
    builtin:host.cpu.usage
    +
    builtin:host.cpu.idle
)
:sort(value(auto,descending))
:limit(10)</code>
 
=== Закройте пробелы в данных с помощью преобразования по умолчанию ===
Преобразование по умолчанию особенно ценно для метрических выражений . Хотя обычно преобразование не заполняет <code>null</code>точки данных, если метрика не имеет ни одной точки данных во временном интервале запроса, в контексте выражения метрики ее семантика немного отличается. Пока метрика с обеих сторон выражения имеет хотя бы одну точку данных, преобразование заполнит пробелы. Однако если во всех метриках в выражении отсутствуют данные, преобразование вернет пустые результаты.
 
Рассмотрим этот пример выражения соотношения, где мы вычисляем коэффициент ошибок для ключевых действий пользователя:
<code>builtin:apps.other.keyUserActions.reportedErrorCount.os
/
builtin:apps.other.keyUserActions.requestCount.os</code>
Если запросов много, но ни одной ошибки на вашем таймфрейме, результат будет пустым, хотя коэффициент ошибок <code>0</code>был бы более значимым. Вы можете добиться этого с помощью <code>default(0)</code>преобразования:
<code>builtin:apps.other.keyUserActions.reportedErrorCount.os:default(0)
/
builtin:apps.other.keyUserActions.requestCount.os</code>
 
== Примеры ==
Пример 1. Построение метрики соотношения
 
С помощью метрического выражения вы можете создавать свои собственные метрики соотношения. Предположим, мы начнем со следующих показателей:
 
* встроенный:service.errors.total.count показывает количество ошибок любого типа в службе
* встроенный:service.errors.server.successCount показывает количество вызовов без ошибок на стороне сервера
 
Из них мы можем построить метрику коэффициента ошибок:
<code>builtin:service.errors.total.count:value:default(0)
/
(
    builtin:service.errors.total.successCount:value:default(0)
    +
    builtin:service.errors.total.count:value:default(0)
  )</code>
Преобразование по умолчанию используется для замены значений временных интервалов, имеющих значение <code>null</code>0.
<code>{
  "totalCount": 3,
  "nextPageKey": null,
  "result": [
    {
      "metricId": "builtin:service.errors.total.count",
      "data": [
        {
          "dimensions": ["SERVICE-B82BFBCB4E264A98"],
          "dimensionMap": {
            "dt.entity.service": "SERVICE-B82BFBCB4E264A98"
          },
          "timestamps": [1619913600000, 1620086400000, 1620259200000],
          "values": [48763, 81283, 80798]
        },
        {
          "dimensions": ["SERVICE-BE8B6928C46204B5"],
          "dimensionMap": {
            "dt.entity.service": "SERVICE-BE8B6928C46204B5"
          },
          "timestamps": [1619913600000, 1620086400000, 1620259200000],
          "values": [1096, 1124, 1095]
        }
      ]
    }
  ]
  }</code>
Пример 2. Вклад одного сервиса в общее количество ошибок
 
Встроенная метрика :service.errors.total.count показывает количество ошибок в ваших службах. Список может быть длинным, и вас может заинтересовать вклад каждой службы в количество ошибок. Эту информацию может предоставить комбинация метрических преобразований и метрических выражений.
 
Вам нужны эти преобразования:
 
* преобразования фильтра , чтобы получить количество ошибок для проверяемой службы.
* разделить путем преобразования, чтобы объединить отдельные счетчики ошибок каждой службы в один.
 
Затем используйте это выражение:
<code>builtin:service.errors.total.count:filter(eq("dt.entity.service","SERVICE-B82BFBCB4E264A98")):value:default(0)
/
  builtin:service.errors.total.count:splitBy():value:default(0) * 100</code>
Преобразование по умолчанию используется для замены значений временных интервалов, имеющих значение <code>null</code>0.
<code>{
  "totalCount": 1,
  "nextPageKey": null,
  "result": [
    {
      "metricId": "builtin:service.errors.total.count:filter(eq(\"dt.entity.service\",SERVICE-B82BFBCB4E264A98))",
      "data": [
        {
          "dimensions": ["SERVICE-B82BFBCB4E264A98"],
          "dimensionMap": {
            "dt.entity.service": "SERVICE-B82BFBCB4E264A98"
          },
          "timestamps": [1619913600000, 1620086400000, 1620259200000],
          "values": [48763, 81283, 80798]
        }
      ]
    }
  ]
}</code>
Пример 3. Средняя продолжительность GC
 
Встроенная метрика : tech.jvm.memory.gc.collectionTime показывает общую продолжительность всех сборок мусора во временном интервале. Информация об отдельных сборках мусора недоступна, но мы можем использовать встроенную метрику: tech.jvm.memory.pool.collectionCount , показывающую количество сборок мусора за раз, чтобы получить среднюю продолжительность сборки мусора.
 
Прежде чем мы начнем расчет, нам нужно выровнять измерения обеих метрик. Для этого нам нужно применить разделение по преобразованию с <code>dt.entity.process_group_instance</code>аргументом к встроенной метрике: tech.jvm.memory.pool.collectionCount .
 
Кроме того, мы можем отсортировать результат в порядке убывания, применив преобразование сортировки . Выражение выглядит так:
<code>(
builtin:tech.jvm.memory.gc.collectionTime
/
builtin:tech.jvm.memory.pool.collectionCount:splitBy("dt.entity.process_group_instance")
):sort(value(max,descending))</code>
 
<code>{
  "totalCount": 3,
  "nextPageKey": null,
  "result": [
    {
      "metricId": "builtin:tech.jvm.memory.gc.collectionTime",
      "data": [
        {
          "dimensions": ["PROCESS_GROUP_INSTANCE-18A5241823ABC769"],
          "dimensionMap": {
            "dt.entity.process_group_instance": "PROCESS_GROUP_INSTANCE-18A5241823ABC769"
          },
          "timestamps": [1619913600000, 1620086400000, 1620259200000],
          "values": [164670, 171630, 163044]
        },
        {
          "dimensions": ["PROCESS_GROUP_INSTANCE-92605BB8AE962F1C"],
          "dimensionMap": {
            "dt.entity.process_group_instance": "PROCESS_GROUP_INSTANCE-92605BB8AE962F1C"
          },
          "timestamps": [1619913600000, 1620086400000, 1620259200000],
          "values": [6883411, 5977311, 6356225]
        },
        {
          "dimensions": ["PROCESS_GROUP_INSTANCE-4285F2EF6B79E8A9"],
          "dimensionMap": {
            "dt.entity.process_group_instance": "PROCESS_GROUP_INSTANCE-4285F2EF6B79E8A9"
          },
          "timestamps": [1619913600000, 1620086400000, 1620259200000],
          "values": [163368, 162924, 170502]
        }
      ]
    }
  ]
}</code>

Версия 13:53, 10 октября 2022

Отправляет пользовательские точки данных в Ключ-ААСТРОМ.

Предоставленные точки данных должны соответствовать протоколу приема метрик. Вам не нужно сначала регистрировать метрику. После того, как Ключ-АСТРОМ приняла и обработала данные, вы можете использовать их так же, как и любые другие показатели в Ключ-АСТРОМ, например, в диаграммах или событиях показателей. Вы также можете предоставить метаданные для введенной метрики через API настроек.

Предпочитаете использовать метрики прямо на хосте?

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

  • Обозреватель данных
  • ПОЛУЧИТЬ запрос точек данных метрики из API Metric v2.

Запрос потребляет text/plainполезную нагрузку. Полезная нагрузка ограничена 1,000строками.

POST Managed https://{your-domain}/e/{your-environment-id}/api/v2/metrics/ingest
SaaS https://{your-environment-id}.live.ruscomtech.ru/api/v2/metrics/ingest
Окружающая среда АктивногоШлюза https://{your-activegate-domain}/e/{your-environment-id}/api/v2/metrics/ingest

Аутентификация

Чтобы выполнить этот запрос, вам нужен токен доступа с областью действия Ingest metrics (metrics.ingest). Чтобы узнать, как получить и использовать его, см. раздел Токены и аутентификация.

Параметры

Параметр Тип Описание In Необходимость
body string Точки данных, указанные в линейном протоколе. Каждая строка представляет одну точку данных. body требуется

Запрос объектов тела

Объект RequestBody

Объект не предоставляет никаких параметров.

Ответ

Коды ответов

Код Описание
202 Предоставленные точки данных метрики принимаются и будут обрабатываться в фоновом режиме.
400 Некоторые точки данных являются недопустимыми. Допустимые точки данных принимаются и будут обрабатываться в фоновом режиме.

Пример

curlС помощью этой команды вы будете использовать метрику, назначенную измерению.cpu.temperatureHOST-06F288EE2A930951

curl -L -X POST 'https://mySampleEnv.live.ruscomtech.ru.com/api/v2/metrics/ingest' \
-H 'Authorization: Api-Token dt0c01.abc123.abcdefjhij1234567890' \
-H 'Content-Type: text/plain' \
--data-raw 'cpu.temperature,dt.entity.host=HOST-06F288EE2A930951,cpu=1 55'