Spec-Zone.ru › OpenTSDB

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

Ниже приведен список примеров запросов, использующих примерный набор данных. Мы проиллюстрируем ряд распространённых типов запросов, с которыми вы можете столкнуться, чтобы вы могли понять, как работает система запросов. В каждом временном ряду в примере хранится только одна точка данных, а идентификаторы пользователей (UID) сокращены до одного байта для удобства чтения. Все примерные запросы — это запросы Метрики из API HTTP и отображают только компонент m=. Подробности см. в /api/query. Если вы используете инструмент командной строки, формат запроса будет немного отличаться, поэтому ознакомьтесь с документацией для конкретной команды.

Примерные данные

Временной ряд

TS# Метрика Теги TSUID
1 sys.cpu.system dc=dal host=web01 0102040101
2 sys.cpu.system dc=dal host=web02 0102040102
3 sys.cpu.system dc=dal host=web03 0102040103
4 sys.cpu.system host=web01 010101
5 sys.cpu.system host=web01 owner=jdoe 0101010306
6 sys.cpu.system dc=lax host=web01 0102050101
7 sys.cpu.system dc=lax host=web02 0102050102
8 sys.cpu.user dc=dal host=web01 0202040101
9 sys.cpu.user dc=dal host=web02 0202040102

UID

Имя UID
Метрики
cpu.system 01
cpu.user 02
Теги
host 01
dc 02
owner 03
Значения тегов
web01 01
web02 02
web03 03
dal 04
lax 05
doe 06

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

Это не обязательно лучший способ настройки метрик и тегов, а скорее иллюстративное представление о том, как работает система запросов. В частности, TS #4 и 5, хотя и являются законными временными рядами, могут испортить ваши запросы, если вы не знаете, как они работают. В общем, старайтесь поддерживать одинаковое количество и тип тегов для каждого временного ряда.

Под капотом

Вы можете прочитать о том, как OpenTSDB хранит данные временных рядов здесь: Хранилище. В противном случае, помните, что каждая строка в хранилище имеет уникальный ключ в формате:

<metricID><normalized_timestamp><tagkID1><tagvID1>[...<tagkIDN><tagvIDN>]

Таблица данных выше хранилась бы как:

01<ts>0101
01<ts>01010306
01<ts>02040101
01<ts>02040102
01<ts>02040103
01<ts>02050101
01<ts>02050102
02<ts>02040101
02<ts>02040102

При запросе к OpenTSDB происходит следующее.

  • Запрос анализируется и проверяется, чтобы убедиться, что формат правильный, а метрики, имена тегов и значения тегов существуют. Если одна метрика, имя тега или значение не существует в системе, возвращается ошибка.
  • Затем создаётся сканер для базовой системы хранения.
    • Если в запросе нет тегов или значений тегов, то берутся все строки данных, которые соответствуют <metricID><timestamp>, поэтому если у вас много временных рядов для определённой метрики, это может быть очень много строк.
    • Если в запросе определён один или несколько тегов, то он всё ещё сканирует все строки, соответствующие <metricID><timestamp>, но также выполняет поиск по регулярному выражению, чтобы вернуть только строки, содержащие запрашиваемый тег.
  • После того, как все данные возвращены, OpenTSDB организует их в группы, если это необходимо.
  • Если запрашивалась выборка данных, каждый отдельный временной ряд выборки данных в меньшие временные отрезки с использованием соответствующего агрегатора.
  • Затем каждая группа данных агрегируется с использованием конкретной функции агрегирования.
  • Если был обнаружен флаг rate, каждое агрегирование будет затем скорректировано для получения скорости.
  • Результаты возвращаются вызывающему элементу.

Запрос 1 — Все временные ряды для метрики

m=sum:cpu.system

Это самый простой запрос. TSDB создаст сканер для извлечения всех точек данных для метрики UID 01 между <start> и <end>. Результатом будет один набор данных с временными рядами от #1 до #7, суммированными вместе. Если у вас тысячи уникальных комбинаций тегов для данной метрики, они все будут добавлены в один временной ряд.

[
  {
    "metric": "cpu.system",
    "tags": {},
    "aggregated_tags": [
      "host"
    ],
    "tsuids": [
      "010101",
      "0101010306",
      "0102050101",
      "0102040101",
      "0102040102",
      "0102040103",
      "0102050102"
    ],
    "dps": {
      "1346846400": 130.29999923706055
    }
  }
]

Запрос 2 — Фильтр по тегу

Обычно агрегирование всех временных рядов для метрики не особенно полезно. Вместо этого мы можем немного углубиться, отфильтровав временные ряды, содержащие определённую комбинацию тег/значение. Просто поместите пару в фигурные скобки:

m=sum:cpu.system{host=web01}

Это вернёт агрегированные временные ряды #1, #4, #5 и #6, поскольку они единственные, которые содержат host=web01.

[
  {
    "metric": "cpu.system",
    "tags": {
      "host": "web01"
    },
    "aggregated_tags": [],
    "tsuids": [
      "010101",
      "0101010306",
      "0102040101",
      "0102050101"
    ],
    "dps": {
      "1346846400": 63.59999942779541
    }
  }
]

Запрос 3 — Конкретный временной ряд

А что, если вам нужен конкретный временной ряд? Вам нужно включить каждый тег и соответствующее значение.

m=sum:cpu.system{host=web01,dc=lax}

Это вернёт данные только из временного ряда #6.

