Continuous Query(CQ)是外部周期运行的InfluxQL的查问,将查问后果写入指定的measurement,用它能够实现降采样downsampling。

联合CQ和RP(Retention Policy),能够将历史数据保留为低精度,最近的数据保留为高精度,以升高存储用量。

Continuous Query的语法结构:

CREATE CONTINUOUS QUERY <cq_name> ON <database_name>BEGIN<cq_query>END

其中的<cq_query>须要一个函数,一个INTO字句和一个GROUP BY time()字句,其语句构造:

SELECT <function[s]> INTO <destination_measurement> FROM <measurement> [WHERE <stuff>] GROUP BY time(<interval>)[,<tag_key[s]>]

举个简略的例子

将cpu.user数据进行5m均匀:

CREATE CONTINUOUS QUERY "cq_5" ON falcon BEGIN SELECT mean(value) INTO falcon.autogen."5_cpu.user" FROM falcon.autogen."cpu.user" GROUP BY time(5m), * END

其中的falcon.autogen."5_cpu.user",falcon示意database,autogen示意retention policy,5_cpu.user示意新的table。

//查问cq> show continuous queries;name: falconname  query----  -----cq_5  CREATE CONTINUOUS QUERY cq_5 ON falcon BEGIN SELECT mean(value) INTO falcon.autogen."5_cpu.user" FROM falcon.autogen."cpu.user" GROUP BY time(5m), * END//查问cq中的数据> select * from "5_cpu.user" order by time desc limit 10;name: 5_cpu.usertime                 endpoint mean----                 -------- ----2020-06-09T04:55:00Z trovedev 6.8062524000384982020-06-09T04:50:00Z trovedev 13.7962891284793352020-06-09T04:45:00Z trovedev 16.572126105753662020-06-09T04:40:00Z trovedev 28.5775916914236352020-06-09T04:35:00Z trovedev 6.028823347020752020-06-09T04:30:00Z trovedev 4.6673982823260422020-06-09T04:25:00Z trovedev 4.7462371716753452020-06-09T04:20:00Z trovedev 5.0061695746605942020-06-09T04:15:00Z trovedev 5.0022800377362612020-06-09T04:10:00Z trovedev 4.775274987155538

值得注意的是,CQ仅对实时的数据进行聚合,不会对历史数据聚合;也就是说,如果没有新的源数据,就不会产生新的聚合点。

逆向援用主动采样

应用通配符(*)和INTO查问的逆向援用语法,能够将db中的所有measurement依照对立的聚合办法进行采样,比方:将prometheus中的每个measuremnt每10min采样平均值,而后存入到opsultra的雷同名称的measurement中

create continuous query "cq_basic" on "prometheus" begin     select mean(*) into "opsultra"."six_month".:MEASUREMENT from /.*/ group by time(10m),* end

参考:
1.CQ:https://jasper-zhang1.gitbook...