Мониторинг температуры серверной своими руками

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



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

UserParameter=usbtemp,head -n1 /dev/cuaU0

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

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



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



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

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



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



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



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

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

Комментарии 59

    +3
    Мы, в свое время, решили такую задачу чисто софтовым методом — измеряли температуру внутри корпуса нескольких серверов, усредняли, и ставили триггер на превышение. По моему, стандартные счетчики температуры у системы выводились в Windows, дальше все было элементарно.
    Позднее решение дополнили бэкапным независимым датчиком с GSM модемом (обычная самая дешевая «сигналка» для дачи с датчиком температуры). На случай, если в момент отказа кондея что-то случится с сетью/системой мониторинга, или просто будет ночь.
      +1
      А не проще(дешевле) использовать что-нибудь типа SNR-ERD 3s (или аналоги)? Можно данные забирать\отправлять сразу по SNMP, 3-5 датчиков температуры. DI\DO в наличии.
        0
        Возможно проще, но вот что дешевле сильно сомневаюсь — контроллер 0.5-1$, обвязка стоит копейки, usb порт можно выкинуть и впать кабель в плату, сама плата, даже если заказывать, выйдет не дороже 2-3$.
        0

        У меня была идея разместить спереди и сзади стойки по 5-6 датчиков DS18B20, благо шина это позволяет. И стоить на основе данных тепловые карты распределения температуры воздуха. Т.к. как правило одной цифры для всей серверной может быть не достаточно.
        Но реализовать так и не довелось.

          0
          Я ставлю в серверной дополнительные вентиляторы чтобы воздух перемешивался и не было застойных зон.
          +1
          Ой как сложно. Несколько диодов и резистор в com порт. Опрашивать библиотекой digitemp. Несколько лет такая фигня уже работает.
            +1


            Соглашусь! Делал на днях наспех по этой схеме, что бы быстренько предъявить УК график температуры батареи. Данные снимаю через digitemp, картинки collectd+rrd. COM порт на материнке.
              +1
              Добавлю, что можно использовать USB-UART преобразователь, например, на CP210x — в этом случае дополнительно нужен только резистор 4.7… 10 кОм

              image

              Прекрасно работает через digitemp — баловался с мониторингом температуры и фотоконтролем за котами через Telegram-бота
                0
                Сильно упрощает. Пока навесом паял все эти диоды и стабилитроны (в наличии только 3V3 — пришлось комбинировать), наделал ошибок. Но USB-UART просто не было под рукой
                  0
                  Для DS18S20 к тому же можно попытаться паразитное питание использовать — на двух проводах датчик прицепить. Но IMHO не слишком надежный вариант, поэтому я не даже и не пробовал.
                  0
                  И GND тут нормально подключен, что повышает помехоустойчивость и живучесть при статических разрядах…
                0
                Интересно, можно ли пробросить порт в виртуальную машину vmware и опрашивать из нее?
                  0
                  Можно
                    0
                    А потом машина переедет на соседний хост и будет тщетно искать свой USB-датчик.
                    Не стоит привязывать датчик температуры к серверу. SNMP сильно лучше будет.
                      0
                      Как это отменяет мой ответ на вопрос и причём тут usb?)
                        0
                        Ответ — да, не отменяет. Но решение о пробросе физических портов сервера внутрь, до виртуалки, не имеет права на жизнь в продуктивной среде. Я ак считаю ;)
                        USB? Так в этой ветке комментов идет уже обсуждение датчиков на COM-портах и USB :)
                          0
                          Иногда лучше иметь мониторинг из говна и палок, чем не иметь никакого.
                            0
                            Кто бы спорил. Просто если есть серверная, то цена вопроса готового SNMP датчика, по сравнению с ценой вопроса решения из говна и палок, будет не сильно отличаться.
                        0
                        На момент разработки небыло нужных контроллеров, но я уже думал о реализации через SNMP, на базе — PIC32+ethernet PHY, например.
                      0
                      Да, вполне. Проверял на virtualbox, в этом случае энумерация USB устройства проходит в два этапа — хостовой осью и соответственно гостевой.
                      0
                      Можно и так, кстати у нас так сделан опрос уличного датчика, для выдачи титра с температурой. Просто когда возникла потребность в устройстве, я как раз заканчивал разбирать USB спецификации, это надо было для другого проекта, ну и подумал почему бы не сделать сразу на USB без ардуин, cp210x и прочих мам, пап, кредитов.
                      0

                      Сервер где стоит устройство должен работать. Zabbix должен работать. Канал связи тоже может внезапно упасть (например если используется провод у оператора связи может не быть резервного питания оборудования в этом здании).
                      А ведь могло быть независимое от электропитания и работоспособности сервера устройство как пишут в первом сообщении.


                      При внезапной духовке в серверной из-за внезапных отключений кондиционера на скорую руку мониторилась температура чипсета и ежедневно рассылались sms сообщения для тестирования работы всей системы.

                        0
                        Как раз в данный момент занимаюсь проектом для мониторинга\управления бензиновым генератором. Необходимо измерять уровень топлива, наличие напряжения на входе\выходе, температуру, управлять нагрузкой. Остановился на Arduino mega + Ethernet shield, библиотекой Agentuino, логированием на SD карту, и всё это с Web мордой. Если интересно, постараюсь запилить статью на эту тему.
                          0
                          Ethershield умеет неплохо так зависать
                            0
                            так у него же ресет отдельно выведен
                            0

                            Пилите статью, интересно сравнить с промышленными решениями по цене и эффективности.
                            В создании двух подобных систем принимала участие, от 50 до 250 тысяч только за железо выходило.

                              0
                              Да, писал выше в ответе на другой комментарий, что есть в планах перевод на SNMP этого дела, но на PIC32+Realtek 100mb или любой другой PHY, ардуины как-то не очень. Кстати, если ether shield на ENC28J60, то подтверждаю — зависают через рандомный промежуток времени, возможно это только в первых ревизиях, но мне хватило с ними проблем чтобы не иметь никакого желания больше использовать их в принципе, да и самих ревизий было 6 или 7, что говорит само за себя. И еще потребление под 200мА.
                                0
                                Я отказался в своих проектах на ардуино от Ethernet shield, дорого, когда устройств много, и ненадежно работает. Использую modbus на скорости 9600. Если команды на исполнительные и устройства и датчики идут с частотой от единиц минут, то все норм тянет. На шине у меня уже 10 slave устройств. Чем модбас хорош, серверную часть можно поменять на любой ПЛК по мере развития. Например мегу я со временем заменил на малину, скрипты переписал на питоне.
                                Диагностику slave устройств также легко проводить. Подключил к ПК через переходник USB-RS485 и вперед.
                                0
                                Вот немного похоже реализовывал, работает до сих пор прекрасно.
                                habr.com/ru/post/417327
                                  0
                                  У меня одно время за окном висел китайский термометр, который был подключен к ближайшему окну через USB удлинитель. Сам термометр — просто USB брелок с проводом и датчиком. Опрос производился небольшой программкой. Первый сервер работал на FreeBSD, потом был сервер на Linux. Везде работало. При поставленной задаче всё упрощается, потому что просто втыкаем брелок в любой сервер и вытягиваем провод с датчиком в удобное для измерения месте.
                                  Подключение к Zabbix? Ну если из командной строки можно получить данные на экране, то высылать эти данные в Zabbix, думаю, не составит труда. У меня эти данные через HTTP улетали на сервер в интернете по задаче в cron.
                                    0
                                    Если не секрет, какой бюджет был? Или это за свои делалось?
                                      0
                                      Судя по всему дороже, чем USB свисток готовый. По крайней мере три контроллера на алиэкспресе стоят как один свисток.
                                      0
                                      И что мы будем делать, когда температура все же начала расти? У нас же должны быть два кондиционера как минимум и блок ротации. Мониторить желательно не просто температуру в серверной, а дельту на входе и выходе кондиционера. Если с кондеем что то не так — по дельте мы узнаем о неисправности самого кондиционера раньше. И самое главное — у нас должна быть возможность включить резервный, заведомо исправный кондей. А для этого рабочий и резервный нужно переключать время от времени, например, каждые 24 часа. И мониторить, мониторить, мониторить каждый кондей, а не только температуру.
                                        0
                                        Ну и не забыть подключить резервную систему охлаждения от альтернативного источника питания.
                                          0
                                          А на деле мы имеем один бытовой кондиционер, который зависает от скачков напряжения. Даже полная остановка всех серверов от перегрева не помогает руководству понять что требуется полная переделка системы охлаждения. Тут и начинается простор для поделок мониторинга. Крупнейшая нефтяная компания, между прочим.
                                            0
                                            А на деле мы имеем один бытовой кондиционер, который зависает от скачков напряжения.
                                            Стабилизатор? Копеечная штука.
                                            Крупнейшая нефтяная компания, между прочим
                                            Ух совок блин.
                                              0
                                              За свой счёт, пожалуйста.
                                              0
                                              я бы рекомендовал вам рассмотреть вариант установки рекуператора в пару к кондеционеру.
                                                0
                                                полная остановка всех серверов от перегрева

                                                Помимо факта остановки следует помнить, что это и на продолжительности жизни железа может сказаться.
                                                0
                                                Пожалуй самое грамотное решение при условии что есть второй кондей.
                                                А то иногда и первого нету.
                                                  0
                                                  Ну выводить во внешний контроль блок управления кондиционерами я бы не рискнул по причине безопасности. А вот наличие автономного переключателя — и не роскошь. При привышении температуры просто в работу вводится вторая система охлаждения (у меня переключением занимается kg316t с некоторым обвесом).
                                                    0
                                                    Вводить вторую систему по превышении можно банально разной уставкой кондиционеров. На первом +21С на втором +25С и он включится только при выходе из стоя первого. Раз в месяц (неделю, квартал) уставки первого и второго менять местами для выравнивания износа агрегатов и контроля исправности. Из недостатков тут только человеческий фактор — уставки забыл поменять, никогда не менял, и в результате в момент аварии второй не завелся ибо сдох еще пол года назад.
                                                  0
                                                  Я честно говоря не понимаю зачем изобретать велосипед, в серверах присутствует все необходимое(самосбор это не сервер) можно мониторить температуру встроенными системами мониторинга…
                                                    0
                                                    Да, если в большинстве установленных серверов есть BMC, то как правило с него можно снимать показания всех датчиков сервера через SNMP, где есть не только температура воздуха но и температура выхлопа сервера.
                                                    А общие показания температуры воздуха самой серверной полезны в том случае если таких серверов не подавляющее большинство, да плюс с вручную управляемыми кондеями.
                                                    0

                                                    Я делал мониторинг температуры в серверной с использованием плат NMC2 AP9631, вставляемых в качестве платы расширения в ИБП фирмы APC. В каждой стойке был как минимум один ИБП, показания которого в любом случае также хотелось мониторить, на предмет режима работы, температуры батарей, входного и выходного напряжения, оставшегося заряда. Эта плата позволяет подключить и управлять ИБП через сеть, собирать показания через SNMP. А также с ней в комплекте идет выносной температурный датчик с магнитным креплением, на проводе около 2 метров. Разместив эти датчики в удобных местах на каждой стойке, примерно в 1,7 метра над полом, получил картинку температуры воздуха возле каждой стойки, причем по сути как дополнительный бонус. Очень удобно.

                                                      0
                                                      del
                                                        0
                                                        Тоже сначала рукоблудничал с Ардуино типо такого habr.com/ru/post/394909, но мне тогда обхаяли это решение.
                                                        Да и на самом деле после того как одно такое изделие сдохло сделали получение данных с термодатчика блэйда через SNMP

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

                                                          А у меня в серверной почти в каждой стойке top-of-rack switch есть с датчиками температуры
                                                          которые вполне нативно мониторятся тем же заббиксом
                                                            0
                                                            После того как повысилась температура, желательно начинать действовать сразу, включать кондиционер или вентиляцию или что у Вас еще припасено, независимо есть канал связи или нет, графики это для общей картины на объекте или последующего анализа. Один из вариантов решения подобных задач описывал в статье, там и графики и архивы habr.com/ru/post/424791, с нужным количеством каналов можно реализовать всю необходимую автоматику. Сейчас на той же плате добавил работу с датчиками ds18b20, можно подключить на шину до 16 шт, пока тестирую на 8 разведенных по дому витой парой, общая длина метров 40, значения можно архивировать, выводить на WEB страницу, читать через Modbus TCP, а если использовать с программируемым реле то можно реализовать управляющие алгоритмы. В автономной работе без программируемого устройства можно еще добавить датчик влажности, еще все значения можно отправлять по mqtt, есть несколько роликов с примерами youtube.com/channel/UCj4HeZMvSH5H3d_t6iDlQOQ
                                                              0
                                                              либо подключить внешний UART-USB мост типа CP2102. Не очень люблю подобные костыли

                                                              Ну понятно в этом своя схемотехническая красота, минимализм.
                                                              Но мост это специализированное аппаратное решение, заточенное на работу с USB, а в микроконтроллере может быть минимальная обвязка самая. Есть ли там защита от статики? На схеме для согласования с USB портом всего 2 резистора на 33 Ома. В промышленных решениях и гальваническую развязку добавляют, и сложные цепи согласования, это не костыль, а необходимость, вот пример, и схема.
                                                                0
                                                                Ну во первых. Я бы согласился с подобным комментарием, если USB был реализован как в V-USB — так называемым «ногодрыгом», то есть — софтово, однако в данном случае USB модуль контроллера (SIE) аппаратный и полностью, в том числе электрически, совместим со стандартом USB 2.0 и реализует физический уровень, это сказано в даташите, так что не соглашусь — 210x и прочие преобразователи считаю избыточными, так как тот же функционал заложен в самом МК. Во вторых, упомянутый cp2102 не имеет развязки и ESD защиты, и под костылем я подразумевал сам UART-USB мост, а не навесную ESD защиту, которая впрочем, может быть добавлена и к данной схеме. Но не вижу в этом необходимости, так как это устройство ни в коей мере не претендует на статус промышленного решения, и скорее сделано как временное до перехода на SNMP, о чем я думаю, так-же расскажу в дальнейших публикациях. Так в планах есть мониторить не только температуру…
                                                                0
                                                                Мы снимаем показания с длинного датчика от UPS APC. Датчик прицеплен к верху шкафа.
                                                                  0
                                                                  а как-же ардуиной по воробьям? И не надо своих библиотек писать и датчики можно разные использовать.
                                                                    0
                                                                    Огромный минус библиотек ардуины, то что они закрыты и это вызывают много вопросов относительно методов и корректности их реализации, если уж использовать библиотеки — то официальные от производителя самих контроллеров, в данном случае это Microchip. Хотя и в этом случае нет страховки от т. н. «индусского кода». Что касается своих либ, то это скорее спортивный интерес, чем реальная необходимость. Однако не весь требуемый функционал предоставляется официальными и сторонними либами.
                                                                      0
                                                                      Ардуино, закрытые библиотеки? что вы курите?
                                                                        0
                                                                        Извиняюсь, возможно я что-то путаю, так как не особо слежу за этой платформой. Поправьте если я ошибаюсь, но по сути ардуино — это отладочная плата с довольно примитивной схематикой и блокнотоподобное недоIDE использующее avr-gcc в качестве компилятора, в котором неудобно работать с древовидным проектом, да и любым проектом, содержащим более одного файла. И набор библиотек сомнительного качества, непонятно кем написанных, от того что они открытые по сути ничего не меняется. Так как опять же повторюсь — для AVR есть официальные либы от производителя, тогда это был Atmel, сейчас Microchip. Как при своем появлении, ардуино не вызвала никакого интереса, так и сейчас ничего не изменилось. Хотя для тех кто «не шарит» в электронике и программировании контроллеров и не хочет заморачиваться с разведением и пайкой плат — пойдет. Однако какой в этом интерес, когда все уже сделано за тебя?..
                                                                          0
                                                                          Я тоже не поклонник ардуин, но если надо что-то быстро проверить, за 2 минуты любой пример можно загрузить и проверить. Что касается плат, разницы нет, hex загружается в камень, а не плату. По поводу древовидного проекта, видел много исходников с отдельно открывающимися вкладками.
                                                                            0
                                                                            Ну, кстати да согласен, если надо что-то быстро слабать на коленке, дуина вполне покатит.
                                                                    0
                                                                    Не знаю, насколько это может быть актуально, но я тут одну систему строю, она позволяет через web «общаться» с устройствами через UART. Я немного подзабросил разработку ввиду слабого интереса общественности, но если будут заинтересованные люди — связывайтесь.
                                                                    Если интересно взглянуть на демо:

                                                                    18.224.10.61

                                                                    username: operator_0
                                                                    password: 123456789
                                                                    Выбрать QA_Test и потом station_0

                                                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                    Самое читаемое