Дома крутится медиа сервер, к которому я и решил прикрутить немножко мониторинга.
Пока это датчик температуры и давления на шине 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
Если кратко
– ставим библиотеку 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