Spec-Zone.ru › OpenTSDB

/api/query

Вероятно, самый полезный конечный пункт API, /api/query позволяет извлекать данные из системы хранения в различных форматах, определяемых выбранным сериализатором. Запросы можно отправлять в формате запроса 1.0 или в виде тела запроса.

Конечные пункты API запросов

  • /api/query/exp
  • /api/query/gexp
  • /api/query/last

Конечный пункт /query документирован ниже. Начиная с версии 2.2, данные, соответствующие запросу, можно удалить, используя глагол DELETE. Для разрешения удаления необходимо включить параметр конфигурации tsd.http.query.allow_delete. Удаленные данные будут возвращены в результатах запроса. Повторное выполнение запроса должно вернуть пустые результаты.

Предупреждение

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

Глаголы

  • GET
  • POST
  • DELETE

Запросы

Параметры запроса включают:

Имя Тип данных Обязательно Описание По умолчанию QS RW Пример
start Строка, Целое число Обязательно Начальное время для запроса. Это может быть относительная или абсолютная метка времени. Подробнее см. в Запросы или чтение данных. start 1h-ago
end Строка, Целое число Необязательно Конечное время для запроса. Если не указано, TSD предположит текущее время системы на сервере. Это может быть относительная или абсолютная метка времени. Подробнее см. в Запросы или чтение данных. текущее время end 1s-ago
queries Массив Обязательно Один или несколько подзапросов, используемых для выбора временных рядов для возврата. Это могут быть метрические m или запросы TSUID tsuids. m или tsuids См. ниже
noAnnotations Булево Необязательно Возвращать ли аннотации с запросом. По умолчанию возвращаются аннотации для запрошенного временного интервала, но этот флаг может отключить возврат. Это влияет как на локальные, так и на глобальные заметки и переопределяет globalAnnotations false no_annotations false
globalAnnotations Булево Необязательно Должен ли запрос извлекать глобальные аннотации для запрошенного временного интервала false global_annotations true
msResolution (или ms) Булево Необязательно Выводить ли метки времени точек данных в миллисекундах или секундах. Рекомендуется флаг msResolution. Если этот флаг не указан, и существует несколько точек данных в секунду, эти точки данных будут выборочно усреднены с использованием функции агрегирования запроса. false ms true
showTSUIDs Булево Необязательно Выводить ли TSUIDs, связанные с временными рядами в результатах. Если несколько временных рядов были агрегированы в один набор, несколько TSUIDs будут возвращены в отсортированном порядке false show_tsuids true
showSummary Булево Необязательно Показывать ли сводку времен, связанных с запросом, в результатах. Это создает другой объект в карте, отличный от объектов точек данных. false show_summary true
showQuery Булево Необязательно Возвращать ли исходный подзапрос вместе с результатами запроса. Если запрос содержит много подзапросов, это хороший способ определить, какие результаты относятся к какому подзапросу. Обратите внимание, что в случае запроса * или запроса с подстановкой это может привести к большому количеству дублирующего вывода. false show_query true
delete Булево Необязательно Можно передать в JSON с POST для удаления любых точек данных, соответствующих заданному запросу. false W true

Подзапросы

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

  • Запрос метрики - Полное имя метрики предоставляется вместе с необязательным списком тегов. Это оптимизировано для агрегирования нескольких временных рядов в один результат.
  • Запрос TSUID - Список одного или нескольких TSUID, которые разделяют общую метрику. Это оптимизировано для извлечения отдельных временных рядов, где агрегирование не требуется.

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

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

Имя Тип данных Обязательно Описание Значение по умолчанию Пример
aggregator Строка Обязательно Имя функции агрегирования для использования. См. /api/aggregators sum
metric Строка Обязательно Имя метрики, хранящейся в системе sys.cpu.0
rate Булево Необязательно Преобразовывать ли данные в дельты перед возвратом. Это полезно, если метрика — это непрерывно увеличивающийся счётчик, и вы хотите просмотреть скорость изменения между точками данных. false true
rateOptions Карта Необязательно Параметры обработки монотонно возрастающих счётчиков См. ниже См. ниже
downsample Строка Необязательно Необязательная функция усреднения для уменьшения количества возвращаемых данных. См. ниже 5m-avg
tags Карта Необязательно Для детализации до конкретных временных рядов или группировки результатов по тегу, предоставьте одно или несколько значений карты в том же формате, что и строка запроса. Теги преобразуются в фильтры в 2.2. Обратите внимание, что если теги не указаны, все метрики в системе будут агрегированы в результаты. Устарело в 2.2 См. ниже
filters (2.2) Список Необязательно Фильтрует временные ряды, выводимые в результатах. Обратите внимание, что если фильтры не указаны, все временные ряды для заданной метрики будут агрегированы в результаты. См. ниже
explicitTags (2.3) Булево Необязательно Возвращает ряды, которые содержат только ключи тегов, предоставленные в фильтрах. false true

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

