我有一个表,其中有许多行遵循以下结构:
time acknowledgement crit current_attempt downtime_depth execution_time hostname latency max_check_attempts metric reachable service state state_type value warn
---- --------------- ---- --------------- -------------- -------------- -------- ------- ------------------ ------ --------- ------- ----- ---------- ----- ----
1507171563000000000 999 a01-pdu kw pdu 14.94 999
1507171621000000000 999 a01-pdu kw pdu 14.92 999
1507171678000000000 999 a01-pdu kw pdu 14.45 999
1507171736000000000 999 a01-pdu kw pdu 14.93 999
1507171793000000000 999 a01-pdu kw pdu 14.88 999
1507171852000000000 999 a01-pdu kw pdu 14.92 999
1507171909000000000 999 a01-pdu kw pdu 14.9 999
1507171995000000000 999 a01-pdu kw pdu 14.91 999
1507171999000000000 999 a02-pdu kw pdu 13.41 999我的目标是获取hostname =~ /a01-pdu|a02-pdu/的最后一项,并对其value列求和
例如,如果我运行以下命令:
SELECT last(value) AS last INTO pdu_abcd12 FROM pdu WHERE hostname =~ /a01-pdu/;
SELECT last(value) AS last INTO pdu_abcd12 FROM pdu WHERE hostname =~ /a02-pdu/;
SELECT sum(last) FROM (SELECT * FROM pdu_abcd12 ORDER BY DESC LIMIT 8)
time sum
---- ---
0 105.97我可以得到这两个值的总和,但这需要我在每次想要查看数据时运行上面的influxQL命令。有没有办法让这些命令定期运行,这样我就可以在Grafana中可视化实时数据?
发布于 2017-11-21 23:56:39
创建continuous queries,例如:
CREATE CONTINUOUS QUERY last_sum ON <db name>
BEGIN
SELECT last(value) AS last INTO pdu_abcd12
FROM pdu
WHERE hostname =~ /a01-pdu/
GROUP BY time(1h), hostname
END请注意,CQs需要group by。主机名也包含在上面的group by中,以说明正则表达式匹配的多个主机名。否则,它们的值将被一起选择。
然而,CQs有几个缺点,例如它们是周期性的,这意味着它们只在group by间隔内运行一次,它们不会包含间隔之间的中间数据,如果数据库关闭导致数据间隙,将不会运行,将在使用通配符聚合时生成唯一字段,等等,请参阅文档。
另一种选择是Kapacitor,它的流处理语法更灵活,但也更复杂。
https://stackoverflow.com/questions/46944237
复制相似问题