- Прикручиваем мониторинг параметров smart или какой-либо температуры (cpu, motherboard) к Zabbix
- Мониторинг температуры процессора в Zabbix
- Установка lm_sensors
- Установка скрипта
- Настройка Zabbix сервера
- Вызов скрипта через zabbix-agent
- Результат
- Обсуждение
- Мониторим через zabbix температуру cpu и уровень заряда батареи
- От ekzorchik
Прикручиваем мониторинг параметров smart или какой-либо температуры (cpu, motherboard) к Zabbix
Собственно не нашел собранной в кучу статьи как прикрутить к zabbix мониторинг какой-либо температуры, поэтому решил написать свою.
Задача1.
Имеем установленную и настроенную систему мониторинга zabbix 1.8.2. Нужно прикрутить мониторинг температуры жестких дисков (или любого другого параметра smart) на linux-сервере (debian).
Поехали.
1. Устанавливаем пакет smartmontools.
2. Команда
выводит все параметры smart, ищем там значение температуры.
3. У меня параметр называется Temperature_Celsius.
4. Далее необходимо из вывода команды smartctl выбрать значение температуры. Это можно сделать одной строкой, но проблема в том, что zabbix-agent запустит эту команду от пользователя zabbix, а она требует прав рута. Можно конечно добавить в sudoers пользователя zabbix, ну или ещё что-то, но я просто добавил запуск скрипта
#!/bin/sh #get temperature of HDD and save it into temporary file /user/sbin/smartctl --all /dev/sdX | grep Temperature > /tmp/smart
в crontab c периодичностью запуска 15 минут (конечно напрягает запись в syslog каждые 15 минут, потом может переделаю).
5. Теперь добавляем в конфиг zabbix-агента пользовательский параметр, в котором выбираем только последние три байта файла (после grep там получается строка, в которой последние два знака и есть температура винчестера, третий знак это конец строки наверное)
Делаем рестарт демона zabbix-agent.
И не забываем, что если не добавить в конфиг агента UnsafeUserParameters=1, то в командах недопустимы символы: \ ‘ ” ` *? [ ] < >~ $! &; ( ) < >| # @.
6. Смотрим логи агента на предмет ругательств. Проверяем на zabbix-сервере работает ли наш параметр
zabbix_get -s hostname -p 10050 -k “smart_ct”
7. Ну а теперь дело техники-добавляем из веб-морды zabbix новый элемент данных к хосту, триггер, и, собственно, всё.
Побочный эффект-я смотрю таким образом температуру в серверной.
Задача 2.
Имеем установленную и настроенную систему мониторинга zabbix 1.8.2. Нужно прикрутить мониторинг температуры системной платы (процессора, памяти etc) на linux-сервере (debian). Встроенные изначально элементы данных с ключами sensor[temp1|2|3] пишут, что не поддерживаются.
Поехали
1. Устанавливаем пакет lm-sensors.
2. Запускаем команду
на все вопросы кроме последнего отвечаем да. Если найдутся поддерживаемые железки, то видим (в моем случае) примерно следующее
To load everything that is needed, add this to /etc/modules:
#—-cut here—-
# Chip drivers
coretemp
f71882fg
#—-cut here—-
Выделенное жирным это модули ядра, которые далее предлагают добавить в /etc/modules. Но я хочу их попробовать по отдельности, поэтому отвечаем «нет» и пользуем modeprobe.
4. Подгружаем модули, после подгрузки coretemp команда sensors снова ничего не выдала, поэтому я его выгрузил и подгрузил f71882fg. Вот теперь команда sensors показывает всё что надо и не надо, в том числе скорость вращения кулеров и температуру МП. После отбора по нужной температуре имеем следующий вывод от sensors
5. Так как команда sensors не требует прав рута, то добавляем пользовательский параметр в zabbix-агент
тут пришлось немного вспомнить регулярные выражения, в итоге получилась такая конструкция для извлечения температуры из строчки. Уверен, что можно сделать проще, но опыта не хватает. Ещё добавляем в конфиг агента строчку UnsafeUserParameters=1 (зачем написано выше). Делаем рестарт демона zabbix-agent.
6. Смотрим логи агента на предмет ругательств, проверяем на zabbix-сервере работает ли параметр
zabbix_get -s hostname -p 10050 -k “temp_mb”
7. Ну а теперь дело техники-добавляем из веб-морды zabbix новый элемент данных к хосту, триггер, и, собственно, всё.
Количество параметров, которые выводит команда sensors естественно зависит от железа. Возможно у кого-то и работают встроенные изначально в zabbix элементы данных по мониторингу температуры, но мне не повезло…
Мониторинг температуры процессора в Zabbix
Т.к. не везде есть строка «Physical id» с уже максимальной t, то обойтись простым grep’ом не получится, поэтому используется awk для выборки max t ядра на каждом процессоре.
coretemp-isa-0000 Adapter: ISA adapter Physical id 0: +44.0°C (high = +81.0°C, crit = +91.0°C) Core 0: +43.0°C (high = +81.0°C, crit = +91.0°C) Core 1: +38.0°C (high = +81.0°C, crit = +91.0°C) Core 2: +45.0°C (high = +81.0°C, crit = +91.0°C) Core 3: +37.0°C (high = +81.0°C, crit = +91.0°C) Core 4: +43.0°C (high = +81.0°C, crit = +91.0°C) Core 5: +42.0°C (high = +81.0°C, crit = +91.0°C) coretemp-isa-0001 Adapter: ISA adapter Physical id 1: +43.0°C (high = +81.0°C, crit = +91.0°C) Core 0: +39.0°C (high = +81.0°C, crit = +91.0°C) Core 1: +40.0°C (high = +81.0°C, crit = +91.0°C) Core 2: +43.0°C (high = +81.0°C, crit = +91.0°C) Core 3: +41.0°C (high = +81.0°C, crit = +91.0°C) Core 4: +41.0°C (high = +81.0°C, crit = +91.0°C) Core 5: +41.0°C (high = +81.0°C, crit = +91.0°C)
coretemp-isa-0000 Adapter: ISA adapter Core 0: +22.0°C (high = +80.0°C, crit = +96.0°C) Core 1: +17.0°C (high = +80.0°C, crit = +96.0°C) Core 2: +21.0°C (high = +80.0°C, crit = +96.0°C) Core 8: +23.0°C (high = +80.0°C, crit = +96.0°C) Core 9: +22.0°C (high = +80.0°C, crit = +96.0°C) Core 10: +24.0°C (high = +80.0°C, crit = +96.0°C) coretemp-isa-0001 Adapter: ISA adapter Core 0: +15.0°C (high = +80.0°C, crit = +96.0°C) Core 1: +21.0°C (high = +80.0°C, crit = +96.0°C) Core 2: +18.0°C (high = +80.0°C, crit = +96.0°C) Core 8: +20.0°C (high = +80.0°C, crit = +96.0°C) Core 9: +18.0°C (high = +80.0°C, crit = +96.0°C) Core 10: +17.0°C (high = +80.0°C, crit = +96.0°C)
Установка lm_sensors
Device Drivers ---> [*] I2C support ---> Hardware Monitoring support ---> [*] Intel Core/Core2/Atom temperature sensor
Установка скрипта
Создание папки для скриптов:
mkdir /etc/zabbix/scripts/ chown root:zabbix -R /etc/zabbix/scripts/ chmod 750 /etc/zabbix/scripts/
#!/bin/bash export LC_ALL="" export LANG="en_US.UTF-8" # if [[ -z $1 || -z $2 ]]; then ##### DISCOVERY ##### PROCESSORS=`sensors 2>&1 | awk '> END '` if [[ -n $ ]]; then JSON="< \"data\":[" SEP="" for CPU in $ ; do JSON=$ "$SEP\"\":\"$ \">" SEP=", " done JSON=$ "]>" echo $ fi exit 0 else ##### PARAMETERS ##### HOST="$1" CPUNAME="$2" TABLE=`sensors 2>&1 | awk ' if (tolower($1)=="core") < if ($3 >temperature[counter]) temperature[counter] = $3;>> END '` echo "$ " | awk "/$ / \$2>" | head -n1 # fi
Скрипт поддерживает обнаружение (discovery) процессоров.
chown root:zabbix /etc/zabbix/scripts/lmsensors.sh chmod 550 /etc/zabbix/scripts/lmsensors.sh
Проверить работу скрипта для zabbix:
sudo -u zabbix /etc/zabbix/scripts/lmsensors.sh none CPU0
Вы должны получить данные, если этого не произошло, то конфигурация выполнена не правильно.
Настройка Zabbix сервера
Вызов скрипта через zabbix-agent
. UserParameter=lmsensors[*],/etc/zabbix/scripts/lmsensors.sh "none" $1
/etc/init.d/zabbix-agentd restart
zabbix_get -s HOST -k "lmsensors[CPU0]"
Для контролируемых данных в Zabbix нужно создать соответствующее элементы с типом «Zabbix агент» и ключом типа:
где CPUNAME — имя процессора
Готовый Шаблон для мониторинга lmsensors (agent) с уже настроенными элементами и графиками.
Результат
Обсуждение
Не работает скрипт. Вот вывод sensors:
atk0110-acpi-0 Adapter: ACPI interface Vcore Voltage: +1.14 V (min = +0.85 V, max = +1.60 V) +3.3 Voltage: +3.17 V (min = +2.97 V, max = +3.63 V) +5 Voltage: +4.94 V (min = +4.50 V, max = +5.50 V) +12 Voltage: +11.83 V (min = +10.20 V, max = +13.80 V) CPU FAN Speed: 2445 RPM (min = 600 RPM) CHASSIS1 FAN Speed: 0 RPM (min = 800 RPM) CHASSIS2 FAN Speed: 2445 RPM (min = 800 RPM) CHASSIS3 FAN Speed: 0 RPM (min = 800 RPM) POWER FAN Speed: 0 RPM (min = 800 RPM) CPU Temperature: +53.5°C (high = +60.0°C, crit = +95.0°C) MB Temperature: +40.0°C (high = +45.0°C, crit = +95.0°C)
Вывод отличается, поэтому и не работает. В вашем случае парсить легче, но мой скрипт не подходит в таком виде
А если такой вывод? sensors
k10temp-pci-00c3 Adapter: PCI adapter temp1: +31.0°C (high = +70.0°C) (crit = +70.0°C, hyst = +68.0°C) w83627dhg-isa-0290 Adapter: ISA adapter Vcore: +1.37 V (min = +0.00 V, max = +1.74 V) in1: +0.24 V (min = +1.09 V, max = +0.44 V) ALARM AVCC: +3.42 V (min = +2.98 V, max = +3.63 V) +3.3V: +3.42 V (min = +2.98 V, max = +3.63 V) in4: +1.71 V (min = +1.54 V, max = +0.29 V) ALARM in5: +1.70 V (min = +0.09 V, max = +0.50 V) ALARM in6: +1.84 V (min = +0.92 V, max = +0.37 V) ALARM 3VSB: +3.46 V (min = +2.98 V, max = +3.63 V) Vbat: +3.41 V (min = +2.70 V, max = +3.63 V) fan1: 0 RPM (min = 1054 RPM, div = 128) ALARM fan2: 1371 RPM (min = 3245 RPM, div = 8) ALARM fan3: 0 RPM (min = 811 RPM, div = 128) ALARM fan5: 0 RPM (min = 753 RPM, div = 128) ALARM temp1: +41.0°C (high = -120.0°C, hyst = -84.0°C) ALARM sensor = thermistor temp2: +42.5°C (high = +80.0°C, hyst = +75.0°C) sensor = thermistor temp3: +33.5°C (high = +80.0°C, hyst = +75.0°C) sensor = thermistor cpu0_vid: +1.400 V intrusion0: ALARM
Отличная статья. Спасибо. Есть только небольшая опечатка. С chmod 700 скрипт от юзера zabbix выполняться не будет , т.к. владелец root , а группа zabbix у файла Нужно chmod 750 /etc/zabbix/scripts/lmsensors.sh
Мониторим через zabbix температуру cpu и уровень заряда батареи
Хочу добавить в послесловие ранее опубликованной заметке, где показал, как с помощью Zabbix мониторить температуру жесткого диска своего ноутбука. После опубликования заметки ранее поставил себе задачу:
Задача: Хочу наблюдать за изменением температуры моего процессора и наглядно видеть с течением времени уровень заряда батареи (когда не использую подключение к сети энергопотребления)
Задача: поставить на мониторинг как разряжается мой ноутбук без внешнего подключения к источнику питания.
Ниже действия и строки которые нужно проделать так же как в заметке ранее.
Чтобы анализировать уровень заряда батерии нужно:
keiz@dv6:~$ acpi -b
Battery 0: Discharging, 94%, rate information unavailable
keiz@dv6:~$ acpi -b | awk » > battery
keiz@dv6:~$ cut -d % -f 1 battery
90
keiz@dv6:~$ acpi -b | awk » | cut -d % -f 1
92
keiz@dv6:~$ sudo nano /usr/lib/zabbix/externalscripts/battery
#!/bin/bash
acpi -b | awk » | cut -d % -f 1
exit
keiz@dv6:~$ sudo chmod +x /usr/lib/zabbix/externalscripts/battery
keiz@dv6:~$ sudo nano /etc/zabbix/zabbix_agentd.conf
UserParameter=battery[*],/usr/lib/zabbix/externalscript/battery
keiz@dv6:~$ sudo service zabbix-server restart
* Stopping Zabbix server zabbix_server [ OK ]
* Starting Zabbix server zabbix_server [ OK ]
keiz@dv6:~$ sudo service zabbix-agent restart
* Stopping Zabbix agent zabbix_agentd [ OK ]
* Starting Zabbix agent zabbix_agentd
Новоя политика где собраны буду скрипты мониторящие температуру внутренних устройств моего ноутбука :
keiz@dv6:~$ sudo zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t battery
battery [t|99]
А чтобы мониторить изменение температуры моего CPU:
keiz@dv6:~$ cat /etc/script/cpu
#!/bin/bash
/usr/bin/acpi -V | grep ‘degrees’ | head -n 1
exit
keiz@dv6:~$ acpi -V | grep ‘degrees’ | head -n 1 | awk »
81.0
keiz@dv6:~$ sudo zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t cpu
cpu [t|81.0]
Вот собственно и все действия посредством которых решилась моя задумка, если кто знает как сделать по другому буду рад услышать Ваши комментарии или скинутые наработки к себе на почту. А пока считаю, что заметка полностью описывает поставленную здесь задачу, на этом все с уважением, автор блога — ekzorchik.
От ekzorchik
Всем хорошего дня, меня зовут Александр. Я под ником — ekzorchik, являюсь автором всех написанных, разобранных заметок. Большинство вещей с которыми мне приходиться разбираться, как на работе, так и дома выложены на моем блоге в виде пошаговых инструкции. По сути блог — это шпаргалка онлайн. Каждая новая работа где мне случалось работать вносила новые знания и нюансы работы и соответственно я расписываю как сделать/решить ту или иную задачу. Это очень помогает. Когда сам разбираешь задачу, стараешься ее приподнести в виде структурированной заметки чтобы было все наглядно и просто, то процесс усвоения идет в гору.