При передаче параметров скорости в строке запроса параметры должны быть заключены в фигурные скобки. Например: m=sum:rate{counter,,1000}:if.octets.in. Если вы хотите использовать значения по умолчанию counterMax , но хотите указать resetValue, вы должны добавить две запятые, как в предыдущем примере. Дополнительные поля в объекте rateOptions включают следующее:

Имя Тип данных Обязательно Описание Значение по умолчанию Пример
counter Булево Необязательно Являются ли основанные данные монотонно возрастающим счётчиком, который может переполняться false true
counterMax Целое Необязательно Положительное целое число, представляющее максимальное значение для счётчика. Java Long.MaxValue 65535
resetValue Целое Необязательно Необязательное значение, которое, при превышении, заставит агрегатор вернуть 0 вместо рассчитанной скорости. Полезно, когда источники данных часто сбрасываются, чтобы избежать ложных пиков. 0 65000

Усреднение

Спецификации усреднения const, если интервал, единица времени, агрегатор и (с 2.2) необязательная политика заполнения. Формат спецификации усреднения:

<interval><units>-<aggregator>[-<fill policy>]

Например:

1h-sum
30m-avg-nan
24h-max-zero

См. Агрегаторы для списка поддерживаемых политик заполнения.

Фильтры

Нововведение для 2.2, OpenTSDB включает расширенные и подключаемые фильтры для комбинаций ключей и значений тегов. Для списка фильтров, загруженных в TSD, см. /api/config/filters. Для описания встроенных фильтров см. Фильтры. Фильтры могут использоваться как в запросах со строкой запроса, так и в запросах в формате POST. Разрешено несколько фильтров для одного и того же ключа тега, и при обработке они связываются с помощью И, например, если у нас есть два фильтра host=literal_or(web01) и host=literal_or(web02) запрос всегда вернёт пустой результат. Если для одного и того же ключа тега включено два или более фильтров, и один из них включил группировку, а другой — нет, тогда группировка по умолчанию будет true для всех фильтров по этому ключу тега. Поля для запросов POST, относящиеся к фильтрам, включают:

Имя Тип данных Обязательно Описание Значение по умолчанию Пример
type Строка Обязательно Имя вызываемого фильтра. См. /api/config/filters regexp
tagk Строка Обязательно Ключ тега, на котором вызывается фильтр host
filter Строка Обязательно Выражение фильтра для оценки, зависит от используемого фильтра web.*.mysite.com
groupBy Булево Необязательно Группировать ли результаты по каждому значению, соответствующему фильтру. По умолчанию все значения, соответствующие фильтру, будут агрегированы в один ряд. false true

Для запросов URI тип предшествует выражению фильтра в скобках. Формат: <tagk>=<type>(<filter_expression>). Группируются ли результаты зависит от того, в какой фигурной скобке находится фильтр. Теперь поддерживаются две фигурные скобки на запрос метрики. Первая пара фигурных скобок — это фильтр группировки, а вторая — фильтр без группировки, например {host=wildcard(web*)}{colo=regexp(sjc.*)}. Это указывает на любые метрики, где коло соответствует выражению регулярного выражения "sjc.*" и значение тега host начинается со "web", и результаты группируются по host. Если вы хотите только отфильтровать без группировки, то первая пара фигурных скобок должна быть пустой, например {}{host=wildcard(web*),colo=regexp(sjc.*)}. Это указывает на любые метрики, где colo соответствует выражению регулярного выражения "sjc.*" и значение тега host начинается со "web", и результаты не группируются.

Примечание

