Заббикс. Что Делать, Если Принтер Не Передает Информацию Через Snmp?

Добрый день!

Заббикс.
</p><p>
 Что делать, если принтер не передает информацию через SNMP?

КДПВ Данная статья представляет собой небольшое пособие, написанное в несколько художественной форме.

В статье много картинок, тщательно спрятанных в спойлеры.

Для кого написана эта статья? Для начинающих системных администраторов, которые еще плохо знакомы с UNIX-системами и Zabbix, но хотят централизованно собирать информацию с принтеров.

Вводный.

Доступный:

  • Забфикс 5.0
  • ЦентОС 8
  • Принтер, не предоставляющий необходимую информацию о расходных материалах по SNMP (в данной инструкции в качестве примера взят Oki C834)
  • Практически нет знаний Zabbix, UNIX-систем.

  • Есть очень сильное желание централизованно собирать информацию о расходниках с принтеров.

Идти!

Причины и обоснования

Лень – двигатель прогресса.

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

А также время от времени собирать показатели счетчиков напечатанных страниц – на их основе принимается решение об обслуживании принтера.

«Вот сколько времени можно сэкономить, собирая такую информацию централизованно!» - эта мысль не покидала мою голову.

Было решено развернуть систему мониторинга.

По предложению более старших товарищей был выбран Zabbix — с расчетом, что помимо принтеров постепенно будет включен мониторинг серверов и сетевого оборудования.

В качестве операционной системы была установлена CentOS 8 — потому что я был хоть немного с ней знаком.

Возможно, кто-то уже сейчас пишет, что ай-ай-ай, вам нужно изучать UNIX-системы, если вы уже занялись системным администрированием.

Я вам отвечу – да, вы абсолютно правы.

Изучение мануалов по мониторингу принтеров обещало предельно простую процедуру — snmpwalk, выбор необходимых параметров, подключение OID к Zabbix, профит. Реальность немного пошатнула эту красивую картину.

Индикаторов состояния расходников не было.

Не было даже отдаленно похожих.

Совсем.

Статья Получаем статистику с устройств Kyocera в Zabbix побудило меня искать фирменное ПО для мониторинга принтера и перехвата связи между ПО и принтером.

Вот такое было найдено - Configuration Tool, утилита от Оки для мониторинга состояния принтеров.

Загрузите, запустите и.

С помощью инструмента настройки SNMP он получает информацию об имени принтера, MAC-адресе и версии программного обеспечения.

Информация о расходных материалах передается в теле пакетов TCP/IP. «Ну и отлично, приключение начинается», — подумал я.

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

  1. На данном этапе я не могу и не знаю, как правильно смоделировать запрос, который Configuration Tool отправляет на принтер.

  2. У принтера есть собственная веб-страница, на которой представлена информация о состоянии расходных материалов и количестве напечатанных страниц.

  3. Решение моей проблемы — вытягивать (парсить) информацию с веб-страницы принтера по расписанию и каким-то образом передавать эту информацию в Zabbix.
Поиск инструмента синтаксического анализа дал следующие результаты:
  1. Баш
  2. PHP
  3. Питон
Примечание: я полностью осознаю, что инструментов парсинга больше, чем приведено в этом списке — но перечислять их все нет смысла, и дальше вы поймете почему.

Я выбрал Bash — и вот почему:

  1. Предустановлен в большинстве систем UNIX. Мне не нужно устанавливать дополнительное программное обеспечение.

  2. Простота.

    Команды логичны и вполне понятны после небольшого изучения синтаксиса.

  3. Необходимость изучения UNIX-систем.

    Очевидно, не будет лишним изучить синтаксис команд в этом направлении.



Разбор веб-страницы принтера

Прежде чем приступить к разбору, давайте разберемся, что такое веб-страница принтера.

Примечание Прошу прощения, если неправильно выражаюсь относительно элементов веб-страницы принтера.

Я все-таки начинающий системный администратор, а не веб-разработчик.

Заходим на веб-страницу принтера и видим следующее Веб-страница принтера

Заббикс.
</p><p>
 Что делать, если принтер не передает информацию через SNMP?

Замечаем, что в правом верхнем углу страницы есть индикаторы состояния тонера.

