Осуществляем удаленный мониторинг температуры микросервера при помощи сервиса ThingSpeak

Любой компьютер имеет вполне определенные температурные рамки, в которых он может работать. Обычные персоналки рассчитаны на комнатную температуру и могут начать нестабильно работать либо вообще выйти из строя, если, например, их поместить в помещение с температурой +50С. Для специализированного оборудования, применяемого с промышленными целями, ситуация может быть кардинально иной. Так высокопроизводительные сервера не будут работать без принудительного внешнего охлаждения, подающего воздух, охлажденный до температуры как максимум 16 градусов. Ну а что же наш микросервер, разработка которого подробно описана на страницах блога?

Микросервер по своей начинке мало чем отличается от обыкновенной персоналки. Да, компоненты подбирались качественные, жесткий диск так вообще специализированный. А что насчет охлаждения? С охлаждение тут все не так просто. С одной стороны, в изначальной версии микросервера охлаждение сугубо пассивное (да и в последующих модернизациях, вентиляторы включаются уж при шибко нестандартных условиях). На относительно немощном процессоре установлен алюминиевый радиатор. И все.

В таком режиме оборудование живет в режиме полного соответствия с окружающей средой. Критическими элементами в микросервере, с точки зрения температуры, назову всего два: центральный процессор и жесткий диск. Без активного охлаждения — единственной защитой от перегрева для оборудования является только снижение производительности. Процессоры от Intel оснащаются технологией снижения производительности при превышении температурного порога уже лет так двадцать или около того. При перегреве процессор сбрасывает тактовую частоту и начинает работать медленнее. А вот у жесткого диска такого выбора нет. Если на него поступают команды, то он будет их выполнять. И греться, греться, греться…

Значения температуры ядер процессора на ThingSpeak

Значения температуры ядер процессора на ThingSpeak

Что плохого если оборудование будет работать при повышенной температуре? Ответ здесь весьма прост — устройства выйдут из строя намного быстрее, нежели при работе при нормальной температуре. При превышении максимальной рабочей температуры, а для каждой модели процессора максимальная температура может быть своей. При температуре в 120 градусов Цельсия, кремниевые полупроводники перестают работать. Зависание процессора еще полбеды. Из-за интенсивного нагрева могут появиться микротрещины в самом кристалле или оторвутся едва видимые «волоски» контактов под крышкой кристалла.

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

С другой стороны, слишком низкая температура может не менее негативно влиять на работоспособность компьютерного оборудования. Большинство электронных компонентов плохо переносят любые отрицательные температуры. Не говоря уже о -20 или -40 градусов. Если предполагается, что компьютер должен работать в состоянии глубокого мороза, то и сам компьютер необходимо брать специально спроектированный для работы в холоде и собранный из соответствующих компонентов.

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

ThingSpeak

И тут на сцену выходит специализированный сервис ThingSpeak. Сервис, разработанный специально для мониторинга и протоколирования данных многочисленных устройств Интернета вещей. Сервис строится на основах открытого программного обеспечения и стыкуется с таким продуктом как MATLAB (для анализа и обработки накапливаемых данных).

На текущий момент ThingSpeak бесплатен и хочется надеяться, что таковым и останется. Разобраться с тем, как работать с инструментами ThingSPeak можно всего за несколько часов. Система очень простая, но благодаря своей простоте она еще и гибка, отсюда открывается поистине неограниченные возможности по сбору и манипулированию числовыми данными. Причем пользователю дается возможность либо использовать облачный сервис ThingSpeak, либо установить частное решение на свой компьютер.

Помимо штатных возможностей в систему можно интегрировать расчеты и визуализацию MATLAB. Но и это еще не все. При наличии желания к системе можно подключать дополнительные плагины. Например, стрелочные показометры от Google, позволяющие быстро оценить величину значения, не вчитываясь в цифири.

В целом — сервис весьма и весьма годный, хоть и заточенный только на цифровые значения. Осталось только его заиспользовать под личные микросерверные нужды.