Регулярные выражения, фильтры с подстановкой с префиксом/суффиксом/внутри слова или буквальные ИЛИ с множеством значений могут привести к более медленному возвращению запросов, так как каждая строка данных должна быть разрешена до своих строковых значений, а затем обработана.

Примечание

При отправке JSON-запроса в OpenTSDB 2.2 или более поздней версии используйте либо tags ИЛИ filters. Только один из них будет иметь эффект, а порядок неопределён, так как парсер JSON может десериализовать один до другого. Рекомендуется использовать фильтры для всех будущих запросов.

Преобразования фильтров

Значения в запросе POST tags карта и фигурные скобки группировки в запросах URI автоматически преобразуются в фильтры для обеспечения обратной совместимости с существующими системами. Автоматические преобразования включают:

Пример Описание
<tagk>=* Фильтр с подстановкой, эффективно гарантирует, что ключ тега присутствует в ряду
<tagk>=value Буквенный фильтр ИЛИ, чувствительный к регистру
<tagk>=value1|value2|valueN Буквенный фильтр ИЛИ, чувствительный к регистру
<tagk>=va* Нечувствительный к регистру фильтр с подстановкой. Звёздочка (*) с любыми другими строками теперь становится сокращением фильтра с подстановкой

Формат строки запроса метрики

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

m=<aggregator>:[rate[{counter[,<counter_max>[,<reset_value>]]]}:][<down_sampler>:][explicit_tags:]<metric_name>[{<tag_name1>=<grouping filter>[,...<tag_nameN>=<grouping_filter>]}][{<tag_name1>=<non grouping filter>[,...<tag_nameN>=<non_grouping_filter>]}]

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

Формат строки запроса TSUID

Запросы TSUID проще, чем запросы метрики. Просто передайте список одного или нескольких TSUID в шестнадцатеричном кодировании, разделённых запятыми:

tsuid=<aggregator>:<tsuid1>[,...<tsuidN>]

Примеры запросов со строкой запроса

http://localhost:4242/api/query?start=1h-ago&m=sum:rate:proc.stat.cpu{host=foo,type=idle}
http://localhost:4242/api/query?start=1h-ago&tsuid=sum:000001000002000042,000001000002000043

Пример запроса с содержанием

См. документацию по сериализатору для получения информации о запросе: Сериализаторы HTTP. Следующие примеры относятся к сериализатору JSON по умолчанию.

{
  "start": 1356998400,
  "end": 1356998460,
  "queries": [
    {
      "aggregator": "sum",
      "metric": "sys.cpu.0",
      "rate": "true",
      "tags": {
        "host": "*",
        "dc": "lga"
      }
    },
    {
      "aggregator": "sum",
      "tsuids": [
        "000001000002000042",
        "000001000002000043"
        ]
      }
    }
  ]
}

Запрос 2.2 с фильтрами

{
  "start": 1356998400,
  "end": 1356998460,
  "queries": [
    {
      "aggregator": "sum",
      "metric": "sys.cpu.0",
      "rate": "true",
      "filters": [
        {
           "type":"wildcard",
           "tagk":"host",
           "filter":"*",
           "groupBy":true
        },
        {
           "type":"literal_or",
           "tagk":"dc",
           "filter":"lga|lga1|lga2",
           "groupBy":false
        },
      ]
    },
    {
      "aggregator": "sum",
      "tsuids": [
        "000001000002000042",
        "000001000002000043"
        ]
      }
    }
  ]
}

Ответ

Вывод, сгенерированный для запроса, сильно зависит от выбранного сериализатора HTTP-сериализаторов. Запрос может вернуть несколько наборов данных, особенно если в запросе были включены несколько запросов или было запрошено группирование. Некоторые общие поля, включённые в каждый набор данных в ответе, будут:

Имя Описание
metric Имя метрики, извлеченной для временного ряда
теги Список тегов, возвращаемый только тогда, когда результаты относятся к одному временному ряду. Если результаты агрегированы, это значение может быть нулевым или пустым словарем
агрегированныеТеги Если в наборе результатов было включено более одного временного ряда, т. е. они были агрегированы, здесь будет отображаться список имён тегов, которые были найдены общими для всех временных рядов.
dps Извлеченные точки данных после обработки агрегаторами. Каждая точка данных состоит из метки времени и значения, формат определяется сериализатором.
аннотации Если запрос извлёк аннотации для временных рядов в запрошенном временном интервале, они будут возвращены в этой группе. Аннотации для каждого временного ряда будут объединены в один набор и отсортированы по start_time. Функции агрегатора не влияют на аннотации, все аннотации будут возвращены для указанного интервала.
глобальныеАннотации Если пользователь запросил, запрос будет сканировать глобальные аннотации в течение временного интервала, и результаты будут возвращены в этой группе

