Добрый день!
КДПВ
Данная статья представляет собой небольшое пособие, написанное в несколько художественной форме.
В статье много картинок, тщательно спрятанных в спойлеры.
Для кого написана эта статья? Для начинающих системных администраторов, которые еще плохо знакомы с 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. «Ну и отлично, приключение начинается», — подумал я.
Обдумывание вариантов решения привело к следующей логической цепочке:
- На данном этапе я не могу и не знаю, как правильно смоделировать запрос, который Configuration Tool отправляет на принтер.
- У принтера есть собственная веб-страница, на которой представлена информация о состоянии расходных материалов и количестве напечатанных страниц.
- Решение моей проблемы — вытягивать (парсить) информацию с веб-страницы принтера по расписанию и каким-то образом передавать эту информацию в Zabbix.
- Баш
- PHP
- Питон
Я выбрал Bash — и вот почему:
- Предустановлен в большинстве систем UNIX. Мне не нужно устанавливать дополнительное программное обеспечение.
- Простота.
Команды логичны и вполне понятны после небольшого изучения синтаксиса.
- Необходимость изучения UNIX-систем.
Очевидно, не будет лишним изучить синтаксис команд в этом направлении.
Разбор веб-страницы принтера
Прежде чем приступить к разбору, давайте разберемся, что такое веб-страница принтера.Примечание Прошу прощения, если неправильно выражаюсь относительно элементов веб-страницы принтера.
Я все-таки начинающий системный администратор, а не веб-разработчик.
Заходим на веб-страницу принтера и видим следующее Веб-страница принтера
Замечаем, что в правом верхнем углу страницы есть индикаторы состояния тонера.
Теперь нам просто нужно понять, как именно эти индикаторы отображаются на веб-странице.
ПКМ-> Осмотреть.
Нам открывается следующая картина.
Проверка кода страницы
Обратите внимание, что значения тонера фактически получены через страницу /status.htm.
Видим, что значение показателей тонера передается в тегах:
Затем с помощью JavaScript значения округляются до десятков и вставляются на страницу.
Заходим на страницу 192.168.***.
***/status.htm — и да, мы действительно видим на этой странице нужные нам значения тонера status.htm
Теперь мы знаем, где хранятся нужные нам значения состояния тонера.
Приступим к разбору.
Разбор
Примечание: ниже будет описание построения скрипта парсинга страницы с примерами и картинками.Я постараюсь сделать описание понятным даже тем, кто совсем мало знаком с Bash. Если вы уже хотите прочитать результат, прокрутите дальше.
Итак, Баш.
Рубикон пройден, как говорили две тысячи лет назад на берегу одноименной реки.
Прежде всего, предлагаю вам ознакомиться с синтаксис языка .
Это предельно просто и незамысловато — но это нам поможет при написании скрипта и автоматизации.
Далее обратим внимание на cURL — командную строку и инструмент, как указано на Официальный веб-сайт этот инструмент. cURL поддерживает огромное количество протоколов, из которых нам необходима поддержка HTTP — помните, что именно этот протокол используется для «общения» с веб-страницей принтера.
Напишем первый запрос:
Выходной терминал$ curl 192.168.***.
***/status.htm
В ответ прямо в командную строку сбрасывается огромное количество информации, которую не очень удобно читать в терминале, не говоря уже об обработке этой информации.
Перенаправим вывод в файл — так явно будет удобнее.
В этом нам поможет специальный символ '> '.
$ curl 192.168.***.
***/status.htm > Oki.txt
Откройте полученный файл в редакторе Vi. $ vi Oki.txt
Oki.txt в редакторе Vi
Сейчас гораздо лучше, не так ли? Однако нам все равно не нужна вся страница.
Все, что вам нужно, это значения состояния тонера.
Начинаем изолировать данные.
В этом нам поможет grep — утилита, которая ищет строки, содержащие значение, равное указанному обычному значению.
Давайте подробнее рассмотрим теги, содержащие значения тонера.
Мы видим, что в них мы встречаем одно и то же выражение ‘value="***"’ Примечание Почему три звезды? Потому что картридж с тонером может быть заполнен и отображать значение 100. Примечание Более опытные читатели также могут заметить, что можно отфильтровать данные с помощью «скрытого» регулярного выражения.
Да, вы абсолютно правы.
Для подтверждения прилагаю скриншот вывода терминала.
Как видите, результат абсолютно такой же, как и при фильтрации через value="***"'.
«Хватаем» результаты, полученные через cURL. Чтобы немного ускорить процесс и визуализировать его, выводим значения прямо в терминал.
$ curl 192.168.***.
***/status.htm | grep ‘value=”***”’
результаты grep
Большой.
Довольно лаконичный вывод. Далее нам нужно избавиться от текста и оставить только числовые значения.
Примечание Возможно, более опытные читатели теперь воскликнут: «В Zabbix также можно обрезать строки и получать числовые результаты!» Это возможно, я не спорю.
Но я считаю, что лучше иметь числовые значения.
Это более лаконично и элегантно.
Отфильтруем текстовые данные, оставив только числовые значения.
grep с флагом -Eo снова нам в этом поможет. Он позволяет отображать только числовые значения.
$ curl 192.168.***.
***/status.htm | grep ‘value=”***”’ | grep -Eo ‘[0-9]{1,}’
Вывод чисел
Итак, мы получили необходимые числовые значения.
Теперь давайте разберем наш вывод на отдельные строки, чтобы сохранить их отдельно в текстовых файлах.
В этом нам поможет sed — утилита, представляющая собой потоковый текстовый редактор.
В нашем случае самое главное то, что sed умеет изолировать отдельные строки — а это именно то, что нам нужно.
Curl 192.168.***.
***/status.htm | grep ‘value=”***”’ | grep -Eo ‘[0-9]{1,}’ | sed -n 1p
Результат sed
Давайте посмотрим на часть 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
Указываем наш путь к файлу и проверяем его правильность.
Мы должны увидеть значение черного тонера в результатах теста.
Успешно пройден тест
В результате мы передали данные в Zabbix и теперь можем централизованно контролировать состояние расходных материалов.
Заключение
Мы освоили получение данных с помощью парсинга веб-страниц.В данном примере был взят принтер Oki 834 и успешно получены данные о тонере.
Ответственно заявляю, что этим же методом были получены данные о состоянии фотобарабанов, ленты и духовки.
Доказательства на скриншотах
Таким образом, можно получить информацию о расходных материалах практически со всех принтеров, и не только о принтерах.
Парсинг — достаточно удобный инструмент, и мне очень понравилось с ним работать.
И если моя статья поможет хоть одному человеку, значит все было не зря.
Я также хочу выразить огромную благодарность рыжий олень , акожевников97 и человеку, пожелавшему остаться анонимным, за помощь в написании статьи.
Спасибо всем! Теги: #Системное администрирование #zabbix #centos 8 #oki
-
Полинезийские Языки
19 Oct, 24 -
Что Нужно Знать Руководителю Ит-Отдела?
19 Oct, 24 -
Uwp – Выпуск 262
19 Oct, 24 -
Зачем Вам Видеосвязь?
19 Oct, 24 -
О Градиенте Изображения
19 Oct, 24 -
1 Апреля На Bash.org.ru
19 Oct, 24