Открыть меню
Открыть персональное меню
Вы не представились системе
Your IP address will be publicly visible if you make any edits.

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

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


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


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


== Ограничения ==
Вы также можете передавать точки данных напрямую с узла, контролируемого ЕдиногоАгента, в модуль ЕдиныйАгент Extensions Execution Controller (EEC) по защищенному каналу с использованием локальной <code><nowiki>http://localhost</nowiki>:<port>/metrics/ingest</code>конечной точки, которая не требует проверки подлинности токена. Порт по умолчанию <code>14499</code>. При использовании этого метода <code>dt.entity.host=<host-ID></code>к каждой метрике добавляется зарезервированное измерение АппОптима. Дополнительные сведения см. в разделе API метрик ЕдиногоАгента .


* Селектор должен содержать хотя бы один ключ метрики.
Для просмотра точек данных введенной метрики можно использовать:
* Вы можете запрашивать точки данных до 10 метрик в одном запросе.


Для целей этого ограничения одно выражение (например, <code>metric2 + metric2</code>) считается одной метрикой.
* Обозреватель данных
* GET запрос точек данных метрики из API Metric v2.


== Приоритет ==
Запрос использует в качестве полезной нагрузки формат text/plain. Полезная нагрузка ограничена <code>1,000</code>строками.
Применяются стандартные правила математического приоритета:
{| class="wikitable"
| rowspan="2" |POST
|АппОптима
|<code><nowiki>https://{your-domain}/e/{your-environment-id}/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)|Токены и аутентификация]].
# Умножение, деление
# Сложение, вычитание


== Агрегация ==
== Параметры ==
Если агрегация была применена в цепочке преобразования, используется эта агрегация. Если преобразование не применялось, используется агрегация по умолчанию. Ваши метрические операнды могут быть разных агрегатов. Например, <code>metric:max - metric:min</code>.
{| class="wikitable"
!Параметр
!Тип
!Описание
!In
!Необходимость
|-
|body
|string
|Точки данных, указанные в линейном протоколе. Каждая строка представляет одну точку данных.
|body
|требуется
|}


== Разрешение выражений ==
=== Запрос объектов тела ===
Метрические выражения разрешаются следующим образом:


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


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


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


Непарные кортежи игнорируются выражением и не представлены в результате.
== Пример ==
 
<code>curl</code>С помощью этой команды вы будете использовать метрику, назначенную измерению.<code>cpu.temperatureHOST-06F288EE2A930951</code>
=== Точки данных ===
  <curl -L -X POST '<nowiki>https://mySampleEnv.live.ruscomtech.ru/api/v2/metrics/ingest'</nowiki> \
После формирования пар кортежей точки данных выравниваются, а затем к выровненным точкам данных применяется желаемая арифметическая операция.
  -H 'Authorization: Api-Token dt0c01.abc123.abcdefjhij1234567890' \
 
  -H 'Content-Type: text/plain' \
* Если какая-либо из выровненных точек данных равна <code>null</code>, выражение преобразуется в <code>null</code>.
  --data-raw 'cpu.temperature,dt.entity.host=HOST-06F288EE2A930951,cpu=1 55'</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>

Текущая версия от 20:55, 25 декабря 2024

Отправляет пользовательские точки данных в АппОптима.

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

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

Вы также можете передавать точки данных напрямую с узла, контролируемого ЕдиногоАгента, в модуль ЕдиныйАгент Extensions Execution Controller (EEC) по защищенному каналу с использованием локальной http://localhost:<port>/metrics/ingestконечной точки, которая не требует проверки подлинности токена. Порт по умолчанию 14499. При использовании этого метода dt.entity.host=<host-ID>к каждой метрике добавляется зарезервированное измерение АппОптима. Дополнительные сведения см. в разделе API метрик ЕдиногоАгента .

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

  • Обозреватель данных
  • GET запрос точек данных метрики из API Metric v2.

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

POST АппОптима https://{your-domain}/e/{your-environment-id}/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/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'