Теперь нам просто нужно понять, как именно эти индикаторы отображаются на веб-странице.

ПКМ-> Осмотреть.

Нам открывается следующая картина.

Проверка кода страницы

Заббикс.
</p><p>
 Что делать, если принтер не передает информацию через SNMP?



Заббикс.
</p><p>
 Что делать, если принтер не передает информацию через SNMP?

Обратите внимание, что значения тонера фактически получены через страницу /status.htm. Видим, что значение показателей тонера передается в тегах: Затем с помощью JavaScript значения округляются до десятков и вставляются на страницу.

Заходим на страницу 192.168.***.

***/status.htm — и да, мы действительно видим на этой странице нужные нам значения тонера status.htm

Заббикс.
</p><p>
 Что делать, если принтер не передает информацию через SNMP?

Теперь мы знаем, где хранятся нужные нам значения состояния тонера.

Приступим к разбору.



Разбор

Примечание: ниже будет описание построения скрипта парсинга страницы с примерами и картинками.

Я постараюсь сделать описание понятным даже тем, кто совсем мало знаком с Bash. Если вы уже хотите прочитать результат, прокрутите дальше.

Итак, Баш.

Рубикон пройден, как говорили две тысячи лет назад на берегу одноименной реки.

Прежде всего, предлагаю вам ознакомиться с синтаксис языка .

Это предельно просто и незамысловато — но это нам поможет при написании скрипта и автоматизации.

Далее обратим внимание на cURL — командную строку и инструмент, как указано на Официальный веб-сайт этот инструмент. cURL поддерживает огромное количество протоколов, из которых нам необходима поддержка HTTP — помните, что именно этот протокол используется для «общения» с веб-страницей принтера.

Напишем первый запрос:

  
  
  
  
  
  
   

$ curl 192.168.***.

***/status.htm

Выходной терминал

Заббикс.
</p><p>
 Что делать, если принтер не передает информацию через SNMP?

В ответ прямо в командную строку сбрасывается огромное количество информации, которую не очень удобно читать в терминале, не говоря уже об обработке этой информации.

Перенаправим вывод в файл — так явно будет удобнее.

В этом нам поможет специальный символ '> '.



$ curl 192.168.***.

***/status.htm > Oki.txt

Откройте полученный файл в редакторе Vi.

$ vi Oki.txt

Oki.txt в редакторе Vi

Заббикс.
</p><p>
 Что делать, если принтер не передает информацию через SNMP?

Сейчас гораздо лучше, не так ли? Однако нам все равно не нужна вся страница.

Все, что вам нужно, это значения состояния тонера.

Начинаем изолировать данные.

В этом нам поможет grep — утилита, которая ищет строки, содержащие значение, равное указанному обычному значению.

Давайте подробнее рассмотрим теги, содержащие значения тонера.

Мы видим, что в них мы встречаем одно и то же выражение ‘value="***"’ Примечание Почему три звезды? Потому что картридж с тонером может быть заполнен и отображать значение 100. Примечание Более опытные читатели также могут заметить, что можно отфильтровать данные с помощью «скрытого» регулярного выражения.

Да, вы абсолютно правы.

Для подтверждения прилагаю скриншот вывода терминала.

Как видите, результат абсолютно такой же, как и при фильтрации через value="***"'.



Заббикс.
</p><p>
 Что делать, если принтер не передает информацию через SNMP?

«Хватаем» результаты, полученные через cURL. Чтобы немного ускорить процесс и визуализировать его, выводим значения прямо в терминал.



$ curl 192.168.***.

***/status.htm | grep ‘value=”***”’

результаты grep

Заббикс.
</p><p>
 Что делать, если принтер не передает информацию через SNMP?

Большой.

Довольно лаконичный вывод. Далее нам нужно избавиться от текста и оставить только числовые значения.

Примечание Возможно, более опытные читатели теперь воскликнут: «В Zabbix также можно обрезать строки и получать числовые результаты!» Это возможно, я не спорю.

Но я считаю, что лучше иметь числовые значения.

Это более лаконично и элегантно.

Отфильтруем текстовые данные, оставив только числовые значения.

grep с флагом -Eo снова нам в этом поможет. Он позволяет отображать только числовые значения.



$ curl 192.168.***.

