Мониторинг ИБП

Примеры из жизни как развернуть и настроить систему мониторинга zabbix
Ответить
RomA
Сообщения: 358
Зарегистрирован: 05 авг 2008, 14:53
Контактная информация:

Мониторинг ИБП

Сообщение RomA »

Сегодня мы рассмотрим возможность подключения Источника Бесперебойного Питания к нашей системе мониторинга Zabbix. Следует понимать что все что будет описано актуально со следующими оговорками - версия zabbix 1.8.3, ИБП мониторится утилитой NUT, используем zabbix-агент.
Для начала определяемся что нам нужно. Из всех параметров которые выдает ИБП

Код: Выделить всё

stat# /usr/local/bin/upsc APC@localhost
battery.charge: 100
battery.charge.low: 10
battery.charge.warning: 50
battery.mfr.date: 2007/11/14
battery.runtime: 2160
battery.runtime.low: 120
battery.temperature: 19.8
battery.type: PbAc
battery.voltage: 54.8
battery.voltage.nominal: 48.0
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: /dev/usb/0.2.0
driver.version: 2.4.1
driver.version.data: APC HID 0.93
driver.version.internal: 0.34
input.voltage: 234.7
output.voltage: 234.7
output.voltage.nominal: 230.0
ups.beeper.status: enabled
ups.delay.shutdown: 20
ups.firmware: 691.16.I
ups.firmware.aux: 7.3
ups.load: 46.1
ups.mfr: American Power Conversion
ups.mfr.date: 2007/11/14
ups.model: Smart-UPS 3000 RM XL
ups.productid: 0002
ups.serial: JS0746005771
ups.status: OL
ups.test.result: No test initiated
ups.timer.reboot: -1
ups.timer.shutdown: -1
ups.vendorid: 051d
stat# 
меня для мониторинга заинтересовали следующие:
1) Входное напряжение
2) Выходное напряжение
3) Температура батарейки (в последствии оказалось совершенно не информативным параметром)
4) Загрузка ИБП
Определившись с параметрами приступаем к конфигурированию. В конец фала конфигурации zabbix-агента добавляем следующие строки

Код: Выделить всё

#####
# UPS APC
#####
UserParameter=ups.in,/usr/local/bin/upsc APC@localhost | grep 'input' | cut -f2 -d" "
UserParameter=ups.out,/usr/local/bin/upsc APC@localhost | grep 'output.voltage:' | cut -f2 -d" "
UserParameter=ups.temp,/usr/local/bin/upsc APC@localhost | grep 'battery.temperature' | cut -f2 -d" "
UserParameter=ups.load,/usr/local/bin/upsc APC@localhost | grep 'ups.load' | cut -f2 -d" "
UserParameter=ups.sut,/usr/local/bin/upsc APC@localhost | grep 'ups.delay.shutdown' | cut -f2 -d" "
#####
после чего перезапускаем агента и больше его не трогаем.
Теперь наступил черед конфигурирования в вебинтерфейсе, для этого идем в Настройки - Узлы сети и создаем новый узел с довольно стандартными параметрами - единственное что в качестве ИП я указал ИП того сервера, к которому подключен ИБП и на котором стоит zabbix-агент, настроенный нами тока что. Выглядит это примерно так:
Заводим Узел
Заводим Узел
1.jpg (79.67 КБ) 15730 просмотров
Теперь создаем Элементы Данных тут вроде как все стандартно - мы вводим в систему те переменные, которые нам передаёт агент
Элементы
Элементы
2.jpg (61.1 КБ) 15730 просмотров
В принципе в самих элементах данных нет ничего сложного - практически все элементы по умолчанию, ну или на ваш вкус... Все четыре делаеются по аналогии, потому приведу скриншот только одного
Один из элементов
Один из элементов
3.jpg (84.46 КБ) 15730 просмотров
Теперь данные о нашем ИБП записываются в базу данных, и мы всегда сможем узнать что происходило в тот или иной момент времени. Но нам бы хотелось оперативно понимать что происходит... для этого существуют тригеры, которые будут своим срабатывание оповещять нас о возникшей проблеме
Тригеры
Тригеры
4.jpg (37.99 КБ) 15729 просмотров
В моём случае проблема - это пропажа входного напряжения. Так как номинальным напряжение считается 220 вольт, то я настроил тригер таким образом, что при снижении напряжения ниже 190 вольт у меня срабатывало оповещение
Настройка тригера
Настройка тригера
5.jpg (56.88 КБ) 15729 просмотров
Но все это пока что не очень визуально, потому следующим шагом будет создание графиков по собранным данным
Графики
Графики
7.jpg (35.84 КБ) 15728 просмотров
Пихаем на график нужные нам данные и сохраняем все это дело
График
График
8.jpg (146.96 КБ) 15728 просмотров
Ну и на последок приведу скриншот того, как на карте сети отобразить загрузку ИБП
Карта
Карта
6.jpg (76.23 КБ) 15728 просмотров
Вот вроде как и все - ИБП мониторинтся, на карте красиво отображается - все красиво :-) В готовом виде выглядит это так
На карте
На карте
0.jpg (10.02 КБ) 15728 просмотров
То, ради чего....
То, ради чего....
9.jpg (117.32 КБ) 15728 просмотров
Вот пример узла заббикса (не шаблон) для примера. Только тут работа от батареи неверно заведена, но для справки пойдёт
ups_v1.xml
Узел заббикса
(9.92 КБ) 1122 скачивания
Kitsum
Сообщения: 15
Зарегистрирован: 01 окт 2014, 13:03
Откуда: далеко из-за мкада

Re: Мониторинг ИБП

Сообщение Kitsum »

Доброе время суток.

Хочу продолжить обсуждение на эту тему, но предварительно уточнить, что все манипуляции производились на операционной системе Linux Ubuntu 13.10 и Zabbix 2.2
Т.к в организации поголовно все ИБП от фирмы APC, то принял решение использовать пакет apcupsd (http://www.apcupsd.org/). Сами ИБП подключены через USB кабеля, но есть множество других способов подключения поддерживаемых как устройствами так и самим пакетом.

Перейдем к действию.

Установка проста до невозможности:

Код: Выделить всё

sudo apt-get install apcupsd
После установки погружаемся в конфиг:

Код: Выделить всё

nano /etc/apcupsd/apcupsd.conf
При беглом изучении файла выяснилось, что для базовой настройки достаточно изменить пару строк. Привожу пример опять же для USB:

Код: Выделить всё

# Имя ИБП, может быть любым
UPSNAME ups-name
# Используемый кабель
UPSCABLE usb
# Тип подключения.
UPSTYPE usb
# Закомментируем строку указанную по умолчанию
#DEVICE /dev/ttyS0
# Указываем как часто сохранять информацию в "статус-файл", по умолчанию 0 и говорит о том, что файл создан не будет
STATTIME 30
# Куда сохранять информацию о статусе ИБП, оставляем по умолчанию, но путь до файла запомнили
STATFILE /var/log/apcupsd.status
Далее необходимо организовать сбор и передачу данных на zabbix. Захламлять конфиг демона десятками UserParameter нет совершенно никакого желания. Душа просит эстетики и мы начинаем конструировать велосипед.
Нам понадобится скрипт который будет посредником между zabbix агентом и apcupsd. Для подобных фокусов у меня имеется каталог "/usr/local/etc/scripts/".
Создаем там файл "/usr/local/etc/scripts/apcupsd.status.sh" права 750 владелец root группа zabbix

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

Код: Выделить всё

#!/bin/bash
if [[ -z "$1" || -z "$2" ]]; then
  exit 1
fi
if [ -s "$1" ]; then
  if [[ "$2" =~ DATE|VERSION|CABLE|DRIVER|UPSMODE|STARTTIME|MODEL|LASTXFER|STATFLAG|FIRMWARE|'END APC' ]]; then
    QUERY=`cat "$1" | grep -iw "$2" | cut -d':' -f 2,3,4,5 | head -n1`
  else
    QUERY=`cat "$1" | grep -iw "$2" | cut -d':' -f 2 | awk '{print \$1}'`
  fi
  if [ "$2" = "STATUS" ]; then
    if [[ "${QUERY}" = *ONLINE* ]]; then
      echo "1"
    else
      echo "0"
    fi
  else
    echo "${QUERY}"
  fi
else
  exit 1
fi
Обращаю внимание, что в файле "/var/log/apcupsd.status" используется разделитесь ":", в то время как этот же символ может фигурировать и в самих данных, что приведет к потери части строки.
В довесок к этому, некоторые данные отдаются с описанием их единиц измерения, а нам необходимо передать в zabbix эти значения как INT или FLOAT т.к если получать их как STRING, то мы не сможем ими манипулировать в дальнейшем. Например использовать в собственных расчетах и формулах.
В общем, для всех этих фильтраций мы используем cut, head и awk. Как обрабатывать тот или иной параметр задано в условии формирующем переменную QUERY.
Параметр STATUS отдаёт нам значение имеющее тип STRING и не подходящее нам для использования в графиках или других расчетах. Из тех вариантов, что мы получаем, нас интересует только определение типа его работы (от сети или от аккумулятора), для этого мы преобразуем для zabbix STRING в INT и отдаём "1" (работа от сети) или "0" (работа от батареи).

ВАЖНО: Я использовал не все параметры указанные в спецификации apcupsd. Для более подробной информации и добавлению нужных Вам данных стоит почитать тут http://www.apcupsd.org/manual/manual.html

Велосипед готов.
Идем в конфиг агента "/usr/local/etc/zabbix_agentd.conf" и добавляем в конце файла строку которая будет отвечать за сбор параметров у скрипта:

Код: Выделить всё

UserParameter=ups[*],/usr/local/etc/scripts/apcupsd.status.sh "/var/log/apcupsd.status" "$1"
Тут все просто:
1. ups[*][/b] - массив в котором будут храниться данные от ИБП и по совместительству являться ключами в zabbix
2. /usr/local/etc/scripts/apcupsd.status.sh - путь до скрипта
3. "/var/log/apcupsd.status" - путь до "статус-файла" apcupsd
4. "$1" - запрашиваемый параметр

Перезапускаем zabbix агент и идем добавлять шаблон для всей этой кухни.
Сам шаблон описывать сильно не буду, а просто добавлю его к посту.

Список получаемых параметров:
PARAM.png
Графики:
GR1.png
GR2.png
GR3.png
GR4.png
GR5.png
PS: заранее извиняюсь за ошибки в орфографии, но их можно простить учитывая тот факт, что при создании этой кухни не пострадало ни одно животное.
Вложения
template_APCUPSD.xml
Шаблон zabbix
(52.07 КБ) 1097 скачиваний
apcupsd.status.zip
Скрипт в архиве
(455 байт) 734 скачивания
RomA
Сообщения: 358
Зарегистрирован: 05 авг 2008, 14:53
Контактная информация:

Универсальный мониторинг ИБП при помощи NUT

Сообщение RomA »

История:
У меня к одному серверу (ну а что - он виртуальный, через ESXi прокинуты usb) подключено сразу несколько ИБП (удобно же в одном месте всё смотреть) и настроено это дело на мониторинг по статье http://forum.cz6.ru/viewtopic.php?f=24&t=77&p=265#p265
Но вот добр человек написать постом выше, что можно упростить данную конструкцию, ибо у меня параметров в агенте для этого мониторинга прописано не меряно. В общем спасибо предыдущему оратору за хороший пост - заставил он меня задуматься, почему у меня ещё не так. И вот что из этого вышло

Мониторинг:
Итак, в продолжение статьи http://forum.cz6.ru/viewtopic.php?f=24&t=77&p=265#p265 - поехали!

В заббикс агенте у меня осталась одна строка:

Код: Выделить всё

UserParameter=ups.[*],/usr/local/bin/upsc $1@localhost | grep "$2:" | cut -f2 -d" "
Тут надо пояснить, что ИБП у меня в NUT заведены так

MONITOR APC500@localhost 1 monmaster bsd master
MONITOR APC700@localhost 1 monmaster bsd master


Таким образом с zabbix я агенту передаю 2 параметра:
$1 - сюда я Имя передаю
$2 - сюда параметр
Таким образом ключ у меня выглядит вот так (к примеру)

Код: Выделить всё

ups.[{HOST.NAME},battery.runtime]
key.jpg
И так по каждому параметру, который надо мониторить. Я мониторю не много, ибо нафига забивать базу данных - она и без того растёт быстро. Потому мониторю только самое нужное. В итоге вот такой шаблон у меня получился
zbx_export_templates-2.xml
Темплейт мониторинга UPS
(10.73 КБ) 1077 скачиваний
Ещё я использую преобразования значений
Новый 3.jpg
Новый 3.jpg (8.95 КБ) 15056 просмотров
Дальше я завожу хост с именем моего бесперебойника, например так
Новый 3.jpg
Потом второй добавляю
Новый 3.jpg
Новый 3.jpg (27.44 КБ) 15056 просмотров
С подписями на карте больших проблем тоже не возникло
Новый 4.jpg
Ну вот как-то так отображается
Новый 3.jpg
Итог:
Удалось сделать один шаблон на всех, одну строчку на всех и так далее - на мой взгляд простота мониторинга улучшилась
Kitsum
Сообщения: 15
Зарегистрирован: 01 окт 2014, 13:03
Откуда: далеко из-за мкада

Re: Мониторинг ИБП

Сообщение Kitsum »

APC SMART-UPS 5000 и ZABBIX 2.2.5
DSC_0001.jpg
Всем доброго времени суток.
Речь пойдет о мониторинге источников бесперебойного питания, в моём случае SMART-UPS 5000 RM, по протоколу SNMP v1. Использовать Ethernet для этих целей очень выгодно т.к это избавляет от лишнего звена в виде компьютера подключенного по COM или USB, но ИБП должен быть укомплектован сетевой платой Apc Network Management Card (NMC)
DSC_0003.jpg
Сразу хочу отметить, что в теории это описание должно подходить и для других моделей ИБП APC, возможны небольшие расхождения в OID.
Я использовал MIB файл PowerNet-MIB v4.0.5 с официального сайта производителя, на всякий случай прикрепляю копию.
PowerNet-MIB.zip
(196.85 КБ) 786 скачиваний
Небольшое вступление.
Мне "пятитысячники" достались от бывшего коллеги, который уже пытался с ними экспериментировать в своё удовольствие. Но как ни странно, он позабыл все данные доступа к своим игрушкам, в добавок и диски потерял со специализированными утилитами для начальной настройки Network Management Card (NMC). Хм... ну ладно...
К счастью мои текущие боевые товарищи не дали ему потерять еще и консольные кабеля и это важно т.к ИБП APC используют свои хитрые "хвосты": COM to COM и USB to COM (по крайней мере, так сказано на форуме APC).

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

Я использовал два вида кабелей
1. COM to COM - его id 940-1524D
2. USB to COM - его id 940-0272A

Из софта понадобится терминал, я использовал PuTTY, ниже настройки подключения.
Скорость: 2400 (для Smart-UPS RT 6000 XL: 9600)
Биты данных: 8
Стоп биты: 1
Четность: Нет
Управление потоком: Нет

После подключения жмем Enter и появляется запрос на авторизацию. По умолчанию логин и пароль: apc
Настройка реализована в виде диалога с вариантами ответа как в дешевой квест-рпг игре.
Пример начального квеста ниже:

Код: Выделить всё

User Name : apc
Password  : ***


American Power Conversion               Network Management Card AOS      v2.1.0
(c) Copyright 2002 All Rights Reserved  Smart-UPS & Matrix-UPS APP       v2.1.0
-------------------------------------------------------------------------------
Name      : Unknown                                   Date : 01/02/2011
Contact   : Unknown                                   Time : 01:07:35
Location  : Unknown                                   User : Administrator
Up Time   : 101 Days 15 Hours 12 Minutes              Stat : P+ N- A+

Smart-UPS 5000 RM named UPS_IDEN : On Line

------- Control Console -------------------------------------------------------

     1- Device Manager
     2- Network
     3- System
     4- Logout

     <ESC>- Main Menu, <ENTER>- Refresh, <CTRL-L>- Event Log
> 2

------- Network ---------------------------------------------------------------

     1- TCP/IP
     2- DNS
     3- Ping Utility
     4- FTP Server
     5- Telnet/SSH
     6- Web/SSL/TLS
     7- WAP
     8- SNMP
     9- Email
    10- Syslog

     <ESC>- Back, <ENTER>- Refresh, <CTRL-L>- Event Log
> 1

------- TCP/IP ----------------------------------------------------------------

        Network not started. Invalid BOOTP response.
        -----------------------------------------------------------------------
        MAC Address : 00 00 00 00 00 00

        * Manually reboot to restart network. System->Tools->Reboot.

     1- Boot Mode  : DHCP & BOOTP
     2- Advanced...

     <ESC>- Back, <ENTER>- Refresh, <CTRL-L>- Event Log
> 1

------- Boot Mode -------------------------------------------------------------

     1- DHCP & BOOTP
     2- DHCP only
     3- BOOTP only
     4- Manual

     <ESC>- Back, <ENTER>- Refresh
> 4

------- TCP/IP ----------------------------------------------------------------

        Network not started. Invalid BOOTP response.
        -----------------------------------------------------------------------
        MAC Address : 00 00 00 00 00 00

        * Changes will take effect on Logout.

     1- System IP      : 0.0.0.0
     2- Subnet Mask    : 0.0.0.0
     3- Default Gateway: 0.0.0.0
     4- Boot Mode      : Manual
     5- Advanced...

     <ESC>- Back, <ENTER>- Refresh, <CTRL-L>- Event Log
> 1
System IP : 10.10.10.244

------- TCP/IP ----------------------------------------------------------------

        Network not started. Invalid BOOTP response.
        -----------------------------------------------------------------------
        MAC Address : 00 00 00 00 00 00

        * Changes will take effect on Logout.

     1- System IP      : 10.10.10.244
     2- Subnet Mask    : 0.0.0.0
     3- Default Gateway: 0.0.0.0
     4- Boot Mode      : Manual
     5- Advanced...

     <ESC>- Back, <ENTER>- Refresh, <CTRL-L>- Event Log
> 2
Subnet Mask : 255.255.255.0

------- TCP/IP ----------------------------------------------------------------

        Network not started. Invalid BOOTP response.
        -----------------------------------------------------------------------
        MAC Address : 00 00 00 00 00 00

        * Changes will take effect on Logout.

     1- System IP      : 10.10.10.244
     2- Subnet Mask    : 255.255.255.0
     3- Default Gateway: 0.0.0.0
     4- Boot Mode      : Manual
     5- Advanced...

     <ESC>- Back, <ENTER>- Refresh, <CTRL-L>- Event Log
> 3
Default Gateway : 10.10.10.1

------- TCP/IP ----------------------------------------------------------------

        Network not started. Invalid BOOTP response.
        -----------------------------------------------------------------------
        MAC Address : 00 00 00 00 00 00

        * Changes will take effect on Logout.

     1- System IP      : 10.10.10.244
     2- Subnet Mask    : 255.255.255.0
     3- Default Gateway: 10.10.10.1
     4- Boot Mode      : Manual
     5- Advanced...

     <ESC>- Back, <ENTER>- Refresh, <CTRL-L>- Event Log
> 5

------- Advanced... -----------------------------------------------------------

        Link is down.

     1- Host Name     : APC
     2- Domain Name   : somedomain.com
     3- Port Speed    : Auto-negotiation
     4- Accept Changes:

     <ESC>- Back, <ENTER>- Refresh, <CTRL-L>- Event Log
> 1
Host Name : UPS-NAME

------- Advanced... -----------------------------------------------------------

        Link is down.

     1- Host Name     : UPS-NAME
     2- Domain Name   : somedomain.com
     3- Port Speed    : Auto-negotiation
     4- Accept Changes: Pending

     <ESC>- Cancel Changes, <ENTER>- Refresh, <CTRL-L>- Event Log
> 2
Domain Name : domain.name

------- Advanced... -----------------------------------------------------------

        Link is down.

     1- Host Name     : UPS-NAME
     2- Domain Name   : domain.name
     3- Port Speed    : Auto-negotiation
     4- Accept Changes: Pending

     <ESC>- Cancel Changes, <ENTER>- Refresh, <CTRL-L>- Event Log
> 4

------- Advanced... -----------------------------------------------------------

        Link is down.

     1- Host Name     : UPS-NAME
     2- Domain Name   : domain.name
     3- Port Speed    : Auto-negotiation
     4- Accept Changes: Success

     <ESC>- Back, <ENTER>- Refresh, <CTRL-L>- Event Log
>

# Мжем ESC пока не попадем в главное меню

------- Control Console -------------------------------------------------------

     1- Device Manager
     2- Network
     3- System
     4- Logout

     <ESC>- Main Menu, <ENTER>- Refresh, <CTRL-L>- Event Log
> 4

You are now in passthru mode.
Теперь продолжить настройку ИБП можно через Web интерфейс. Там все еще проще, описывать нет смысла, главное настройте SNMP COMMUNITY.

Переходим к Zabbix
Для начала необходимо создать макрос {$SNMP_COMMUNITY} со значением SNMP COMMUNITY которое выставлено в настройках ИБП.
Далее добавляем сам шаблон:
APC SMART-UPS 5000 - SNMP.xml
(67.24 КБ) 1054 скачивания
Отображение значения
Все расшифровки взяты с PowerNet-MIB

1. Для параметра Индикатор замены батареи - upsAdvBatteryReplaceIndicator

Код: Выделить всё

APC Battery Replace
1 ⇒ замена не требуется
2 ⇒ необходима замена
2. Для параметра Причина последнего перехода на работу от батареи - upsAdvInputLineFailCause

Код: Выделить всё

APC Input Line Fail Cause
1 ⇒ перехода небыло
2 ⇒ высокое напряжение
3 ⇒ brownout
4 ⇒ blackout
5 ⇒ smallMomentarySag
6 ⇒ deepMomentarySag
7 ⇒ smallMomentarySpike
8 ⇒ largeMomentarySpike
9 ⇒ самодиагностика
10 ⇒ скачек напряжения
3. Для параметра Статус батареи - upsBasicBatteryStatus

Код: Выделить всё

APC Battery Status
1 ⇒ неизвестно
2 ⇒ батарея в порядке
3 ⇒ батарея разряжена
4 ⇒ батарея в аварийном состоянии
4. Для параметра Текущее состояние ИБП - upsBasicOutputStatus

Код: Выделить всё

APC Basic Output Status
1 ⇒ неизвестно
2 ⇒ работает от сети
3 ⇒ работает от батареи
4 ⇒ onSmartBoost
5 ⇒ timedSleeping
6 ⇒ softwareBypass
7 ⇒ off
8 ⇒ rebooting
9 ⇒ switchedBypass
10 ⇒ hardwareFailureBypass
11 ⇒ sleepingUntilPowerReturn
12 ⇒ onSmartTrim
13 ⇒ ecoMode
14 ⇒ hotStandby
15 ⇒ onBatteryTest
16 ⇒ emergencyStaticBypass
17 ⇒ staticBypassStandby
18 ⇒ powerSavingMode
19 ⇒ spotMode
20 ⇒ eConversion
Список собираемых параметров:
DATA1.png
Группы элементов данных:
DATA2.png
DATA2.png (6.68 КБ) 14947 просмотров
Графики:
DATA3.png
DATA3.png (7.37 КБ) 14947 просмотров
Триггеры:
ALARM1.png
Графики

Входное и выходное напряжение + скачки напряжения
GP1.png
Нагрузка
GP2.png
Оставшееся время автономной работы
GP3.png
Состояние батареи (с разных ИБП)
GP4.png
GP4.1.png
Есть некоторые особенности.
На момент написания статьи, на тесте стоят два "пятитысячника" одной серии но с разной версией прошивки. С одного из них не снимаются показания о напряжении батареи, но в Web морде напряжение отображается в виде 55.64V
Вылизал уже snmpwalk'ом весь MIB, данные в ветке 1.3.6.1.4.1.318.1.1.1 отсутствуют. При этом второй ИБП выдает как округленное целое значение так и целое четырехзначное (точку нужно выставлять самому). Пока поменять версию прошивки нет возможности, но думаю дело в ней.

Также существует OID 1.3.6.1.4.1.318.1.1.1.4.1.4.0 который, судя по MIB файлу должен содержать температуру самого ИБП. У меня получить с него данные не получилось, но этот OID я оставил в шаблоне на всякий случай.

И OID 1.3.6.1.4.1.318.1.1.1.4.2.4.0 - выходная потребляемая нагрузка в амперах, есть как в описании PowerNet-MIB так и ИБП, но возвращает всегда 0. Возможно дело в конфигурации ИБП, а может и глубже.

PS: В целом все. Если есть желающие помочь улучшить шаблон, заранее спасибо!
Ответить