[
  {
    "metric": "cpu.system",
    "tags": {
      "dc": "lax",
      "host": "web01"
    },
    "aggregated_tags": [],
    "tsuids": [
      "0102050101"
    ],
    "dps": {
      "1346846400": 15.199999809265137
    }
  }
]

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

Здесь схема тегов будет стоять или падать. Допустим, вы хотите получить только данные из временного ряда #4. В рамках текущей системы это невозможно. Вы отправите запрос #2 m=sum:cpu.system{host=web01} , думая, что он вернёт только данные из #4, но как мы видели, вы получите агрегированные результаты для #1, #4, #5 и #6. Чтобы предотвратить такую ситуацию, вам нужно будет добавить ещё один тег в #4, который отличал бы его от других временных рядов в группе. Или, если вы уже зафиксировали, вы можете использовать запросы TSUID.

Запрос 4 — Запрос TSUID

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

tsuids=sum:0102040102

Результатом будут запрошенные вами точки данных.

[
  {
    "metric": "cpu.system",
    "tags": {
      "dc": "lax",
      "host": "web01"
    },
    "aggregated_tags": [],
    "tsuids": [
      "0102050101"
    ],
    "dps": {
      "1346846400": 15.199999809265137
    }
  }
]

Запрос 5 — Многомерный запрос TSUID

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

tsuids=sum:0102040101,0102050101
[
  {
    "metric": "cpu.system",
    "tags": {
      "host": "web01"
    },
    "aggregated_tags": [
      "dc"
    ],
    "tsuids": [
      "0102040101",
      "0102050101"
    ],
    "dps": {
      "1346846400": 33.19999980926514
    }
  }
]

Запрос 6 — Группировка

m=sum:cpu.system{host=*}

Оператор * (звёздочка) — это оператор группировки, который возвращает набор данных для каждого уникального значения заданного имени тега. Каждый временной ряд, включающий заданную метрику и заданное имя тега, независимо от других тегов или значений, будет включён в результаты. После группировки индивидуальных результатов временных рядов они будут агрегированы и возвращены.

В этом примере будет возвращено 3 группы:

Группа Включённые временные ряды
web01 #1, #4, #5, #6
web02 #2, #7
web03 #3

TSDB обнаружил 7 временных рядов, которые включали тег «host». Было 3 уникальных значения для этого тега (web01, web02 и web03).

[
  {
    "metric": "cpu.system",
    "tags": {
      "host": "web01"
    },
    "aggregated_tags": [],
    "tsuids": [
      "010101",
      "0101010306",
      "0102040101",
      "0102050101"
    ],
    "dps": {
      "1346846400": 63.59999942779541
    }
  },
  {
    "metric": "cpu.system",
    "tags": {
      "host": "web02"
    },
    "aggregated_tags": [
      "dc"
    ],
    "tsuids": [
      "0102040102",
      "0102050102"
    ],
    "dps": {
      "1346846400": 24.199999809265137
    }
  },
  {
    "metric": "cpu.system",
    "tags": {
      "dc": "dal",
      "host": "web03"
    },
    "aggregated_tags": [],
    "tsuids": [
      "0102040103"
    ],
    "dps": {
      "1346846400": 42.5
    }
  }
]

Запрос 7 — Группировка и фильтрация

Обратите внимание, что в примере #2 группа web01 включала нестандартные временные ряды #4 и #5. Мы можем исключить их, указав второй тег, например:

m=sum:cpu.nice{host=*,dc=dal}

Теперь мы получим результаты только для #1-#3, но потеряем значения dc=lax.

[
  {
    "metric": "cpu.system",
    "tags": {
      "dc": "dal",
      "host": "web01"
    },
    "aggregated_tags": [],
    "tsuids": [
      "0102040101"
    ],
    "dps": {
      "1346846400": 18
    }
  },
  {
    "metric": "cpu.system",
    "tags": {
      "dc": "dal",
      "host": "web02"
    },
    "aggregated_tags": [],
    "tsuids": [
      "0102040102"
    ],
    "dps": {
      "1346846400": 9
    }
  },
  {
    "metric": "cpu.system",
    "tags": {
      "dc": "dal",
      "host": "web03"
    },
    "aggregated_tags": [],
    "tsuids": [
      "0102040103"
    ],
    "dps": {
      "1346846400": 42.5
    }
  }
]

Запрос 8 — Группировка с оператором OR

Оператор * жадный и вернёт *все* значения, назначенные имени тега. Если вы хотите получить только несколько значений тегов, используйте оператор | (пайп) вместо этого.

m=sum:cpu.nice{host=web01|web02}

Это найдёт все временные ряды, которые содержат значения «host» «web01» ИЛИ «web02», затем сгруппирует их по значению, аналогично оператору *. Наши группы на этот раз будут выглядеть так:

Группа Включённые временные ряды
web01 #1, #4, #5, #6
web02 #2, #7
[
  {
    "metric": "cpu.system",
    "tags": {
      "host": "web01"
    },
    "aggregated_tags": [],
    "tsuids": [
      "010101",
      "0101010306",
      "0102040101",
      "0102050101"
    ],
    "dps": {
      "1346846400": 63.59999942779541
    }
  },
  {
    "metric": "cpu.system",
    "tags": {
      "host": "web02"
    },
    "aggregated_tags": [
      "dc"
    ],
    "tsuids": [
      "0102040102",
      "0102050102"
    ],
    "dps": {
      "1346846400": 24.199999809265137
    }
  }
]

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

Spec-Zone.ru

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