如何查找timeseries数据的最新项?

qgelzfjb  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(1)|浏览(452)

例如,存在诸如根分区利用率之类的timeseries数据。数据结构如下:

  1. name: root_disk_utilizatoin
  2. ip: 1.1.1.1
  3. timestamp: 1234567890
  4. value: 0.5

我们有数百万台服务器每隔几分钟报告一次这些数据。我的期望是找到每台服务器的最新数据。
第一个想法是将这些时间序列数据存储在一些存储器中,如elasticsearc或tsdb(influxdb/opentsdb)。然后查询存储以获得结果。但我担心表演。无论我选择什么存储,他们都必须执行以下两个步骤来归档结果。
按ip分组数据
按时间戳对数据排序并返回最新的数据
我想这将是一个非常昂贵的过程(花费了很多时间)。
所以我想这可能不是个好主意。
您是否有类似的要求,如何解决?
像XDB这样的timeseries db会有问题吗?

xtupzzrd

xtupzzrd1#

您可以使用术语聚合和最大聚合的组合
添加索引数据、搜索查询和搜索结果的工作示例
索引数据:

  1. {
  2. "name": "root_disk_utilizatoin",
  3. "ip": "1.1.1.2",
  4. "timestamp": 1234567891,
  5. "value": 0.5
  6. }
  7. {
  8. "name": "root_disk_utilizatoin",
  9. "ip": "1.1.1.1",
  10. "timestamp": 1234567890,
  11. "value": 0.5
  12. }

搜索查询:

  1. {
  2. "size":0,
  3. "aggs": {
  4. "unique_id": {
  5. "terms": {
  6. "field": "ip.keyword",
  7. "order": {
  8. "latestOrder": "desc"
  9. },
  10. "size":1
  11. },
  12. "aggs": {
  13. "latestOrder": {
  14. "max": {
  15. "field": "timestamp"
  16. }
  17. }
  18. }
  19. }
  20. }
  21. }

搜索结果:

  1. "aggregations": {
  2. "unique_id": {
  3. "doc_count_error_upper_bound": 0,
  4. "sum_other_doc_count": 1,
  5. "buckets": [
  6. {
  7. "key": "1.1.1.2",
  8. "doc_count": 1,
  9. "latestOrder": {
  10. "value": 1.234567891E9
  11. }
  12. }
  13. ]
  14. }
展开查看全部

相关问题