LINUX.ORG.RU

grafana и influxdb - не могу понять почему не работает

 , , , ,


0

1

Ребята, бьюсь, бьюсь, не могу никак асилить.

По статье из Интернета сделал на датчике DHT22 мониторинг температуры:

https://www.definit.co.uk/2018/07/monitoring-temperature-and-humidity-with-a-...

Все попробовал, не знаю куда копать, на графиках ничего не выводится.

> SELECT * FROM "rpi-dht22"
name: rpi-dht22
time                humidity           location temperature
----                --------           -------- -----------
1554665648000000000 19.5               plant    23.700000762939453
1554665713000000000 19.600000381469727 plant    23.799999237060547
1554665779000000000 19.600000381469727 plant    23.700000762939453
1554665844000000000 19.600000381469727 plant    23.700000762939453
1554665910000000000 19.700000762939453 plant    23.700000762939453

Временной штамп в формате: precision rfc3339, в консоль influx если кинуть, выводит в формате:

> precision rfc3339
> SELECT * FROM "rpi-dht22"
name: rpi-dht22
time                 humidity           location temperature
----                 --------           -------- -----------
2019-04-07T19:34:08Z 19.5               plant    23.700000762939453
2019-04-07T19:35:13Z 19.600000381469727 plant    23.799999237060547
2019-04-07T19:36:19Z 19.600000381469727 plant    23.700000762939453
2019-04-07T19:37:24Z 19.600000381469727 plant    23.700000762939453

Версия grafana менять пробовал. Версия influxdb - Version: 1.7.4-1

Читал что они что-то меняли с версии 1.2 кажется в influx в плане вывода по времени,но суть прочитанного не уловил от слова совсем...

Сам запрос вот такой (его генерит grafana, и сама не выводит график и в консоли сей запрос кусок пустоты возвращает...):

"SELECT mean("temperature") FROM "rpi-dht22" WHERE time >= now() - 3h GROUP BY time(1m) fill(null)"

Ребят, идеи кончились... Что делать? :) Что-то может в запросе не правильно..?

Всё это делаю на малинке.

★★★★★

Последнее исправление: DALDON (всего исправлений: 2)

Сделай now() - 6h, а еще лучше - сделай большой временной промежуток в графане, год например

Dred ★★★★★
()
Ответ на: комментарий от Dred

Ничего не работает. Я уже с ума схожу :) Всё пусто. В консоли тоже пусто.

xhrStatus:"complete"
request:Object
method:"GET"
url:"api/datasources/proxy/1/query"
params:Object
db:"sensor_data"
q:"SELECT mean("temperature") FROM "rpi-dht22" WHERE time >= 1523122147957ms GROUP BY time(12h) fill(null)"
epoch:"ms"
data:null
precision:"ms"
response:Object
results:Array[1]
0:Object

Не найдено у него объектов. Вот это: time >= 1523122147957ms подставляется, когда выбираю за последний год.

В консоль вот так сыплет:

> SELECT mean("temperature") FROM "rpi-dht22" WHERE time >= now() - 365d
name: rpi-dht22
time                mean
----                ----
1523122281942803117 23.701887490614403

Штамп:

> precision rfc3339
> SELECT mean("temperature") FROM "rpi-dht22" WHERE time >= now() - 365d
name: rpi-dht22
time                           mean
----                           ----
2018-04-07T17:32:20.245558936Z 23.70185255121302

Опыта нету, по-этому не очень понимаю что вернулось мне. Может кто-то подсказать? почему именно это значение вернулось?

DALDON ★★★★★
() автор топика
Последнее исправление: DALDON (всего исправлений: 1)
Ответ на: комментарий от DALDON

В консоль вот так сыплет:

тут все логично, ты же не сделал GROUP BY

results:Array[1]

там пусто ? Или одна точка вернулась ?

SELECT mean(«temperature») FROM «rpi-dht22» WHERE time >= 1523122147957ms GROUP BY time(12h)

А для этого в консоли что напишет ?

Dred ★★★★★
()

Попробуйте настроить в Grafana'е запрос без mean() и GROUP BY:

SELECT "temperature" FROM "rpi-dht22" WHERE ("location" = 'plant') AND $timeFilter

Evenik ★★
()
Ответ на: комментарий от Dred

там пусто ? Или одна точка вернулась ?

