Селектор показателей

Материал из Документация Ключ-АСТРОМ

Селектор метрик — это мощный инструмент для указания, какие метрики вы хотите прочитать с помощью вызова точек данных метрики GET или на вкладке « Код » проводника данных .

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

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

Ограничения

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

Выберите показатели

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

Преобразования

Выбрав показатель, вы можете применить преобразования к его данным. Синтаксис для этого таков <metricKey>:<transformation1>:<transformation2>:<transformationN>. Строка селектора показателей оценивается слева направо. Каждое последующее преобразование применяется к результату предыдущего преобразования. Например,

builtin:host.cpu.user:sort(value(max,descending)):limit(10)

запрашивает данные для метрики builtin:host.cpu.usage, сортирует результаты по максимальному использованию ЦП и возвращает серию для первых 10 хостов.

Преобразования можно разделить на следующие категории.

Агрегация времени

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

Наилучшее разрешение временного интервала — 1 минута. Разрешение, используемое для агрегирования по времени, зависит от различных факторов (таких как период времени запроса и возраст данных) и может частично контролироваться вами (см. параметр разрешения ).

Предоставляя преобразование агрегации , вы можете указать критерий, по которому ваши данные должны агрегироваться для каждого временного интервала. Тип данных метрики определяет, какие агрегаты доступны. Если вы не предоставляете агрегацию или используете autoагрегацию, применяется агрегация метрики по умолчанию. Вы можете запросить доступные агрегаты и агрегаты по умолчанию для метрики через конечную точку дескриптора метрики (поля aggregationTypes и defaultAggregation ). Чтобы объединить все точки данных ряда в одну точку данных, вы можете использовать преобразование fold .

Например, builtin:host.cpu.usageвозвращает среднее использование ЦП на временной интервал, так как агрегирование по умолчанию builtin:host.cpu.usageявляется средним. Если вместо этого вы хотите получить максимальную загрузку ЦП за временной интервал, вам нужно будет запросить builtin:host.cpu.usage:max. Вы также можете запросить максимальное использование ЦП для каждой серии за весь период запроса, используя builtin:host.cpu.usage:fold(max).

Агрегация пространства

Используя пространственное агрегирование, вы можете разделить серию вашей метрики в соответствии с интересующими вас измерениями. Например, если вы хотите получить среднее использование ЦП по всем хостам, вы можете объединить все серии разных хостов в один серия с использованием splitBy : builtin:host.cpu.usage:splitBy(). Более того, вы можете явно указать, по каким измерениям должен предоставляться ряд, передав их в качестве параметров функции splitBy (например, :splitBy("hostname","availability-zone")).

Фильтрация

Преобразования фильтров позволяют просеивать данные в соответствии с интересующими вас критериями. Например, builtin:host.cpu.usage:filter(eq("dt.entity.host","HOST-1234567"))возвращает только ряд данных об использовании ЦП для хоста HOST-1234567. Кроме того, вы можете фильтровать ряды в соответствии с заданными пороговыми значениями (подробности см. В seriesусловии ). В сочетании с агрегацией пространства также возможны мощные запросы, такие как определение максимального количества pod для выделенного кластера k8s, разделенного облачным приложением : builtin:kubernetes.pods:filter(eq("k8s.cluster.name","<clusterName>")):splitBy("dt.entity.cloud_application"):max.

Специфика объекта

Селектор метрик имеет тесную интеграцию с отслеживаемыми объектами . Например, вы можете встроить селектор сущностей непосредственно в свой запрос: <metricKey>:filter(in("dt.entity.<key>",entitySelector("<entitySelector>"))). Кроме того, вы можете добавить отображаемые имена значений измерений сущности в качестве выделенных измерений в результат запроса, используя преобразование имен .

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

Преобразование агрегации

Синтаксис :<aggregation>
Аргумент Желаемая совокупность.

Задает агрегирование возвращаемых точек данных. Доступны следующие типы агрегации:

Агрегация Примечания
auto Применяет агрегацию по умолчанию. Чтобы проверить агрегацию по умолчанию, запросите метрику с помощью вызова дескрипторов метрики GET и проверьте поле defaultAggregation .
min Выбирает наименьшее значение из временного интервала. Все nullзначения игнорируются.
max Выбирает наибольшее значение из временного интервала. Все nullзначения игнорируются.
avg Вычисляет среднее арифметическое всех значений временного интервала. Все nullзначения игнорируются.
summ Суммирует все значения временного интервала. Все nullзначения игнорируются.
value Принимает одно значение как есть. Применимо только к ранее агрегированным значениям и метрикам, поддерживающим valueагрегирование.
count Подсчитывает значения во временном интервале. Все nullзначения игнорируются.
percentile ( N) Вычисляет N -й процентиль, где N находится между 0и 100(включительно).

Пример синтаксиса

:percentile(99.9)

Преобразование по умолчанию

Синтаксис :default(<number>)
Аргумент Число с плавающей запятой для замены nullзначений в результате

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

Пример

До преобразования по умолчанию

{
  "totalCount": 1,
  "nextPageKey": null,
  "result": [
    {
      "metricId": "builtin:tech.jvm.memory.pool.collectionCount",
      "data": [
        {
          "dimensions": [
            "PROCESS_GROUP_INSTANCE-A02ED607B5E9DD20",
            "30382",
            "G1 Old Gen",
            "G1 Old Generation"
          ],
          "dimensionMap": {
            "poolname": "G1 Old Gen",
            "rx_pid": "30382",
            "gcname": "G1 Old Generation",
            "dt.entity.process_group_instance": "PROCESS_GROUP_INSTANCE-A02ED607B5E9DD20"
          },
          "timestamps": [1623585600000, 1623628800000, 1623672000000, 1623715200000],
          "values": [3, null, null, 1]
        }
      ]
    }
  ]
}

