Grafana & influxdb на banana pi

Дома крутится медиа сервер, к которому я и решил прикрутить немножко мониторинга.

Пока это датчик температуры и давления на шине I2C

Сервер – это Banana PI. У него есть SATA разъем для жесткого диска, и, что самое главное, GPIO ноги, на которые можно вешать разные устройства.

В качестве фронтэнда для мониторинга я решил взять Grafana. Это ограничило варианты хранилища данных.

Графана поддерживает Graphite, CloudWatch, ElasticSearch, InfluxDB, KairosDB, OpenTSDB, Prometheus.

Graphite – Не осилил документацию 🙁

CloudWatch – Облако от Amazon. Я не хотел полагаться на внешние сервисы

ElasticSearch – Java

InfluxDB – Написана на golang

KairosDB – Java поверх Cassandra

OpenTSDB – Java поверх HBase

Prometheus – Работает по pull модели. Он сам собирает данные. Мне это не понравилось

Java – не вариант. Мне не нравится экосистема Java, от нее пахнет корпоративным душком. Плюс, JVM сожрет больше ресурсов, чем я хочу.

В итоге остановился на InfluxDB – то, что все собирается в бинарный код мне показалось весьма уместным для слабого сервера. Более того, возможности писать в базу разнообразны и удобны. Простой HTTP интерфейс, просто UDP и т.п.

Сначала все показалось простым – забрать код, собрать и запустить.

На деле это конечно не так.

Начнем с golang. Его ставить совсем не очевидно. Самый свежий go1.5.x для установки хочет go1.4.x

После нескольких попыток поставил gvm, это сильно помогло. gvm, как и его братья из других языков rvm & nvm умеет ставить и переключать версии golang

Нельзя просто взять и сбилдить проект на golang, как я понял. ARM пока вызывает проблемы в golang. Дело еще и в том, что я не сильно знаком с этим стеком. Собирал grafana & influxdb долго и муторно. В установке сильно помогли следующие странички:

http://gridengine.eu/index.php/other-stories/229-installing-influx-db-on-raspberry-pi-2-2015-10-18
http://docs.grafana.org/project/building_from_source/

С этого момента уже легче. Есть БД и фронтэнд к ней.

Совсем бесплатно дался мониторинг состояния системы сервера. InfluxDB отлично интегрируется с кучей систем, в том числе и с collectd. Пришлось поменять всего пару конфигов.

Осталось прочитать данные с датчика. У меня был заранее закуплен датчик bmp180. Забегая заранее – датчик – это чрезвычайно просто.

bmp180

bmp180

Если кратко

– ставим библиотеку python для работы с i2c шиной

– скачиваем готовый скрипт для своего датчика 🙂

– пришлось адаптировать скрипт для записи непосредственно в InfluxDB через UDP

– пришлось адаптировать скрипт, чтобы он писал не миллибары, а миллиметры ртутного столба

На сервере у меня стоит OpenMediaVault, поэтому регулярно запускать скрипт чтения с датчика я настроил прямо мышкой из браузера.

Готовенький скрипт для работы

Как подключить датчик и поставить пакеты

А вот и пример датчика, висящего на i2c шине –

root@bananas:~# ls -l /dev/i2c*
crw-rw---T 1 root i2c 89, 0 Jan  1  2010 /dev/i2c-0
crw-rw---T 1 root i2c 89, 1 Jan  1  2010 /dev/i2c-1
crw-rw---T 1 root i2c 89, 2 Jan  1  2010 /dev/i2c-2
crw-rw---T 1 root i2c 89, 3 Jan  1  2010 /dev/i2c-3
crw-rw---T 1 root i2c 89, 4 Jan  1  2010 /dev/i2c-4
root@bananas:~# i2cdetect -y 2
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- 77

Адаптированный скрипт лежит на гитхабе – https://github.com/Gromina/home_monitoring

Comments