Пусто.... :( Это типа как массив, в количестве одна штука. И с пустым элементом чтоль... :(

А для этого в консоли что напишет ?

> SELECT mean("temperature") FROM "rpi-dht22" WHERE time >= 1523122147957ms GROUP BY time(12h)
>

Пусто как в капусте... :(

DALDON ★★★★★
() автор топика
Ответ на: комментарий от Evenik

Возвращает массив, и на графике откладывает по шкале Y, диапазон температур.

xhrStatus:"complete"
request:Object
method:"GET"
url:"api/datasources/proxy/1/query"
params:Object
db:"sensor_data"
q:"SELECT "temperature" FROM "rpi-dht22" WHERE ("location" = 'plant') AND time >= now() - 3h"
epoch:"ms"
data:null
precision:"ms"
response:Object
results:Array[1]
0:Object
statement_id:0
series:Array[1]
0:Object
name:"rpi-dht22"
columns:Array[2]
0:"time"
1:"temperature"
values:Array[104]
0:Array[1554665648000,23.700000762939453]
1:Array[1554665713000,23.799999237060547]
2:Array[1554665779000,23.700000762939453]
3:Array[1554665844000,23.700000762939453]
4:Array[1554665910000,23.700000762939453]
5:Array[1554665976000,23.700000762939453]
6:Array[1554666041000,23.700000762939453]
7:Array[1554666107000,23.700000762939453]
8:Array[1554666172000,23.700000762939453]
9:Array[1554666238000,23.700000762939453]
....

Только точки не наносит на график. Видимо не знает как привязать одно к другому чтоль? Я в этом прямо не силён, ребят... :( Как только пробую добавить нечто похожее на GROUP BY - массивы сразу же пустеют.

Спасибо за помощь!

DALDON ★★★★★
() автор топика
Ответ на: комментарий от Evenik

https://community.grafana.com/t/very-simple-graph-no-data-points/9397/2 вот тут похожий вопрос обсуждается, и у товарища спросили, а в UTC он хранит или нет..? - Я так понимаю что я храню в локальном часовом поясе! Может тут надо что-то покумекать, ребят?

Dread

У меня малина сперва была в хрен пойми какой тайм зоне, я её перевёл на UTC+3

DALDON ★★★★★
() автор топика
Последнее исправление: DALDON (всего исправлений: 1)
Ответ на: комментарий от DALDON

И так... Гуглинг подсказал, что в малинке нету hwclock. А значит, я мог что-то закостылить когда менял софтварно часовой пояс..?

DALDON ★★★★★
() автор топика
Ответ на: комментарий от DALDON

Возвращает массив, и на графике откладывает по шкале Y, диапазон температур.

Возвращает 104 точки, которые должны быть нарисованы.

А значит, я мог что-то закостылить когда менял софтварно часовой пояс.

Время первой точки: 1554665648 = 2019-04-07 19:34
Попробуйте увеличить интервал в верхнем правом углу.

Evenik ★★
()
Последнее исправление: Evenik (всего исправлений: 2)
Ответ на: комментарий от DALDON

а в UTC он хранит или нет

по умолчанию инфлюх в гринвиче хранит, потому и просил докрутить время. А у тебя поле точно числовое ? Ты туда случайно строки не пишешь ? И гафана на панели прям пишет «no datapoints» ?

Dred ★★★★★
()

Все попробовал, не знаю куда копать, на графиках ничего не выводится.

1) в grafana запросы для графиков строй не вручную, а мышкой. на порядок меньше шансов сделать ошибку

2) в grafana есть такая весчь, как min_time_interval. По умолчанию 500 мс ( 0.5 секунд ). Если время между измерениями больше, вместо графика будут точки. А их очень легко не заметить

на вкладке графика найди опции и увеличь min_time_interval до 2 минут

либо поменяй диапазон для графика скажем на 1 день. интервал будет больше

router ★★★★★
()
Ответ на: комментарий от DALDON

О, еще, странная штука, врятли оно у тебя, но такое возможно. В общем если руками проставляешь таймстамп при записи, а он у тебя, например UTC+3, при этом инфлюкс и графана будут думать, что UTC и соотсвественно добавлять времени. Можно попробовать в графане руками выставить отрезко времени, не now() - что-то, а прям в календаре выбрать с упреждением.

Dred ★★★★★
()
Ответ на: комментарий от Evenik

Временной интервал меняю постоянно, чтобы понять что не так ему. В общем дело во времени и в GROUP BY! Сделал UTC, почистил базу. Снова включил запись, и без GROUP BY, с UTC - пошли точки, мать их..! В настройках grafana поставил чтобы жрала время из браузера.

Должны, но вот пока не вернул я UTC, не были нарисованы... :(

DALDON ★★★★★
() автор топика
Ответ на: комментарий от Dred

no datapoints

А вот тут нюансы, когда убрал GROUP BY, перестала писать это, но и не выводила ничего...

по умолчанию инфлюх в гринвиче хранит, потому и просил докрутить время.

Ой... А вот тут я сейчас и сам, кажется зависну. После перезагрузки всё сломалось.

Пишу в базу вот так:

        humidity, temperature = Adafruit_DHT.read_retry(sensor, sensor_gpio)
        if humidity <= 200:
                        iso = time.ctime()
                        # Print for debugging, uncomment the below line
                        # print("[%s] Temp: %s, Humidity: %s" % (iso, temperature, humidity)) 
                        # Create the JSON data structure
                        data = [
                        {
                          "measurement": measurement,
                                  "tags": {
                                          "location": location,
                                  },
                                  "time": iso,
                                  "fields": {
                                          "temperature" : temperature,
                                          "humidity": humidity
                                  }
                          }
                        ]
                        # Send the JSON data to InfluxDB
                        client.write_points(data)
                        # Wait until it's time to query again...
                        time.sleep(interval)
 

Смущает это: «time»: iso И точно не уверен, что

humidity, temperature = Adafruit_DHT.read_retry(sensor, sensor_gpio)

Возвращает float, но уверен на 99,9 - что это float, как-то проверял, но уже забыл как. :)

В общем, мужики, со временем надо мне разобраться кажется...

DALDON ★★★★★
() автор топика
Ответ на: комментарий от Dred

Можешь подсказать, чего ему надо этому инфлюху? :)

И так, на малинке сейчас такое:

root@raspberrypi:/var/log/DHT22# date
Sun Apr  7 19:24:35 GMT 2019

Поставил голый GMT

Вот что пишет скрипт:

root@raspberrypi:/var/log/DHT22# python ./test.py
[Sun Apr  7 19:23:55 2019] Temp: 23.2999992371, Humidity: 19.2999992371
[Sun Apr  7 19:23:57 2019] Temp: 23.2999992371, Humidity: 19.3999996185

Вот что в базе:

> precision rfc3339
> SELECT mean("temperature") FROM "rpi-dht22"
name: rpi-dht22
time                 mean
----                 ----
1970-01-01T00:00:00Z 23.246153904841496

Какую временную зону надо на малинке поставить чтобы инфлюкс был доволен..? :)

Спасибо!

DALDON ★★★★★
() автор топика
Ответ на: комментарий от DALDON

не выводила ничего

это не так, вывела одну точку, в настройках отображения (display кажется) нужно радиус точек увеличить, либо в fill поставить conneced или zero. Попробуй групировку меньше делать, и если ты руками пишешь запросы - попробуй интерфейсом графаны, он проще на порядок. (это где все из менюшек набирается)

Пишу в базу вот так:

можешь попробовать без времени писать ? хз как в этих библиотеках, я JSON-ом не писал, тем более из питона, плейн текста хватало, но Influx умеет проставлять текущий таймстамп если клиент его не прислал.

1970-01-01T00:00:00Z

у тебя 0 проставляется вместо таймстампа

Dred ★★★★★
()
Ответ на: комментарий от Dred

Уф..!

Парни, всем спасибо! Огромное количество идей и дельных советов. Несколько дней проковырялся... Пришёл сюда от безысходности...

Побежали графики!

И так, что в итоге сделал:

  • Часовой пояс на малинке установил как: UTC, без всяких смещений. - Вот это главная проблема похоже...
  • В grafana в настройках admin и в настройках по-умолчанию установил как использовать часовой пояс браузера. (Не уверен, что это надо делать на самом деле).
  • min_time_interval - поставил адекватней. (Не уверен, что это надо делать на самом деле). - Так-как у меня всё же писалось именно что «no points». Но в любом случае, я вообще пока мне не написали про это, не знал, но догадывался что такая опция быть то должна.

Мужики: Dred Evenik router

Спасибо за советы! Во всё вник, про многое, и не очень очевидное сам дотыкал. Но, блин, ваша помощь очень по делу! ЛОР торт! :)

DALDON ★★★★★
() автор топика
Последнее исправление: DALDON (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.