Передаем показания термометров с микросервера в ThingSpeak

Напомню, что используемый в эксплуатации микросервер построен на двухядерном процессоре от Intel, оснащен одним диском WD Red и работает под управлением операционной системы Ubuntu. Система позволяет просматривать температуру жесткого диска, обоих ядер процессора и температуру материнской платы. Для меня критическими параметрами является температура как раз ядер процессора и жесткого диска. А вот материнская плата не так важна. Нет, конечно, без нее ничего работать не будет, но перегреть материнскую плату — надо ой как постараться.

Для получения температуры жесткого диска необходимо установить приложение hddtemp из стандартного репозитория Ubuntu. При вызове приложения, оно выдает примерно следующую информацию:

root@J1800:/home/vlad# hddtemp /dev/sda
/dev/sda: WDC WD10JFCX: 40°C

То есть для получения температуры жесткого диска нужно вызвать hddtemp и передать ему в качестве параметра путь до вашего жесткого диска. Само собой, если в системе есть несколько дисков, то получить информацию можно по ним по всем за несколько запусков приложения. А для облегчения использования результатов в автоматическом мониторинге полезно применить параметр «-n», в этом случае приложение возвращает только цифру с температурой.

Чтобы узнать температуру процессора можно использовать пакет программ lmsensors, опять же, из стандартного репозитория Ubuntu. После первичной настройки датчиков вызов осуществляется через «sensors –u». Результат вывода примерно следующий и зависит от конкретного используемого оборудования. У меня получилось примерно следующее:

root@J1800:/home/vlad# sensors -u
acpitz-virtual-0
Adapter: Virtual device
temp1:
  temp1_input: 26.800
  temp1_crit: 90.000
coretemp-isa-0000
Adapter: ISA adapter
Core 0:
  temp2_input: 57.000
  temp2_max: 105.000
  temp2_crit: 105.000
  temp2_crit_alarm: 0.000

Core 1:
  temp3_input: 57.000
  temp3_max: 105.000
  temp3_crit: 105.000
  temp3_crit_alarm: 0.000

Значений выдается много, из них необходимо получить только два искомых, а именно температуру обоих ядер. Справиться с этой задачей нам помогут регулярные выражения. Кстати, для их отработки удобно использовать онлайн-редакторы для регэкспов. Для разработки нужного выражения я воспользовался безвозмездными услугами сервиса regex101.com.

Работающее выражение для вычленения температуры ядра 0 может быть таким «/(?<=temp2_input: )\d+/». Но, поскольку всю обработку и последующую отправку значений на сервера ThingSpeak я буду делать через скрипт Bash, то для обработки регулярного выражения мне придется использовать утилиту grep. Но не все так просто как кажется.

Начнем с того, что grep необходимо вызывать с параметрами «-Po», где «P» означает использование регулярных выражений с функциональностью из Perl, а параметр «o» говорит о том, что нужно возвращаться только найденное значение, а не всю строчку. Но и это еще не все, grep из Ubuntu немного отличается от обработчиков регулярных выражений в других языках, поэтому пришлось модифицировать и само выражение. После того как оно приняло вид «temp2_input: \K\d+» grep начал нормально выводить цифровые значения.

Немного о самом регулярном выражении. Оно относительно простое, хотя разобраться с самими выражениями начинающему очень и очень непросто. Чтобы получить цифру температуры, нам необходимо найти соответствующую строчку и позицию значащих цифр температуры. Соответственно «temp2_input: » (именно так, с пробелом) находит нужное место в выводе sensors, а последующая команда «\d+» собирает все цифры, в нашем случае до точки. Возможно, что в случае применения выражения на другом компьютере его будет необходимо слегка модифицировать под конкретный вывод. Остался модификатор «\K» (именно большая буква), который обнуляет позицию для поиска цифрового паттерна, т. е. он будет анализировать текст сразу после найденной подстроки.

Осталось собрать весь код в скрипт и поместить его в планировщик для регулярного вызова. Скрипт у меня получился следующий:

APIKey="XXXXXXXXXXXXX"
HDDTemp=$(/usr/bin/hddtemp -n /dev/sda)
Core1Temp=$(sensors -u | grep -Po 'temp2_input: \K\d+')
Core2Temp=$(sensors -u | grep -Po 'temp3_input: \K\d+')
ThingSpeakURL="https://api.thingspeak.com/update?api_key=$APIKey&field1=$HDDTemp&field2=$Core1Temp&field3=$Core2Temp"
curl -m 30 $ThingSpeakURL

При вводе скрипта не совершайте мою ошибку. В Unix и Windows-системах конец строки обозначается слегка по-разному. И текст скрипта, набранный под Windows, будучи запущен под Unix может приводить к чудесатым эффектам. Если просмотреть такой текст в текстовом редакторе под Ubuntu, то в конце строк будут заметны символы «^M», которые следует удалить иначе скрипт нормально работать не будет.

Поясню команды скрипта немного подробнее. Первым делом вместо многочисленных иксов нужно ввести ваш ключ API, который можно посмотреть в настройках вашего канала на сервере ThingSpeak. Ключ уникальный, посему не требуется вводить также и номер канала. Разумеется, прежде чем отправлять данные на ThingSpeak, там нужно зарегистрироваться и создать новый канал с тремя (или сколько требуется) полями.

Сводная температура ядер и показометр от Google

Сводная температура ядер и показометр от Google

Второй строкой получаем температуру жесткого диска через приложение hddtemp. Обратите внимание на то, что я прописал путь к приложению. Путь требуется по той причине, что получить доступ к температуре жесткого диска hddtemp может только лишь обладатель привилегий суперпользователя, по крайней мере в Ubuntu 16. Поэтому скрипт запускать придется под учетной записью root, что не очень здорово, но по-другому у меня не заработало. А учетная запись root далеко не всегда обладает правильными путями для поиска установленных приложений.

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

Далее формируем строку отправки значения методом GET. По сути, строка есть не что иное как обычный URL с подставленными в него значениями. И, наконец, последней строкой отправляем сформированную строку со значениями температуры на сервер ThingSpeak посредством приложения curl. Параметр «-m 30» задает таймаут в размере 30 секунд на отправку значения. Результатом ThingSpeak возвращает порядковый номер полученной записи.

Осталось только поместить скрипт в планировщик и задать интервал отправки сведений. В моем случае достаточно 30 минутного интервала для получения исчерпывающей статистики по температурам микросервера.

Что в итоге

После того как скрипт проработает некоторое время и на сервисе наберется некоторое количество значений, начинает работать статистика. Можно построить серединные и медианные линии, а при наличии способностей программирования MATLAB возможно построить уже серьезные графики и визуализации.

Температура HDD и сводный график построенный средствами MATLAB

Температура HDD и сводный график построенный средствами MATLAB

Подводя итог, хочу заметить, что, с одной стороны, реализация мониторинга весьма проста, а с другой стороны сведений получить от нее можно уйму. Проследить и проконтролировать, в том числе и удаленно (даже с уведомлениями в Twitter), температурные режимы работы ваших изделий.

Конечно, сервис ThingSpeak был задуман немного для другого, а именно для получения сведений о погоде в различных регионах. Представьте, что миллионы устройств по всему миру собирают сведения по температуре и влажности и передают их в единый центр. С такой плотностью сети погодные модели могут быть значительно улучшены. Но видимо, сие есть дело недалекого будущего, а пока приходится довольствоваться отечественными сервисами отображающими только фактическую, но реально измеренную температуру и влажность. Ну и использовать ThingSpeak для своих собственных целей, разумеется.



Осуществляем удаленный мониторинг температуры микросервера при помощи сервиса ThingSpeak: Один комментарий

  1. Уведомление: Измеряем температуру, влажность и отслеживаем показания газового счетчика с использованием ThingSpeak. Часть 1. Используем Arduino Uno R3. | Многобукф

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