Хабрахабр

[Из песочницы] Мониторинг температуры серверной своими руками

Когда мы в очередной раз узнали об отказе кондиционера в серверной по гневным сообщениям от встроенного мониторинга серверов, было принято волевое решение научить Zabbix мониторить температуру в серверной. Чтобы при повторении подобной ситуации принять меры до того, как серверная превратится в баню.


Реализация довольно проста: термодатчик опрашивается контроллером через шину 1wire, сам контроллер подключается к любому доступному серверу по USB и опрашивается командой head -n1 /dev/cuaU, которая прописывется в конфиге zabbix агента следующим образом:

UserParameter=usbtemp,head -n1 /dev/cuaU0

Выбор датчика с цифровым интерфейсом обусловлен тем, что это хороший задел на будущее чтобы добавить на шину еще десяток датчиков, если потребуется мониторить температуру каждой стойки отдельно, напрмер. Сам контроллер подключен по USB и чтобы не изобретать свои драйвера прикидывается обычным CDC serial emulator, то есть обычным виртуальным COM портом, и можно конечно же было использовать и HID class, так как он идеологически лучше подходит со всеми своими структурированными HID-report’ами для опроса всяческих датчиков. Но решил все же пока обойтись CDC для наглядности и простоты реализации.

В качестве микроконтроллера реализующего мост 1wire-USB, использован МК PIC16F1454, вообще же читатель может использовать любой другой МК на собственный вкус (подключив пару библиотек — 1wire, USB-CDC), либо подключить внешний UART-USB мост типа CP2102. Итак, все что потребуется для реализации это: непосредственно термодатчик DS18B20, микроконтроллер имеющий аппаратный USB модуль на борту, пара резисторов, конденсаторов и USB шнурок. Не очень люблю подобные костыли поэтому предпочел решение на одной микросхеме — взял самый дешевый контроллер с USB, на момент создания устройства это был PIC16F1454.

Однако вдаваться в особенности реализации своей библиотеки USB я в данной статье не буду. В проекте не использовалось готовых USB стеков от Microchip или сторонних, вместо них использован самописный стек, разработанный ранее для другого проекта. За который я возможно возьмусь в скором будущем, если, конечно читателю эта тема будет интересна.
Схема очень простая, поэтому плата была сразу разведена в sprint layout, тем не менее привожу чертеж схемы. Так как работа с шиной USB выходит за рамки этой статьи и заслуживает отдельной, либо даже цикла статей.

Подойдет PICKIT2, например, или его клон. Контроллер не поддерживает бут-лоадер, поэтому зашить его можно только через программатор, используя ICSP разъем.

Устройство драйверов не требует так как используется стандартный класс CDC, под Windows 10 и FreeBSD определяется сразу, под Windows 7 потребуется указать inf файл (см. Правильно собранное устройство начинает работать сразу после подачи питания и наладки не требует. Под другими ОС устройство не тестировалось. архив к статье), явно указывающий на драйвер usbser.sys. Выполнив команду #head -n1 /dev/cuaU0 вы можете проверить, что датчик корректно опрашивается и отображается текущая температура. При подключении должно определиться как /dev/cuaUx, под FreeBSD, где x — логический номер устройства.

Под виндой для проверки можно использовать любую терминальную программу, например putty.

Далее создаем новый параметр (item) где в качестве key прописываем наш UserParameter, указанный в конфиге агента. Если все работает правильно можно продолжить.

И добавить триггер например на 28-30 градусов. Ну и после этого остается только создать новый график из этого параметра.

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

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»