22

Мониторинг UPS APC и EATON

В предыдущемпосте была показана реализация аппаратной riktak-коробочки на esp8266 со smart протоколом для APC. По реакции мнения разделились: Кто-то сказал "купи сетевую плату за 3 рубля" или добавь еще что-то, или "нафига это, когда есть то". Но в общем есть, то что есть. И да, по работе мне приходится мониторить бесперебойники, и да, в них есть сетевые карты - они разные и не все идеально работают.

Сейчас хотелось бы поделиться скриптом на PHP для мониторинга бесперебойников APC и EATON по snmp.

Предупреждая комментарии, я знаю что такое ZABBIX и также им всё мониторю и я знаю, что такое APC powerChute - это всё громоздко и ресурсоёмко. Свести визуально воедино ни заббиксом и чем-то другим не получилось.

Скрипт написал для собственного удобства - может кому-то сгодится.

Требования: apache/nginx + php + php-snmp и включенный snmp1 на чтение в устройствах.

Возможности:

1- показ состояния бесперебойников, всяких температур, напряжений, оставшегося времени в одной таблице - красоту сами наводите.

2 - с аргументом dailyreport отправляет на почту (нужное исрпавить).

Должно получиться примерно следующее

Мониторинг UPS APC и EATON

Мониторинг UPS APC и EATON

Требуется отредактировать массивы $urls и $urls2, добавив список свйих УПС, а также почтовые адреса, если нужны рассылки.

Сильно не пинайте, чукча - не чукча и тд..

Источник или немного кода ниже:

<?php

// apt-get install php-snmp

// snmp 1 public readonly

$urls = array( // eatons

"192.168.1.55",
"192.168.1.57",
"192.168.1.16",
"192.168.1.60"
);

$urls2 = array( // APC

"192.168.1.25", "192.168.1.239",
"192.168.1.230",
"192.168.1.231" );

$pr="<html><body><table width= \"100%\" border=\"1\" cellpadding='5' cellspacing=\"0\"> <tr bgcolor=\"#ddd\" style=\"background-color:#ddd\"> <td>IP</td> <td>Расположение</td> <td>Модель</td> <td>Источник питания</td> <td>Нагрузка<br />%</td> <td>Зарядка<br />%</td> <td>Оставшееся<br>время</td> <td>Состояние<br />батареи</td> <td>Температура <br />(вн/нар)/Влажн.</td> </tr>";

for ($i = 0; $i<count($urls); $i++)

{

$pr.="<tr><td><a href=\"http://".$urls[$i]."/\" target=\"_blank\">".$urls[$i]."</a></td>";

$session = new SNMP(SNMP::VERSION_1, $urls[$i], "public");

$session->valueretrieval = SNMP_VALUE_PLAIN; $s = $session->walk("1.3.6.1.2.1.1.5.0", TRUE);

foreach ($s as $val)

{

$pr.= "<td><b>$val</b></td>";

}

$s = $session->walk("1.3.6.1.2.1.33.1.1.2.0", TRUE);

foreach ($s as $val)

{

$pr.= "<td><b><font color=\"#00f\" style=\"color:#00f;\">$val</font></b></td>"; }

$s = $session->walk("1.3.6.1.4.1.534.1.3.4.1.2.1", TRUE);

foreach ($s as $val) { $pr.= "<td>$val Volt</b></td>"; }

$s = $session->walk("1.3.6.1.4.1.534.1.4.1.0", TRUE); foreach ($s as $val) { $pr.= "<td align='right'></b>$val %</td>"; }

$s = $session->walk("1.3.6.1.4.1.534.1.2.4.0", TRUE); foreach ($s as $val) { $pr.= "<td align='right'>$val %</td>"; } $s = $session->walk("1.3.6.1.4.1.534.1.2.1.0", TRUE); foreach ($s as $val) {

$pr.= "<td>".round($val/60)." min</td>"; }

$s = $session->walk("1.3.6.1.4.1.705.1.5.9.0", TRUE); foreach ($s as $val) if($val=="2") $res1 = 2; else $res1 = 1; $s = $session->walk("1.3.6.1.4.1.705.1.5.15.0", TRUE); foreach ($s as $val) if($val=="2") $res2 = 2; else $res2 = 1; $s = $session->walk("1.3.6.1.4.1.705.1.5.11.0", TRUE); foreach ($s as $val) if($val=="2") $res3 = 2; else $res3 = 1; if($res1==2 && $res2==2 && $res3==2)

$pr.="<td bgcolor=\"#9d9\" style=\"background-color:#9d9\">OK</td>";

else

$pr.="<td bgcolor=\"#d99\" style=\"background-color:#d99\">fault</td>"; $s = $session->walk("1.3.6.1.4.1.534.1.6.1.0", TRUE); foreach ($s as $val) { $pr.= "<td>$val &deg;C / "; } $s = $session->walk("1.3.6.1.4.1.534.1.6.5.0", TRUE); foreach ($s as $val) { $pr.= " $val &deg;C /"; } $s = $session->walk("1.3.6.1.4.1.534.1.6.6.0", TRUE); foreach ($s as $val) { $pr.= " $val %</td>"; }

$session->close();

$pr.="</tr>\r\n";

}

