如何像 RDBMS 一样在 openTSDB 中分组和聚合?

How to group by and aggregate in openTSDB like 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 获取结果?

像 OpenTSDB,Axibase Time Series Database is based on HBase/HDFS and at the same time it supports SQL queries. Your grouping query will work just fine: https://axibase.com/docs/atsd/sql/#grouping

ATSD 社区版免费。

EDIT20160619:更新了文档链接。此外,ATSD 支持带有 HAVING 子句的 GROUP BY 来过滤分组结果。此外,ROW_NUMBER window 函数可用于将 LIMIT 应用于结果集分区。

披露:我为 Axibase 工作

是的,有办法。 OpenTSDB 提供了一个rest API,你可以使用它。 为此,您需要执行以下操作。

  1. 一台机器的IP,其中OpenTSDB是运行.
  2. Opentsdb端口,默认4242
  3. 开始时间
  4. 聚合器即 sum,avg e.t.c
  5. 指标名称。
  6. 标签 至于要在"src_ip"的基础上聚合,就不用提了。下面给出了示例。 假设您在本地计算机上 运行 OpenTSDB。

    http://127.0.0.1:4242/api/query?start=10d-ago&m=sum:metric01{dst_ip=*,协议=*}

现在让 openTSDB 可以做到这一点。此外,如果有这样的要求,那么 openTSDB 可能不是您的选择。 openTSDB 是时间序列数据库,也适用于 kariosDB。我在 openTSDB 和 kariosDB 中尝试过,发现它们都不能。

因为在 openTSDB 中,group by 是一回事,聚合又是另一回事。 与 RDBMS 不同,agg 在分组依据上起作用。在 openTSDB 中,agg 适用于下采样