После преобразования по умолчанию:

{
  "totalCount": 1,
  "nextPageKey": null,
  "result": [
    {
      "metricId": "builtin:tech.jvm.memory.pool.collectionCount:default(0)",
      "data": [
        {
          "dimensions": [
            "PROCESS_GROUP_INSTANCE-A02ED607B5E9DD20",
            "30382",
            "G1 Old Gen",
            "G1 Old Generation"
          ],
          "dimensionMap": {
            "poolname": "G1 Old Gen",
            "rx_pid": "30382",
            "gcname": "G1 Old Generation",
            "dt.entity.process_group_instance": "PROCESS_GROUP_INSTANCE-A02ED607B5E9DD20"
          },
          "timestamps": [1623585600000, 1623628800000, 1623672000000, 1623715200000],
          "values": [3, 0, 0, 1]
        }
      ]
    }
  ]
}

Дельта-преобразование

Синтаксис :delta
Аргумент Нет

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

Перед использованием дельта-преобразования необходимо применить преобразование агрегации .

Пример

До деоьта-трансформации:

{
  "totalCount": 1,
  "nextPageKey": null,
  "result": [
    {
      "metricId": "builtin:service.keyRequest.count.server:value",
      "data": [
        {
          "dimensions": ["SERVICE_METHOD-BD61DD6DAC1EFDE1"],
          "dimensionMap": {
            "dt.entity.service_method": "SERVICE_METHOD-BD61DD6DAC1EFDE1"
          },
          "timestamps": [1630886400000, 1630929600000, 1630972800000, 1631016000000, 1631059200000],
          "values": [8338, 8449, 8343, 8372, 8425]
        }
      ]
    }
  ]
}

После дельта трансформации:

{
  "totalCount": 1,
  "nextPageKey": null,
  "result": [
    {
      "metricId": "builtin:service.keyRequest.count.server:value:delta",
      "data": [
        {
          "dimensions": ["SERVICE_METHOD-BD61DD6DAC1EFDE1"],
          "dimensionMap": {
            "dt.entity.service_method": "SERVICE_METHOD-BD61DD6DAC1EFDE1"
          },
          "timestamps": [1630886400000, 1630929600000, 1630972800000, 1631016000000, 1631059200000],
          "values": [null, 111, 0, 29, 53]
        }
      ]
    }
  ]
}

Трансформация фильтра

Синтаксис :filter(<condition1>,<condition2>,<conditionN>)
Аргумент Список условий фильтрации. Чтобы параметр прошел фильтрацию , он должен соответствовать всем условиям.

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

Условия

Преобразование :filterподдерживает следующие условия.