for ($i = 0; $i<count($urls2); $i++)

{

$pr.="<tr><td><a href=\"http://".$urls2[$i]."/\" target=\"_blank\">".$urls2[$i]."</a></td>";

$session = new SNMP(SNMP::VERSION_1, $urls2[$i], "public");

$session->valueretrieval = SNMP_VALUE_PLAIN; $s = $session->walk("1.3.6.1.4.1.318.1.1.1.1.1.2.0", TRUE); foreach ($s as $val)

{

$pr.= "<td><b>$val</font></b></td>"; }

$s = $session->walk("1.3.6.1.4.1.318.1.1.1.1.1.1.0", TRUE); foreach ($s as $val) { $pr.= "<td><b><font color=\"#f00\" style=\"color:#f00;\">$val</font></b></td>"; }

$s = $session->walk("1.3.6.1.4.1.318.1.1.1.3.2.1.0", TRUE); foreach ($s as $val) { $pr.= "<td>$val Volt</b></td>"; }

$s = $session->walk("1.3.6.1.4.1.318.1.1.1.4.2.3.0", TRUE); foreach ($s as $val) { $pr.= "<td align='right'></b>$val %</td>"; }

$s = $session->walk("1.3.6.1.4.1.318.1.1.1.2.2.1.0", TRUE); foreach ($s as $val) { $pr.= "<td align='right'>$val %</td>"; } $s = $session->walk("1.3.6.1.4.1.318.1.1.1.2.2.3.0", TRUE); foreach ($s as $val)

{ $pr.= "<td>".($val/100/60)." min</td>"; }

$s = $session->walk("1.3.6.1.4.1.318.1.1.1.2.2.4.0", TRUE); foreach ($s as $val) if($val=="1")

{ $pr.= "<td bgcolor=\"#9d9\" style=\"background-color:#9d9\">OK</td>"; }

else

{ $pr.= "<td bgcolor=\"#d99\" style=\"background-color:#d99\">fault</td>"; }

$s = $session->walk("1.3.6.1.4.1.318.1.1.1.2.2.2.0", TRUE); foreach ($s as $val) { $pr.= "<td>$val &deg;C /"; }

$s = $session->walk("1.3.6.1.4.1.318.1.1.25.1.2.1.6", TRUE); foreach ($s as $val) { $pr.= "$val &deg;C /"; }

$s = $session->walk("1.3.6.1.4.1.318.1.1.25.1.2.1.7", TRUE); foreach ($s as $val) { $pr.= "$val %</td>"; }

$s = $session->walk("1.3.6.1.4.1.318.1.1.1.3.2.5.0", TRUE);

foreach ($s as $val)

{ $pr.= "<td>LTtB:$val</td>"; }

$session->close();

$pr.="</tr>\r\n";

}

$pr.="</table>";

$pr.="<br /><font color=\"#00f\" style=\"color:#00f;\">EATON</font> <font color=\"#f00\" style=\"color:#f00;\">APC</font><br />";

$pr.="APC reason for last transfer (LTtB) to battery power<br /> <p>1 No events<br /> 2 High line voltage<br /> 3 Brownout<br /> 4 Loss of mains power<br /> 5 Small temporary power drop<br /> 6 Large temporary power drop<br /> 7 Small spike<br /> 8 Large spike<br /> 9 UPS self test<br /> 10 Excessive input voltage fluctuation</p><br /> <a href=\"#\">Обновить скрипт УПС</a></body></html>";

if($act=='') echo $pr;

if($act=='dailyreport')

{

$to="admin@domain.ru";

$subject="UPSs daily report";

$body="$pr";

$headers = "Content-type: text/html; charset=utf-8\r\n"; $headers .= "From: ups@domain.ru ";

mail($to, $subject, $body, $headers);

}

?>

Arduino & Pi

1.5K постов20.9K подписчиков

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

0
Автор поста оценил этот комментарий
а я сохранил. повторю потом, попробую. а с какой частотой эт штука опрашивает упс ? если реально все работает то можно освободить 1 уезби порт от расберри) у меня нут стоит опрашивает.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

0
Автор поста оценил этот комментарий

а что плохого в забиксовском snmp кроме размера?

раскрыть ветку (1)
Автор поста оценил этот комментарий

С ходу - ничего плохово. Он хорошо отрабатывает аварии и пороги показателей, но в куче других проблем теряются проблемы питания. Я пытался создать таблицу в дашборде - но она не вмещает в себя всё, что требуется

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества