Как группировать и агрегировать в openTSDB, как RDBMS?
У меня есть данные в формате ниже, хранящемся в openTSDB:
src_ip dst_ip protocol value timestamp
1.1.1.1 2.2.2.1 tcp 100 100000001
1.1.1.1 2.2.2.2 tcp 100 100000001
1.1.1.1 2.2.2.3 udp 100 100000002
1.1.1.4 2.2.2.4 icmp 100 100000003
Все они принадлежат к одной метрике, скажем, metric01.
Я хочу получить результат как:
select sum(value) from metric01 group by src_ip
Есть ли способ получить результат из http api?
3 ответа
Теперь способ openTSDB сделать это. Также, если есть такое требование, то openTSDB может быть не вашим выбором. openTSDB - это временной ряд db, также для kariosDB. Я попробовал в openTSDB и kariosDB и обнаружил, что они оба не могут.
Потому что в openTSDB группировка - это одно, а совокупность - это другое. В отличие от RDBMS, агг работает в группе. В openTSDB agg работает на основе примера
Как и OpenTSDB, база данных временных рядов Axibase основана на HBase/HDFS и в то же время поддерживает запросы SQL. Ваш групповой запрос будет работать нормально: https://axibase.com/docs/atsd/sql/
ATSD Community Edition бесплатно.
EDIT20160619: Обновлены ссылки на документацию. Кроме того, ATSD поддерживает GROUP BY с предложением HAVING для фильтрации сгруппированных результатов. Кроме того, оконная функция ROW_NUMBER может использоваться для применения LIMIT к разделам набора результатов.
Раскрытие информации: я работаю на Axibase
Да, есть способ. OpenTSDB предоставляет API отдыха, вы можете использовать это. Для этого вам нужны следующие вещи.
- IP-адрес компьютера, на котором работает OpenTSDB.
- Порт Opentsdb, по умолчанию 4242.
- Начальное время
- Агрегатор т.е. сумма, средняя и т. Д.
- Метрическое название.
Теги Поскольку вы хотите агрегировать на основе "src_ip", вам не нужно об этом упоминать. Образец приведен ниже. Предполагая, что вы используете OpenTSDB на вашем локальном компьютере.
http://127.0.0.1:4242/api/query?start=10d-ago&m=sum:metric01{dst_ip = *, protocol = *}