Синтаксис Описание
prefix("<dimension>","<expected prefix>") Соответствует, если значение указанного измерения начинается с ожидаемого префикса.
eq("<dimension>","<expected value>") Соответствует, если значение указанного измерения равно ожидаемому значению.
ne("<dimension>","<value to be excluded>") Обратное eqусловие. Измерение с указанным именем исключается из ответа.
in("<dimension>",entitySelector("<selector>") Соответствует, если значение указанного измерения равно любому из ожидаемых значений, предоставленных селектором объекта .
existsKey("<dimension>") Соответствует, если указанное измерение существует.
remainder("<dimension>") Соответствует, если указанное измерение является частью остатка .
series(<aggregation>,<operator>(<reference value>)) Ответ содержит только ряды с точками данных, соответствующими предоставленному критерию.

Кавычки ( ") и тильды ( ~), которые являются частью ключа измерения или значения измерения (включая синтаксис селектора объекта), должны быть экранированы с помощью тильды ( ~).

Состояние серии

Условие seriesфильтрует агрегированное по времени значение точек данных для ряда по заданному критерию. То есть применяется указанное агрегирование, а затем этот результат одного значения сравнивается с эталонным значением с использованием указанного оператора.

Например, для series(avg, gt(10))сначала вычисляется среднее значение по всем точкам данных ряда, а затем это значение проверяется, чтобы увидеть, больше ли оно 10. Если ряд не соответствует этому критерию, он удаляется из предоставленного результата. То есть seriesоператор нельзя использовать для фильтрации отдельных точек данных ряда. Чтобы отфильтровать отдельные точки данных, вам нужно использовать преобразование разделов .

Условие поддерживает следующие агрегаты и операторы.

Доступные агрегации
  • min
  • max
  • avg
  • sum
  • median
  • percentile(N), с N в диапазоне 0до 100.
Доступные операторы
  • lt: ниже чем
  • le: ниже или равно
  • eq: равный
  • ne: не равный
  • gt: лучше чем
  • ge: больше или равно

Сложное состояние

Каждое условие может быть комбинацией подусловий.

Синтаксис Описание
and(<subcondition1>,<subcondition2>,<subconditionN>) Все подусловия должны быть выполнены.
or(<subcondition1>,<subcondition2>,<subconditionN>) Должно быть выполнено хотя бы одно подусловие.
not(<subcondition>) Отменяет подусловие. Например, он превращается в « содержит » в «не содержит» .

Примеры синтаксиса

:filter(or(eq("k8s.cluster.name","Server ~"North~""),eq("k8s.cluster.name","Server ~"West~"")))

Отфильтровывает точки данных по данным, доставленным либо сервером «Север» , либо сервером «Запад» .

:filter(and(prefix("App Version","2."),ne("dt.entity.os","OS-472A4A3B41095B09")))

Отфильтровывает точки данных, доставленные приложением основной версии 2 , которое не работает в операционной системе OS-472A4A3B41095B09 .

Трансформация сложения

Синтаксис :fold(<aggregation>)
Аргумент по желанию Ключ-АСТРОМ 1.232+Требуемый метод агрегации .

Свернутое преобразование объединяет список точек данных в одну точку данных. Чтобы получить результат в определенной агрегации, укажите агрегацию в качестве аргумента. Если указанная агрегация не поддерживается, используется агрегация по умолчанию. Например, :fold(median)в датчике метрика равна, :fold(avg)потому что медиана не поддерживается, а по умолчанию используется avg. Если агрегирование уже применялось в цепочке преобразования ранее, аргумент игнорируется.

Пример

До трансформации сложения:

{
  "metricId": "builtin:host.disk.avail",
  "data": [
    {
      "dimensions": ["HOST-BB4DF8969CB41C60", "DISK-FB78447211EE76BF"],
      "dimensionMap": {
        "dt.entity.disk": "DISK-FB78447211EE76BF",
        "dt.entity.host": "HOST-BB4DF8969CB41C60"
      },
      "timestamps": [1612794060000, 1612794120000, 1612794180000],
      "values": [4.605786630826667e11, 4.424691002026667e11, 439596351488]
    }
  ]
}

После трансформации сложения:

{
  "metricId": "builtin:host.disk.avail:fold",
  "data": [
    {
      "dimensions": ["HOST-BB4DF8969CB41C60", "DISK-FB78447211EE76BF"],
      "dimensionMap": {
        "dt.entity.disk": "DISK-FB78447211EE76BF",
        "dt.entity.host": "HOST-BB4DF8969CB41C60"
      },
      "timestamps": [1612794480000],
      "values": [4.577198298453333e11]
    }
  ]
}

Последнее преобразование

Синтаксис :last<aggregation>:lastReal<aggregation>
Аргумент по желанию Ключ-АСТРОМ 1.232+Требуемый метод агрегации .

Последнее преобразование возвращает самую последнюю точку данных из периода времени запроса . Чтобы получить результат в определенной агрегации, укажите агрегацию в качестве аргумента. Если указанная агрегация не поддерживается, используется агрегация по умолчанию. Например, :last(median)в датчике метрика равна, :last(avg)потому что медиана не поддерживается, а по умолчанию используется avg. Если агрегирование уже применялось в цепочке преобразования ранее, аргумент игнорируется.

Если метрика перед преобразованием содержит несколько кортежей (уникальные комбинации метрика — измерение — значение измерения), ко всем кортежам применяется самая последняя метка времени. Чтобы получить фактическую последнюю метку времени, используйте lastRealоператор.

Пример

До последней трансформации:

{
  "totalCount": 3,
  "nextPageKey": null,
  "result": [
    {
      "metricId": "builtin:apps.other.sessionCount.osAndGeo:names:splitBy(\"dt.entity.geolocation.name\")",
      "data": [
        {
          "dimensions": ["Austria"],
          "dimensionMap": {
            "dt.entity.geolocation.name": "Austria"
          },
          "timestamps": [
            1617178800000, 1617180000000, 1617181200000, 1617182400000, 1617183600000, 1617184800000
          ],
          "values": [90, 106, 110, 96, 116, 102]
        },
        {
          "dimensions": ["Switzerland"],
          "dimensionMap": {
            "dt.entity.geolocation.name": "Switzerland"
          },
          "timestamps": [
            1617178800000, 1617180000000, 1617181200000, 1617182400000, 1617183600000, 1617184800000
          ],
          "values": [176, 168, 178, 174, 183, 172]
        },
        {
          "dimensions": ["Germany"],
          "dimensionMap": {
            "dt.entity.geolocation.name": "Germany"
          },
          "timestamps": [
            1617178800000, 1617180000000, 1617181200000, 1617182400000, 1617183600000, 1617184800000
          ],
          "values": [1168, 1121, 1154, 1160, 1108, 1135]
        }
      ]
    }
  ]
}

После последней трансформации:

{
  "totalCount": 3,
  "nextPageKey": null,
  "result": [
    {
      "metricId": "builtin:apps.other.sessionCount.osAndGeo:names:splitBy(\"dt.entity.geolocation.name\"):last",
      "data": [
        {
          "dimensions": ["Austria"],
          "dimensionMap": {
            "dt.entity.geolocation.name": "Austria"
          },
          "timestamps": [1617184800000],
          "values": [102]
        },
        {
          "dimensions": ["Switzerland"],
          "dimensionMap": {
            "dt.entity.geolocation.name": "Switzerland"
          },
          "timestamps": [1617184800000],
          "values": [172]
        },
        {
          "dimensions": ["Germany"],
          "dimensionMap": {
            "dt.entity.geolocation.name": "Germany"
          },
          "timestamps": [1617184800000],
          "values": [1135]
        }
      ]
    }
  ]
}

Предельная трансформация

Синтаксис :limit(2)
Аргумент Максимальное количество записей в результате.

Преобразование предела ограничивает количество записей (уникальных комбинаций метрика-измерение-значение измерения) в ответе. В ответ включаются только первые X записей; остальные отбрасываются.

Чтобы убедиться, что требуемые записи находятся вверху результата, примените преобразование сортировки перед использованием предела.

Пример

До предельной трансформации:

{
  "totalCount": 4,
  "nextPageKey": null,
  "result": [
    {
      "metricId": "builtin:apps.other.sessionCount.osAndGeo:names:splitBy(\"dt.entity.geolocation.name\"):sort(value(sum,descending))",
      "data": [
        {
          "dimensions": ["Austria"],
          "dimensionMap": {
            "dt.entity.geolocation.name": "Austria"
          },
          "timestamps": [1613559180000],
          "values": [6593]
        },
        {
          "dimensions": ["Switzerland"],
          "dimensionMap": {
            "dt.entity.geolocation.name": "Switzerland"
          },
          "timestamps": [1613559180000],
          "values": [1002]
        },
        {
          "dimensions": ["Germany"],
          "dimensionMap": {
            "dt.entity.geolocation.name": "Germany"
          },
          "timestamps": [1613559180000],
          "values": [564]
        }
      ]
    }
  ]
}

После предельной трансформации:

{
  "totalCount": 2,
  "nextPageKey": null,
  "result": [
    {
      "metricId": "builtin:apps.other.sessionCount.osAndGeo:names:splitBy(\"dt.entity.geolocation.name\"):sort(value(sum,descending)):limit(2)",
      "data": [
        {
          "dimensions": ["Austria"],
          "dimensionMap": {
            "dt.entity.geolocation.name": "Austria"
          },
          "timestamps": [1613559180000],
          "values": [6593]
        },
        {
          "dimensions": ["Switzerland"],
          "dimensionMap": {
            "dt.entity.geolocation.name": "Switzerland"
          },
          "timestamps": [1613559180000],
          "values": [1002]
        }
      ]
    }
  ]
}

Трансформация объединения

Синтаксис :merge("<dimension0>","<dimension1>","<dimensionN>")
Аргумент Список параметров , которые необходимо удалить. Измерение должно быть указано его ключом.

Кавычки ( ") и тильды ( ~), являющиеся частью ключа измерения, должны быть экранированы тильдой ( ~).

Преобразование слияния удаляет указанные измерения из результата. Все ряды/значения, имеющие одинаковые размеры после удаления, объединяются в один. Значения пересчитываются в соответствии с выбранной агрегацией.

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

Пример

До трансформации объединения:

{
  "totalCount": 2,
  "nextPageKey": null,
  "result": [
    {
      "metricId": "builtin:synthetic.browser.event.actionDuration.load.geo:count",
      "data": [
        {
          "dimensions": ["SYNTHETIC_TEST_STEP-002D5D5A0230A18F", "GEOLOCATION-B69A5A40388CC698"],
          "dimensionMap": {
            "dt.entity.synthetic_test_step": "SYNTHETIC_TEST_STEP-97EF148D63564F29",
            "dt.entity.geolocation": "GEOLOCATION-0A41430434C388A9"
          },
          "timestamps": [1559865600000, 1560124800000, 1560384000000],
          "values": [143, 156, 217]
        },
        {
          "dimensions": ["SYNTHETIC_TEST_STEP-002D5D5A0230A18F", "GEOLOCATION-43BA84CAB24D7950"],
          "timestamps": [1559865600000, 1560124800000, 1560384000000],
          "values": [773, 804, 801]
        }
      ]
    }
  ]
}

После транформации объединения:

{
  "totalCount": 1,
  "nextPageKey": null,
  "result": [
    {
      "metricId": "builtin:synthetic.browser.event.actionDuration.load.geo:count:merge(\"dt.entity.geolocation\")",
      "data": [
        {
          "dimensions": ["SYNTHETIC_TEST_STEP-002D5D5A0230A18F"],
          "dimensionMap": {
            "dt.entity.synthetic_test_step": "SYNTHETIC_TEST_STEP-09D1E2CC97B5878B"
          },
          "timestamps": [1559865600000, 1560124800000, 1560384000000],
          "values": [916, 960, 1018]
        }
      ]
    }
  ]
}

Трансформация имен

Синтаксис :names
Аргумент Нет
Ограничения Применяется только к измерениям типа объекта.

Преобразование имен добавляет имя значения измерения к массиву измерений и объекту DimensionMap ответа. Имя каждого измерения помещается перед идентификатором измерения.

Пример

До трансформации имён:

{
  "dimensions": ["HOST-BB4DF8969CB41C60", "DISK-FB78447211EE76BF"],
  "dimensionMap": {
    "dt.entity.disk": "DISK-FB78447211EE76BF",
    "dt.entity.host": "HOST-BB4DF8969CB41C60"
  }
}

После трансформации имён:

{
  "dimensions": ["l-009", "HOST-BB4DF8969CB41C60", "C:\\", "DISK-FB78447211EE76BF"],
  "dimensionMap": {
    "dt.entity.disk.name": "C:\\",
    "dt.entity.disk": "DISK-FB78447211EE76BF",
    "dt.entity.host.name": "l-009",
    "dt.entity.host": "HOST-BB4DF8969CB41C60"
  }
}

Трансформация наследований

Синтаксис :parents
Аргумент Нет
Ограничения Применяется только к измерениям типа объекта, перечисленного ниже.

Преобразование наследований добавляет предшественника измерения в массив измерений и объект DimensionMap ответа . Предшественник каждого измерения помещается перед самим измерением.

Это преобразование работает только в том случае, если объект измерения является частью другого, более крупного объекта. Например, PROCESS_GROUP_INSTANCEвсегда является дочерним элементом объекта, на HOSTкотором он работает. Поддерживаются следующие отношения.

Дочерний параметр Родительский параметр
SERVICE_METHOD SERVICE
SERVICE_INSTANCE SERVICE
APPLICATION_METHOD APPLICATION
PROCESS_GROUP_INSTANCE HOST
ДИСК HOST
СЕТЕВОЙ ИНТЕРФЕЙС HOST
СИНТЕТИЧЕСКИЙ_ТЕСТ_ШАГ SYNTHETIC_TEST
HTTP_CHECK_STEP HTTP_CHECK
ВНЕШНИЙ_СИНТЕТИЧЕСКИЙ_ТЕСТ_ШАГ EXTERNAL_SYNTHETIC_TEST

Пример

До трансформации наследования:

{
  "dimensions": ["SERVICE_METHOD-D9D3A16FA577BF1C"],
  "dimensionMap": {
    "dt.entity.service": "SERVICE-C22F1E8EA66FF4C5"
  }
}

После трансформации наследования:

{
  "dimensions": ["SERVICE-C22F1E8EA66FF4C5", "SERVICE_METHOD-D9D3A16FA577BF1C"],
  "dimensionMap": {
    "dt.entity.service_method": "SERVICE_METHOD-D9D3A16FA577BF1C",
    "dt.entity.service": "SERVICE-C22F1E8EA66FF4C5"
  }
}

Трансформация раздела

Синтаксис :partition("<partition dimension key>",<partition1>,<partitionN>)
Аргумент
  • Ключ измерения раздела. Это не существующее измерение, а новое, которое создаст трансформация. Кавычки ( ") и тильды ( ~), являющиеся частью ключа измерения, должны быть экранированы тильдой ( ~).
  • Список разделов, которые необходимо применить. Чтобы узнать, как их указать, см. раздел «Синтаксис раздела» ниже.
Версия Ключ-АСТРОМ 1.230+

Преобразование раздела разделяет точки данных ряда на основе заданных критериев. Он вводит новое измерение (размерность раздела), значение которого определяется критерием раздела.

  • Каждая точка данных из исходного ряда назначается первому разделу, для которого заданный критерий соответствует точке данных.
  • Точки данных, которые не соответствуют ни одному критерию раздела, отбрасываются.
  • Измерение раздела добавляется в серию только для разделов, которым назначена хотя бы одна точка данных.

Вы должны применить преобразование агрегации перед использованием преобразования раздела.

Синтаксис раздела

Одно преобразование может содержать несколько разделов. Они оцениваются сверху вниз; применяется первый соответствующий раздел.

Каждая секция должна содержать значение измерения секции, которое будет помечать переданные точки данных, и критерий, по которому нужно фильтровать точки данных.

value("<partition dimension value>",<criterion>)

Доступны следующие критерии:

lt(X) меньше Х
le(X) меньше или равно X
eq(X) равно Х
ne(X) не равно Х
ge(X) больше или равно X
gt(X) больше Х
range(X,Y) больше или равно X и меньше Y
otherwise Универсальный оператор, соответствующий всем значениям. Используйте его в конце цепочки разделов по умолчанию.
or(<criterion1>,<criterionN>) должен быть выполнен хотя бы один подкритерий
and(<criterion1>,<criterionN>) все подкритерии должны быть выполнены
not(<criterion>) Отрицательный критерий, соответствующий всем значениям, которые не соответствуют критерию.

Пример

В этом примере используется следующее преобразование разделов:

:partition(
    "Action duration",
    value("slow",gt(200)),
    value("fast",lt(100)),
    value("normal",otherwise)
)

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

  • fast для действий быстрее 100миллисекунд.
  • slow для действий медленнее 200миллисекунд.
  • normal для всех других действий.

До преобразования раздела:

{
  "totalCount": 1,
  "nextPageKey": null,
  "resolution": "10m",
  "result": [
    {
      "metricId": "builtin:apps.web.action.domInteractive.load.browser:avg",
      "data": [
        {
          "dimensions": ["APPLICATION_METHOD-E418A4BC1DC2C911", "BROWSER-EFB8A292CB368A8D"],
          "dimensionMap": {
            "dt.entity.browser": "BROWSER-EFB8A292CB368A8D",
            "dt.entity.application_method": "APPLICATION_METHOD-E418A4BC1DC2C911"
          },
          "timestamps": [
            1637152200000, 1637152800000, 1637153400000, 1637154000000, 1637154600000,
            1637155200000, 1637155800000, 1637156400000, 1637157000000, 1637157600000,
            1637158200000, 1637158800000, 1637159400000
          ],
          "values": [155, 215, 247, 118, 94, 119, 67, 159, 114, 169, 113, 75, 160]
        }
      ]
    }
  ]
}

После преобразования раздела:

{
  "totalCount": 3,
  "nextPageKey": null,
  "resolution": "10m",
  "result": [
    {
      "metricId": "builtin:apps.web.action.domInteractive.load.browser:avg:partition(\"Action duration\",value(slow,gt(200)),value(fast,lt(100)),value(normal,otherwise))",
      "data": [
        {
          "dimensions": [
            "BROWSER-EFB8A292CB368A8D",
            "APPLICATION_METHOD-E418A4BC1DC2C911",
            "normal"
          ],
          "dimensionMap": {
            "dt.entity.browser": "BROWSER-EFB8A292CB368A8D",
            "dt.entity.application_method": "APPLICATION_METHOD-E418A4BC1DC2C911",
            "Action duration": "normal"
          },
          "timestamps": [
            1637152200000, 1637152800000, 1637153400000, 1637154000000, 1637154600000,
            1637155200000, 1637155800000, 1637156400000, 1637157000000, 1637157600000,
            1637158200000, 1637158800000, 1637159400000
          ],
          "values": [155, null, null, 118, null, 119, null, 159, 114, 169, 113, null, 160]
        },
        {
          "dimensions": ["BROWSER-EFB8A292CB368A8D", "APPLICATION_METHOD-E418A4BC1DC2C911", "fast"],
          "dimensionMap": {
            "dt.entity.browser": "BROWSER-EFB8A292CB368A8D",
            "dt.entity.application_method": "APPLICATION_METHOD-E418A4BC1DC2C911",
            "Action duration": "fast"
          },
          "timestamps": [
            1637154000000, 1637154600000, 1637155200000, 1637155800000, 1637156400000,
            1637157000000, 1637157600000, 1637158200000, 1637158800000, 1637159400000,
            1637160000000, 1637160600000, 1637161200000
          ],
          "values": [null, null, null, null, 94, null, 67, null, null, null, null, 75, null]
        },
        {
          "dimensions": ["BROWSER-EFB8A292CB368A8D", "APPLICATION_METHOD-E418A4BC1DC2C911", "slow"],
          "dimensionMap": {
            "dt.entity.browser": "BROWSER-EFB8A292CB368A8D",
            "dt.entity.application_method": "APPLICATION_METHOD-E418A4BC1DC2C911",
            "Action duration": "slow"
          },
          "timestamps": [
            1637154000000, 1637154600000, 1637155200000, 1637155800000, 1637156400000,
            1637157000000, 1637157600000, 1637158200000, 1637158800000, 1637159400000,
            1637160000000, 1637160600000, 1637161200000
          ],
          "values": [null, 215, 247, null, null, null, null, null, null, null, null, null, null]
        }
      ]
    }
  ]
}

Трансформация скорости

Синтаксис :rate(5m)
Аргументы Основание ставки. Поддерживаются следующие значения:

s: в секунду

m: в минуту

h: в час

d: в день

w: в неделю

M: в месяц

y: в год

Преобразование скорости преобразует метрику на основе количества (например, байтов) в метрику на основе скорости (например, байтов в минуту).

Любой аргумент может быть изменен целочисленным коэффициентом. Например, 5mсредства за 5 минут . Если аргумент не указан, используется ставка за 1 минуту .

Вы можете использовать преобразование скорости с любой метрикой, поддерживающей VALUEагрегирование. Запросите метрику с помощью вызова дескрипторов метрики GET , чтобы получить информацию о доступных агрегатах. Если метрика не поддерживает VALUEагрегирование, сначала примените преобразование агрегирования , а затем преобразование скорости.

  • Вы должны применить преобразование агрегации перед использованием преобразования скорости.
  • Преобразование скорости можно использовать только один раз в одной цепочке преобразований.

Сводная трансформация

Синтаксис :rollup(avg,15m)
Аргументы
  • Требуемая агрегация накопительного пакета. Поддерживаемые агрегаты:
    • min
    • max
    • avg
    • sum
    • median
    • percentile(N), с N в диапазоне 0до 100.
  • Продолжительность окна свертки в минутах. Длительность должна быть кратна разрешению запроса. Например, если разрешение составляет пять минут, сводка может быть 5m, 10m, 15mи т. д.
Версия Ключ-АСТРОМ 1.230+

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

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

Например, если вы укажете :rollup(avg,5m)и разрешение запроса равно одной минуте, преобразование берет точку данных, добавляет четыре предыдущие точки данных для формирования окна свертки, а затем использует среднее значение этих пяти точек данных для вычисления окончательного значения точки данных. .

Ограничения

  • Прежде чем использовать преобразование свертки , необходимо применить преобразование агрегации .
  • Продолжительность окна объединения ограничена 60 минутами .
  • Вы можете сводить данные только за последние 2 недели (включая окна сворачивания). То есть самая старая точка данных вашего запроса не может быть больше, чем 2w-windowDurationв прошлом.

Плавная трансформация

Синтаксис :smooth(skipfirst)
Аргумент Стратегия сглаживания. Поддерживается только skipfirstстратегия.

Плавное преобразование сглаживает ряд точек данных после разрыва данных (одна или несколько точек данных со значением null).

Стратегия skipfirstзаменяет первую точку данных после разрыва данных на null.

Показать пример

До плавного преобразования:

{
  "totalCount": 1,
  "nextPageKey": null,
  "result": [
    {
      "metricId": "builtin:service.keyRequest.count.server",
      "data": [
        {
          "dimensions": ["SERVICE_METHOD-BBA9C77B774B0C15"],
          "dimensionMap": {
            "dt.entity.service_method": "SERVICE_METHOD-BBA9C77B774B0C15"
          },
          "timestamps": [
            1628618460000, 1628618520000, 1628618580000, 1628618640000, 1628618700000,
            1628618760000, 1628618820000, 1628618880000, 1628618940000, 1628619000000
          ],
          "values": [null, 15, 13, 15, null, null, 28, 14, 14, 13]
        }
      ]
    }
  ]
}

После плавного преобразования:

{
  "totalCount": 1,
  "nextPageKey": null,
  "result": [
    {
      "metricId": "builtin:service.keyRequest.count.server:smooth(skipfirst)",
      "data": [
        {
          "dimensions": ["SERVICE_METHOD-BBA9C77B774B0C15"],
          "dimensionMap": {
            "dt.entity.service_method": "SERVICE_METHOD-BBA9C77B774B0C15"
          },
          "timestamps": [
            1628618460000, 1628618520000, 1628618580000, 1628618640000, 1628618700000,
            1628618760000, 1628618820000, 1628618880000, 1628618940000, 1628619000000
          ],
          "values": [null, null, 13, 15, null, null, null, 14, 14, 13]
        }
      ]
    }
  ]
}

Транформация сортировки

Синтаксис :sort(<sorting key 1>,<sorting key 2>)
Аргумент Один или несколько ключей сортировки.

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

  • ascending
  • descending

Сортировка параметров

Чтобы отсортировать результаты по значению измерения, используйте dimension("<dimension>",<direction>)ключ. Кавычки ( ") и тильды ( ~), являющиеся частью ключа измерения, должны быть экранированы тильдой ( ~).

Измерения объекта сортируются лексикографически ( 0..9a..z) по значениям идентификатора объекта Ключ-АСТРОМ.

Строковые размеры сортируются лексикографически.

Сортировка точек данных

Чтобы отсортировать результаты по точкам данных метрики в измерении, используйте value(<aggregation>,<direction>клавишу ).

Доступны следующие агрегаты:

  • min
  • max
  • avg
  • sum
  • median
  • percentile(N), с N в диапазоне 0до 100.

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

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

Пример

До трансформации сортировки:

{
  "totalCount": 4,
  "nextPageKey": null,
  "result": [
    {
      "metricId": "builtin:apps.other.sessionCount.osAndGeo:names:splitBy(\"dt.entity.geolocation.name\")",
      "data": [
        {
          "dimensions": ["Austria"],
          "dimensionMap": {
            "dt.entity.geolocation.name": "Austria"
          },
          "timestamps": [1613557980000],
          "values": [6543]
        },
        {
          "dimensions": ["Switzerland"],
          "dimensionMap": {
            "dt.entity.geolocation.name": "Switzerland"
          },
          "timestamps": [1613557980000],
          "values": [1009]
        },
        {
          "dimensions": ["Germany"],
          "dimensionMap": {
            "dt.entity.geolocation.name": "Germany"
          },
          "timestamps": [1613557980000],
          "values": [6673]
        },
        {
          "dimensions": ["Lichtenstein"],
          "dimensionMap": {
            "dt.entity.geolocation.name": "Lichtenstein"
          },
          "timestamps": [1613557980000],
          "values": [86]
        }
      ]
    }
  ]
}

После трансформации сортировки:

{
  "totalCount": 4,
  "nextPageKey": null,
  "result": [
    {
      "metricId": "builtin:apps.other.sessionCount.osAndGeo:names:splitBy(\"dt.entity.geolocation.name\"):sort(dimension(\"dt.entity.geolocation.name\",ascending))",
      "data": [
        {
          "dimensions": ["Austria"],
          "dimensionMap": {
            "dt.entity.geolocation.name": "Austria"
          },
          "timestamps": [1613557440000],
          "values": [6543]
        },
        {
          "dimensions": ["Germany"],
          "dimensionMap": {
            "dt.entity.geolocation.name": "Germany"
          },
          "timestamps": [1613557440000],
          "values": [6673]
        },
        {
          "dimensions": ["Lichtenstein"],
          "dimensionMap": {
            "dt.entity.geolocation.name": "Lichtenstein"
          },
          "timestamps": [1613557980000],
          "values": [86]
        },
        {
          "dimensions": ["Switzerland"],
          "dimensionMap": {
            "dt.entity.geolocation.name": "Switzerland"
          },
          "timestamps": [1613557440000],
          "values": [1009]
        }
      ]
    }
  ]
}

Разделение по трансформации

Синтаксис :splitBy("<dimension0>","<dimension1>","<dimensionN>")
Аргумент Список измерений , которые необходимо сохранить в результате. Измерение должно быть указано его ключом.

Кавычки ( ") и тильды ( ~), являющиеся частью ключа измерения, должны быть экранированы тильдой ( ~).

Разделение по преобразованию сохраняет указанные измерения в результате и объединяет все остальные измерения. Значения пересчитываются в соответствии с выбранной агрегацией.

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

Пример

До разделения по транформации:

{
  "totalCount": 4,
  "nextPageKey": null,
  "result": [
    {
      "metricId": "builtin:apps.other.sessionCount.osAndGeo:names",
      "data": [
        {
          "dimensions": [
            "easyTravel Demo",
            "MOBILE_APPLICATION-752C288D59734C79",
            "Android",
            "OS-472A4A3B41095B09",
            "Switzerland",
            "GEOLOCATION-976217DC7560B588"
          ],
          "dimensionMap": {
            "dt.entity.device_application.name": "easyTravel Demo",
            "dt.entity.os": "OS-472A4A3B41095B09",
            "dt.entity.os.name": "Android",
            "dt.entity.device_application": "MOBILE_APPLICATION-752C288D59734C79",
            "dt.entity.geolocation.name": "Switzerland",
            "dt.entity.geolocation": "GEOLOCATION-976217DC7560B588"
          },
          "timestamps": [1612950360000],
          "values": [557]
        },
        {
          "dimensions": [
            "easyTravel Demo",
            "MOBILE_APPLICATION-752C288D59734C79",
            "Android",
            "OS-472A4A3B41095B09",
            "Austria",
            "GEOLOCATION-EADFE05E062C8D33"
          ],
          "dimensionMap": {
            "dt.entity.device_application.name": "easyTravel Demo",
            "dt.entity.os": "OS-472A4A3B41095B09",
            "dt.entity.os.name": "Android",
            "dt.entity.device_application": "MOBILE_APPLICATION-752C288D59734C79",
            "dt.entity.geolocation.name": "Austria",
            "dt.entity.geolocation": "GEOLOCATION-EADFE05E062C8D33"
          },
          "timestamps": [1612950360000],
          "values": [328]
        },
        {
          "dimensions": [
            "easyTravel Demo",
            "MOBILE_APPLICATION-752C288D59734C79",
            "iOS",
            "OS-62028BEE737F03D4",
            "Switzerland",
            "GEOLOCATION-976217DC7560B588"
          ],
          "dimensionMap": {
            "dt.entity.device_application.name": "easyTravel Demo",
            "dt.entity.os": "OS-62028BEE737F03D4",
            "dt.entity.os.name": "iOS",
            "dt.entity.device_application": "MOBILE_APPLICATION-752C288D59734C79",
            "dt.entity.geolocation.name": "Switzerland",
            "dt.entity.geolocation": "GEOLOCATION-976217DC7560B588"
          },
          "timestamps": [1612950360000],
          "values": [383]
        },
        {
          "dimensions": [
            "easyTravel Demo",
            "MOBILE_APPLICATION-752C288D59734C79",
            "iOS",
            "OS-62028BEE737F03D4",
            "Austria",
            "GEOLOCATION-EADFE05E062C8D33"
          ],
          "dimensionMap": {
            "dt.entity.device_application.name": "easyTravel Demo",
            "dt.entity.os": "OS-62028BEE737F03D4",
            "dt.entity.os.name": "iOS",
            "dt.entity.device_application": "MOBILE_APPLICATION-752C288D59734C79",
            "dt.entity.geolocation.name": "Austria",
            "dt.entity.geolocation": "GEOLOCATION-EADFE05E062C8D33"
          },
          "timestamps": [1612950360000],
          "values": [214]
        }
      ]
    }
  ]
}

После преобразования по трансформации:

{
  "totalCount": 2,
  "nextPageKey": null,
  "result": [
    {
      "metricId": "builtin:apps.other.sessionCount.osAndGeo:names:splitBy(\"dt.entity.geolocation.name\")",
      "data": [
        {
          "dimensions": ["Austria"],
          "dimensionMap": {
            "dt.entity.geolocation.name": "Austria"
          },
          "timestamps": [1612950360000],
          "values": [542]
        },
        {
          "dimensions": ["Switzerland"],
          "dimensionMap": {
            "dt.entity.geolocation.name": "Switzerland"
          },
          "timestamps": [1612950360000],
          "values": [940]
        }
      ]
    }
  ]
}

Трансформация со сдвигом во времени

Синтаксис :timeshift(5m)
Аргумент Период смены. Поддерживаются следующие значения:

s: секунды Ключ-АСТРОМ версии 1.228+

m: минуты

h: часы

d: дни

w: недели

Преобразование сдвига во времени сдвигает временной интервал, заданный параметрами запроса from и to , и сопоставляет полученные точки данных с метками времени из исходного временного интервала. Это может помочь вам передать данные из разных часовых поясов или разместить вчерашние и сегодняшние данные на одном графике для визуального сравнения.

Положительный аргумент сдвигает временные рамки в будущее; отрицательный аргумент сдвигает временные рамки в прошлое.

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

Рассмотрим пример с таймфреймом с 1615550400000(12 марта 2021 г., 13:00 по центральноевропейскому времени) по 1615557600000(12 марта 2021 г., 15:00 по центральноевропейскому времени) и сдвигом во времени -1d(на один день в прошлое).

  1. Точки данных будут запрашиваться для периода времени с 1615464000000(11 марта 2021 г., 13:00 CET) до 1615471200000(11 марта 2021 г., 15:00 CET).
  2. Временные метки в ответе будут выровнены по исходным временным рамкам. Например, точка данных с отметкой времени 1615465800000(11 марта 2021 г., 13:30 CET) будет возвращена как 1615552200000(12 марта 2021 г., 13:30 CET).

Трансформация юнитов

Установить единицу измерения

Синтаксис :setUnit(<unit>)
Аргумент Желаемый агрегат.

Чтобы получить список доступных юнитов, используйте API-вызов GET для всех юнитов .

Версия Ключ-АСТРОМ 1.235+

Преобразование setUnit задает единицу измерения в метаданных метрики.

Это преобразование не влияет на точки данных.

К юниту

Синтаксис :toUnit(<sourceUnit>,<targetUnit>)
Аргументы Исходная и целевая единицы преобразования.

Чтобы получить список доступных юнитов, используйте API-вызов GET для всех юнитов .

Версия Ключ-АСТРОМ 1.235+

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