2016-03-10 1 views
3

Я графический с графана (2.6.0) и у меня есть база данных InfluxDB (0.10.2) со следующими данными в нем:график InfluxDB и графана используя полночь как 0 на Y-оси производной

> select * from "WattmeterMainskwh" where time > now() - 5m 
name: WattmeterMainskwh 
----------------------- 
time    value 
1457579891000000000  15529.322 
1457579956000000000  15529.411 
1457580011000000000  15529.425 
1457580072000000000  15529.460 
1457580135000000000  15529.476 
...etc... 

Эти данные собирают мое семейное потребление киловатт, измеренное с помощью шкалы кВтч, которая постоянно увеличивает стоимость использования в течение нескольких месяцев или лет. Я не могу с легкостью сбросить счетчик и не хочу этого делать.

Моя цель - создать график, который показывает мое ежедневное использование кВт-ч в течение 24-часовых периодов, начиная с полуночи, или, как минимум, показывая относительный кВт-ч в течение отображаемого интервала. Этот тип графиков был бы полезен и во многих других случаях, где я мог бы представить себе «ошибки в течение дня» или «посетители с момента открытия» или «Сброс BGP за календарную неделю», но счетчик сбора не был сброшен до нуля при сбросе или перерыве интервала времени. Такой подсчет на самом деле довольно распространен в моем опыте.

Этот график работы, но не показывает мне, что я ищу:

SELECT derivative(mean("value")) FROM "WattmeterMainskwh" WHERE $timeFilter GROUP BY time($interval) fill(null) 

что граф просто показывает разницу между одной пробы и в предыдущем примере. То, что я хочу, - это постоянно увеличивающаяся линия, начинающаяся с левой стороны графика и возрастающая к правой стороне графика, с нулем в качестве нижней части оси Y и график, начинающийся с нуля при самом дальнем левом значении Х.

Этот график также работает и показывает мне правильную кривую, но она выключена на пятнадцать тысяч или около того. Пока это самое близкое к тому, что я хочу, но поскольку это постоянно увеличивающийся счетчик, который нельзя сбросить, мне нужно вычесть часть из оси Y. В идеале, я хотел бы вычесть все, что было в предыдущей полуночи из каждого образца, чтобы получить относительное число, основанное на дне, а не на абсолютной основе на все время.

SELECT sum("value") FROM "WattmeterMainskwh" WHERE $timeFilter GROUP BY time($interval) fill(null) 

И вот граф из этого предыдущего заявления:

Graph that is off by 15k

Эта попытка не работает - я, видимо, не может взять сумму производной группы:

SELECT sum(derivative(mean("value"))) FROM "WattmeterMainskwh" WHERE $timeFilter GROUP BY time($interval) fill(null) 

Это тоже не работает - я не могу выполнять функции внутри «производного»:

SELECT derivative(sum("value")-first("value")) FROM "WattmeterMainskwh" WHERE $timeFilter GROUP BY time($interval) fill(null) 

Конечно, я мог бы просто создать новое значение, в котором были применены вычисления, прежде чем я его ввел в InfluxDB, но это кажется мне излишним и небрежным способом решения этой проблемы, а также будучи довольно негибким, если я хочу посмотреть на другие интервалы по прихоти. Я надеюсь, что есть какой-то способ сделать это более элегантно в комбинации InfluxDB & Grafana, но я просто не могу найти его с условиями поиска, которые я использовал, или мышлением, которое я поставил для интерпретации документация.

Возможно ли использовать этот тип графиков с помощью InfluxDB/Grafana? Насколько я могу судить, непрерывный запрос не является решением, а отсутствие вложенных SELECT делает даже хакерские способы сделать это не очевидным для меня.

БОНУС: Было бы здорово, чтобы график показывался полночь каждую ночь в качестве «нулевого» местоположения, вместо «нуля», являющегося первой точкой отображаемого интервала, поэтому, глядя на пять дней обычных данных, пять различных «волн» увеличения ежедневного использования совокупной энергии, при этом значение волны Y возвращается к нулю в 12:00:01 в каждый день. Но я возьму все, что смогу.

ответ

0

Вложенные функции имеют только частичную поддержку. Тем не менее, вы можете эффективно встраивать функции путем цепочки Continuous Queries.

Используйте CQ чтобы рассчитать derivative(mean(value)) и сохраните это в новом измерении foo. Затем для вашего графика вы можете запросить select sum(value) from foo.

+0

ОК, я получил это ранее, а затем отказался от CQ из-за отсутствия возможности выполнить вложенный запрос для перезапуска моих счетчиков. Как заставить производную CQ использовать значение с предыдущей полуночи как «ноль»? –

+0

Похоже, вам нужно что-то большее, чем то, что доступно в функциях InfluxQL по умолчанию. [Kapacitor] (https://influxdata.com/time-series-platform/kapacitor/) является инструментом обработки потока в стеке TICK и поддерживает произвольные [пользовательские функции] (https://docs.influxdata.com /kapacitor/v0.10/nodes/u_d_f_node/). – beckettsean