Если с запросом не было ошибок, вы обычно получите статус 200 со содержимым. Однако, если ваш запрос не смог найти данные, он вернёт пустой набор результатов. В случае сериализатора JSON результатом будет пустой массив:

[]

Для сериализатора JSON метка времени всегда будет целым числом в формате Unix-эпохи, за которым следует значение как целое число или число с плавающей запятой. Например, стандартный вывод выглядит как "dps"{"<timestamp>":<value>}. По умолчанию метки времени будут в секундах. Если флаг msResolution установлен, метки времени будут в миллисекундах.

Пример агрегированного ответа по умолчанию

[
  {
    "metric": "tsd.hbase.puts",
    "tags": {},
    "aggregatedTags": [
      "host"
    ],
    "annotations": [
      {
        "tsuid": "00001C0000FB0000FB",
        "description": "Testing Annotations",
        "notes": "These would be details about the event, the description is just a summary",
        "custom": {
          "owner": "jdoe",
          "dept": "ops"
        },
        "endTime": 0,
        "startTime": 1365966062
      }
    ],
    "globalAnnotations": [
      {
        "description": "Notice",
        "notes": "DAL was down during this period",
        "custom": null,
        "endTime": 1365966164,
        "startTime": 1365966064
      }
    ],
    "tsuids": [
      "0023E3000002000008000006000001"
    ],
    "dps": {
      "1365966001": 25595461080,
      "1365966061": 25595542522,
      "1365966062": 25595543979,
...
      "1365973801": 25717417859
    }
  }
]

Пример агрегированного ответа в формате массива

[
  {
    "metric": "tsd.hbase.puts",
    "tags": {},
    "aggregatedTags": [
      "host"
    ],
    "dps": [
      [
        1365966001,
        25595461080
      ],
      [
        1365966061,
        25595542522
      ],
...
      [
        1365974221,
        25722266376
      ]
    ]
  }
]

Пример ответа с несколькими наборами

В приведенном примере работали два TSD, и запрос был: http://localhost:4242/api/query?start=1h-ago&m=sum:tsd.hbase.puts{host=*}. Это возвращает два явных временных ряда.

[
  {
    "metric": "tsd.hbase.puts",
    "tags": {
      "host": "tsdb-1.mysite.com"
    },
    "aggregatedTags": [],
    "dps": {
      "1365966001": 3758788892,
      "1365966061": 3758804070,
...
      "1365974281": 3778141673
    }
  },
  {
    "metric": "tsd.hbase.puts",
    "tags": {
      "host": "tsdb-2.mysite.com"
    },
    "aggregatedTags": [],
    "dps": {
      "1365966001": 3902179270,
      "1365966062": 3902197769,
...
      "1365974281": 3922266478
    }
  }
]

Пример с отображением сводки и запросом

[
  {
    "metric": "tsd.hbase.puts",
    "tags": {},
    "aggregatedTags": [
      "host"
    ],
    "query": {
      "aggregator": "sum",
      "metric": "tsd.hbase.puts",
      "tsuids": null,
      "downsample": null,
      "rate": true,
      "explicitTags": false,
      "filters": [
        {
          "tagk": "host",
          "filter": "*",
          "group_by": true,
          "type": "wildcard"
        }
      ],
      "rateOptions": null,
      "tags": { }
    },
    "dps": {
      "1365966001": 25595461080,
      "1365966061": 25595542522,
      "1365966062": 25595543979,
...
      "1365973801": 25717417859
    }
  },
  {
    "statsSummary": {
      "datapoints": 0,
      "rawDatapoints": 56,
      "aggregationTime": 0,
      "serializationTime": 20,
      "storageTime": 6,
      "timeTotal": 26
    }
  }
]

© 2010–2016 The OpenTSDB Authors
Licensed under the GNU LGPLv2.1+ and GPLv3+ licenses.
http://opentsdb.net/docs/build/html/api_http/query/index.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API