Привет!
Вот с такого, казалось бы, незамысловатого устройства фирмы Kyocera, мне захотелось получать различную статистику по использованию принтера и сканера. Казалось бы, всё просто: берём SNMP и получаем, но...
SNMP
Убедившись, что наше устройство что-то отдаёт по SNMP, я отправился в гугл, дабы найти MIB для нашего аппарата. Однако, удалось найти информацию лишь о том, что его нет. Не хочет Kyocera делиться такой информацией, по каким то причинам. Естественно, приходит на ум мысль о слегка рутинном поиске необходимых значений самостоятельно. Алгоритм не самый сложный — snmpwalk, печать, snmpwalk, diff.
Вот что нашлось:
user@host:~# snmpwalk -v 2c -c public 192.168.101.239
iso.3.6.1.2.1.43.10.2.1.4.1.1 = Counter32: 242
И тут первая странность: значение несколько отличается от указанного в web панельке самого устройства (и в меню принтера):
Поиск в SNMP-выдаче цифр, хоть как-то похожих на то, что написано в web панельке девайса не дали ни малейшего результата. Попытки поймать изменение какого-либо счётчика, например, сканирования, провалились. Ничего не менялось. Появилось лёгкое подозрение, что необходимых данных через SNMP просто не получить.
Но если значения есть, значит это кому-нибудь нужно! Оказывается, у Kyocera есть своё собственное ПО для мониторинга и управления их устройствами — KYOCERA Net Viewer.
Заполните анкетку, введите емейл, получите письмо с одноразовой ссылкой… Знать бы, зачем такие сложности, ну да ладно.
Программа достаточно проста и показывает нам те же цифры, что и в web мордочке. А если она их как то получает, значит и мы можем.
Первым на ум мне пришёл комбаин Wireshark, вот им я и воспользуюсь.
И тут странность номер два: кроме обмена SNMP трафиком у нас тут есть и HTTP!
HTTP
Дальнейшее расследование приводит нам с к тому, что принтер и ПО общаются XML'ками через SOAP.
Принцип предельно простой: POST запросом на принтер отправляется специальная XML, содержащая запрос. В нашем случае запросом является «ALL_COUNTER», то есть мы желаем получить все счётчики. Принтер может в ответ прислать показания счётчиков или сообщение «DEEP_SLEEP_NOW_ERROR», что понятно из без перевода. Будить принтер как-то по особенному совсем не надо. Он уже проснулся от нашего запроса, просто посылаем запрос ещё раз и получаем XML со счётчиками.
Все значения указаны в виде <параметр>число</параметр>. Делаем небольшой парсер и получаем скрипт, выдающий нам необходимые цифры в удобном виде.
Для M2535dn мне были интересны следующие счётчики:
- accounting_print_black_and_white_copy_counter: Колличество ч/б страниц, напечатанных с использованием копировального аппарата
- accounting_print_black_and_white_printer_counter: Колличество ч/б страниц, напечатанных с использованием принтера
- accounting_print_combine_none_counter: Общий счётчик напечатанных страниц
- accounting_scan_copy_counter: Колличество страниц, отсканированных с использованием копира
- accounting_scan_other_counter: Колличество прочих отсканированных страниц ( на флешку, в сеть и пр.)
- device_life_counter: (?) Общий счётчик напечатанных страниц за всю жизнь устройства
Разница показаний счётчиков accounting_scan_copy_counter и accounting_print_black_and_white_copy_counter объясняется просто: было сделано 2 копии одного оригинала. Со сканера в копир отправилась одна страничка, а принтер из копира распечатал две. Помимо этих счётчиков можно получить ещё много чего интересного: количество напечатаных а4, а5, letter и пр. страниц, количество страниц, распечатанных с использованием дуплекса, копированных в режимах 2в1 и 4в1, для цветных устройств можно получать количество ц/б и цветных копий отдельно. Счётчик device_life_counter принтер отдаёт нам по SNMP, но ни в веб интерфейсе, ни в специальном ПО это значение не отображается. Я не очень понял значение этого параметра. Вчера он отличался от общего счётчика на 3, сегодня уже на 8. Жду ваших идей в комментариях.
Zabbix
Теперь необходимо подключить это к нашему мониторингу в Zabbix. Мы будем использовать внешнюю проверку. Скрипт необходимо положить в директорию ExternalScripts, дать права на выполнение и немного увеличить таймаут для запускаемых скриптов, по умолчанию он равен 3s:
user@host:~# cat /etc/zabbix/zabbix_server.conf | grep Timeout | grep -v ^#
Timeout=10
Теперь осталось сообразить новый шаблон и наполнить его элементами данных:
Маленькое замечание: не стоит выставлять слишком маленький интервал проверки, это может привести к снижению производительности системы мониторинга в целом. Применяем к узлам сети, настраиваем графики, отчёты и дальше по настроению.
На этом все, всем спокойной пятницы и отличных выходных!
P.S. Не все мы идеальны и об ошибках в тексте просьба уведомлять в ЛС.
Автор: coolSever