***/status.htm | grep ‘value=”***”’ | grep -Eo ‘[0-9]{1,}’

Вывод чисел

Заббикс.
</p><p>
 Что делать, если принтер не передает информацию через SNMP?

Итак, мы получили необходимые числовые значения.

Теперь давайте разберем наш вывод на отдельные строки, чтобы сохранить их отдельно в текстовых файлах.

В этом нам поможет sed — утилита, представляющая собой потоковый текстовый редактор.

В нашем случае самое главное то, что sed умеет изолировать отдельные строки — а это именно то, что нам нужно.



Curl 192.168.***.

***/status.htm | grep ‘value=”***”’ | grep -Eo ‘[0-9]{1,}’ | sed -n 1p

Результат sed

Заббикс.
</p><p>
 Что делать, если принтер не передает информацию через SNMP?

Давайте посмотрим на часть sed. 1п – вывести первую строку.

-n – отфильтровать все, кроме указанной строки.

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

Теперь приступим к написанию сценария.

Bash-скрипты имеют некоторые особенности по сравнению с теми же bat-скриптами.

Они должны начинаться с шебанга – «#!».

Дальнейшие строки, начинающиеся с #, будут интерпретироваться как комментарии.

Скрипт будет выглядеть так:

#! /bin/bash #This script received toner level's from Oki_834 curl 192.168.***.

***/status.htm | grep ‘value=”***”’ | grep -Eo ‘[0-9]{1,}’ | sed -n 1p >/var/cyan.txt curl 192.168.***.

***/status.htm | grep ‘value=”***”’ | grep -Eo ‘[0-9]{1,}’ | sed -n 2p >/var/magenta.txt curl 192.168.***.

***/status.htm | grep ‘value=”***”’ | grep -Eo ‘[0-9]{1,}’ | sed -n 3p >/var/yellow.txt curl 192.168.***.

***/status.htm | grep ‘value=”***”’ | grep -Eo ‘[0-9]{1,}’ | sed -n 4p >/var/black.txt

Добавляем файл скрипта в crontab и тем самым автоматизируем его выполнение.

Автор установил */15 * * * * - выполнение каждые 15 минут. В результате веб-страница принтера автоматически парсится, мы получаем нужные нам числовые значения и сохраняем их в нужную нам директорию.



Перенос полученных значений в Zabbix

Теперь переместим данные в Zabbix. Примечание Я намеренно не описываю создание шаблона, приложения и сразу перехожу к созданию элемента данных.

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

Давайте создадим новый элемент данных.

Называем его как хотим, указываем тип Zabbix агента.

ВНИМАНИЕ Все вышеперечисленные манипуляции я проводил на сервере с установленными Zabbix-сервером и Zabbix-агентом.

Zabbix-агент также должен быть установлен на вашем сервере, где вы выполняли вышеописанные манипуляции.

Самое интересное и важное для нас на этом этапе — ключ.

Нам нужен vfs.file.contents[файл, ].

Файл – абсолютный путь к файлу.

Создание элемента данных в Zabbix

Заббикс.
</p><p>
 Что делать, если принтер не передает информацию через SNMP?

Указываем наш путь к файлу и проверяем его правильность.

Мы должны увидеть значение черного тонера в результатах теста.

Успешно пройден тест

Заббикс.
</p><p>
 Что делать, если принтер не передает информацию через SNMP?

В результате мы передали данные в Zabbix и теперь можем централизованно контролировать состояние расходных материалов.



Заключение

Мы освоили получение данных с помощью парсинга веб-страниц.

В данном примере был взят принтер Oki 834 и успешно получены данные о тонере.

Ответственно заявляю, что этим же методом были получены данные о состоянии фотобарабанов, ленты и духовки.

Доказательства на скриншотах

Заббикс.
</p><p>
 Что делать, если принтер не передает информацию через SNMP?



Заббикс.
</p><p>
 Что делать, если принтер не передает информацию через SNMP?

Таким образом, можно получить информацию о расходных материалах практически со всех принтеров, и не только о принтерах.

Парсинг — достаточно удобный инструмент, и мне очень понравилось с ним работать.

И если моя статья поможет хоть одному человеку, значит все было не зря.

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

Спасибо всем! Теги: #Системное администрирование #zabbix #centos 8 #oki

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.