Мониторинг принтеров — дело благородное
В этом посте расскажем о нашем опыте мониторинга принтеров в Zabbix, ведение реестра по ним в CMDB (iTop) и визуализации статусов в Grafana. Со всеми тремя продуктами мы успешно работаем и имеем опыт внедрения в малых и средних организациях.
Такая тема поста выбрана не случайно. Непрерывная работа печатающей техники, действительно, сказывается на производительности бизнес-процессов в организациях и положительном отношении пользователей к ИТ-службе. А положительное отношение — своего рода благородство.
Наш стандартный подход — использование конгломерата из трёх решений: Zabbix, iTop и Grafana.
Принтеры обычно рассредоточены по офисам, этажам и кабинетам. После разработки (или доработки) шаблонов по каждому устройству, для каждой такой локации мы создаём группы в Zabbix и добавляем туда заведённые в мониторинг устройства. Система позволяет создавать квазивложенные группы с устройствами, поэтому мы можем создавать группы по следующим форматам:
0 Принтеры
1 Принтеры → Москва-Центральный офис
1.1 Принтеры → Москва-Центральный офис → Этаж 25
1.2 Принтеры → Москва-Центральный офис → Этаж 26
1.3 Принтеры → Москва-Центральный офис → Этаж 27
1.4 Принтеры → Москва-Центральный офис → Этаж 28
1.1.1 Принтеры → Москва-Центральный офис → Этаж 25 → Кабинет 2507
1.1.2 Принтеры → Москва-Центральный офис → Этаж 25 → Кабинет 2508
1.1.3 Принтеры → Москва-Центральный офис → Этаж 25 → Кабинет 2509
1.2.1 Принтеры → Москва-Центральный офис → Этаж 26 → Кабинет 2607
1.2.2 Принтеры → Москва-Центральный офис → Этаж 26 → Кабинет 2608
1.2.3 Принтеры → Москва-Центральный офис → Этаж 26 → Кабинет 2609
2 Принтеры → Сургут-филиал
2.1 Принтеры → Сургут-филиал → Этаж 2
… и так далее.
Мониторинг
Подобная группировка упорядочивает устройства и создаёт агрегирующие статусы для групп устройств. Агрегирующие статусы нужны для визуализации каждой локации в Grafana.
Обычный способ сбора метрик — это SNMP, но в некоторых случаях приходится собирать syslog. Для сбора syslog можем использовать Elasticsearch. Если принтер подключён к рабочей станции или серверу напрямую, данные по нему можно забирать из счётчиков производительности (Performance Counters) Windows. Zabbix позволяет выполнять низкоуровневое обнаружение (Low-level Discovery или LLD) таких счетчиков производительности, поэтому, если вдруг кто-то из пользователей решит подключить принтер к своему устройству, он через некоторое время автоматически появится в Zabbix.
Визуализация
Для визуализации, аналогичную структуру вложенности создаём в Grafana. Вот, к примеру, на скриншоте ниже, 4 этажа, которые мы описали в группах Zabbix. Таким образом, каждой плитке, по каждому этажу, присваивается агрегированный статус объектов, которые находятся в нём. Кликнув на плитке мы переходим на уровень ниже.
После клика на плитку «Этаж 25» переходим на уровень ниже и видим три принтера на этаже. На одном из них («Принтер 2») какая-то проблема. Под самими принтерами представление с событиями по ним. Перейдём ещё на уровень ниже, кликнув на «Принтер 2».
На уровне представления с конкретным принтером видим, что проблема в заканчивающемся тонере. Если прокрутить ниже там тоже будут события.
В Grafana можно создавать также динамические представления. Например, чтобы выводил список принтеров в отдельной локации в зависимости от того, какие принтеры добавлены в определённую группу в Zabbix.
Для создания CMDB мы используем iTop. Если кто не знает, это бесплатный инструмент для управления инцидентами, конфигурациями и запросами. Нас сейчас интересуют конфигурации. Начнём с расположений. Все используемые в Grafana расположения мы заводим в iTop. Посмотрите их в списке расположений. Для каждого уровня создано своё расположение. Не все же принтеры находятся в кабинетах, некоторые ютятся на этажах.
Используя фильтр по расположению принтера мы можем обнаружить список всех принтеров в этой локации. Кстати, на это представлении также можно перейти из Grafana, кликнув там по ссылке в верхнем меню.
Теперь перейдём в карточку принтера. Здесь есть стандартный набор полей: имя, марка, модель, дата ввода в эксплуатацию, период гарантии и т. д. У одного из заказчиков мы также добавляли сюда график работы офиса (филиала), который реплицировался в Zabbix, чтобы не сигнализировать о недоступности в нерабочие часы офиса. Принтер там могли отключить на ночь. Также в карточке доступны контакты ответственных лиц за принтер, подключенные сетевые устройства, договоры на обслуживание и так далее.
Таким подходом мы можем обеспечить мониторинг и учёт принтеров на полностью бесплатном ПО. Конечно, в CMDB можно также хранить и другие активы. В некоторых ситуациях заказчики просят также об отчётности по недоступности принтеров. Помимо стандартного SLA в Zabbix, эта задача может быть решена в Elastic Stack. Для этого в Kibana создан специальный дашборд с фильтром по локациям, чтобы увидеть самые проблемные и озадачить этим ответственных сотрудников.
Это всё, что мы хотели рассказать о мониторинге принтеров. Если наш подход заинтересовал, вы можете нам позвонить или оставить заявку в форме обратной связи.
Вы получите поддержку экспертного уровня: в нашем штате работают инженеры с сертификатами уровня Zabbix Certified Specialist и Zabbix Certified Professional по актуальной версии Zabbix 5.0.
Читайте статьи в нашем корпоративном блоге на Хабре:
Источник
Zabbix и цветные принтеры HP
23 января, 2017
Сегодня рассмотрим мониторинг картриджей принтера по SNMP на примере HP LaserJet CP1525N.
Создадим черный картридж.
Сначала создадим элемент данных как на скриншоте (нажмите для увеличения).
Что же такое SNMP OID и где его взять? На сервере Zabbix введите команду:
snmpwalk -v 1 -c public
Где -v 1 — версия протокола.
Данная команда выведет все ключи, которые имеются для принтера. Однако ключи придется гуглить, так как разобраться в значениях вроде iso.3.6.1.2.1.43.15.1.1.8.1.6 очень трудно.
Кратко мои найденные.
| Ключ | Описание |
| iso.3.6.1.2.1.43.11.1.1.9.1.1 | Процент использования картриджа №1 |
| iso.3.6.1.2.1.43.11.1.1.6.1.1 | Имя картриджа (модель) |
| iso.3.6.1.2.1.43.11.1.1.7.1.1 | Расчетная емкость |
| iso.3.6.1.2.1.43.11.1.1.8.1.1 | Максимальная емкость |
| .1.3.6.1.2.1.1.3.0 | Аптайм |
| 1.3.6.1.2.1.1.5.0 | Имя принтера |
| .1.3.6.1.2.1.25.3.2.1.3.1 | Описание принтера |
| .1.3.6.1.2.1.43.10.2.1.4.1.1 | Всего отпечатано страниц |
Триггеры и графики настраиваются уже по вкусу
Так же есть более удобный способ чтения ключей — программа iReasoning MIB Browser, однако тогда нужно найти и скачать mib файл для устройства, которые есть не всегда.
Источник
Zabbix. Что делать, если принтер не делится информацией по SNMP?
Доброго времени суток!
Данная статья – небольшой мануал, написанный в несколько художественной форме. В статье много картинок, заботливо упрятаных в спойлеры.
Для кого написана эта статья? Для начинающих сисадминов, еще слабо знакомых с UNIX-системами, Zabbix’ом, но имеющих желание централизованно собирать информацию с принтеров.
- Zabbix 5.0
- CentOS 8
- Принтер, который не отдает нужную информацию о расходниках по SNMP (в данном мануале взят в качестве примера Oki C834)
- Практически отсутствующие знания о Zabbix, UNIX-системах
- Очень большое желание собирать информацию о расходниках с принтеров централизованно.
Поехали!
Причины и логические обоснования
Лень – двигатель прогресса. В одно прекрасное утро я понял, что мне лень обходить принтеры, установленные в офисе, для того чтобы контролировать состояние расходных материалов – таких, как тонер-картриджи, драм-юниты, ленты и печи. А также собирать время от времени показатели счетчиков напечатанных страниц – на их основе принимается решение о ТО принтера.
«Это ж сколько времени можно экономить, собирая такую информацию централизованно!» — эта мысль не выходила из моей головы. Было принято решение развернуть систему мониторинга. С подсказки более старших товарищей был выбран Zabbix – с расчетом, что помимо принтеров постепенно подключится мониторинг серверов и сетевого оборудования.
В качестве операционной системы был установлен CentOS 8 – ибо я был хоть немного знаком именно с ним. Возможно, кто-то в данный момент уже пишет, что ай-яй-яй, надо изучать UNIX-системы, если уж взялся за сисадминство. Отвечу вам – да, вы абсолютно правы.
Изучение мануалов по мониторингу принтеров обещало крайне простую процедуру – snmpwalk, вычленение нужных параметров, подключение OID к Zabbix’у, профит. Реальность же немного пошатнуло эту прекрасную картину. Не было показателей состояния расходников. Даже отдаленно похожих не было. Вообще.
Статья Получаем в Zabbix статистику с устройств Kyocera натолкнула на поиск проприетарного ПО для мониторинга принтера и перехват общения ПО с принтером. Такое нашлось – Configuration Tool, утилита от Oki для мониторинга состояния принтеров. Скачиваем, запускаем, и…. по SNMP Configuration Tool получает информацию об имени принтера, МАС-адресу, да версии ПО. Информация же о расходниках передается в теле пакетов TCP/IP.
«Что ж, великолепно, приключения начинаются» — подумалось мне. Обдумывание вариантов решения привело к следующей логической цепочки:
- На данном этапе я не умею и не знаю как правильно сымитировать тот запрос, что отсылает Configuration Tool на принтер.
- Принтер имеет собственную веб-страницу, на которой он размещает информацию о состоянии расходных материалов и количестве отпечатанных страниц
- Решение моей проблемы – вытаскивать (парсить) по расписанию информацию с веб-страницы принтера и неким образом передавать эту информацию в Zabbix.
Поиск инструмента по парсингу дал следующие результаты:
- Bash
- PHP
- Python
Примечание: Я вполне осознаю, что инструментов для парсинга больше, чем приведено в данном списке – но указывать их все не имеет смысла, и далее вы поймете почему.
Я выбрал Bash – и вот почему:
- Предустановленность на большей части UNIX-систем. Мне не нужно ставить дополнительное ПО.
- Простота. Команды логичны, и вполне понятны после небольшого изучения синтаксиса.
- Необходимость изучения UNIX-систем. Изучить синтаксис команд явно не будет лишним в данном направлении.
Разбор веб-страницы принтера
Прежде, чем приступать к парсингу – давайте разберем, что из себя представляет веб-страница принтера.
Прошу прощения, если выражусь неправильно относительно элементов веб-страницы принтера. Я, все таки, начинающий сисадмин, а не веб-разработчик.
Переходим на веб-страницу принтера и видим следующее
Замечаем, что справа сверху на странице есть показатели состояния тонера. Теперь нам остается понять, как именно на веб странице появляются данные показатели. ПКМ-> Inspect. Нам открывается следующая картина.
Подмечаем, что значения тонера, на самом деле, получаются через страницу /status.htm
Видим, что значение показателей тонера передаются в тегах:
После чего с помощью JavaScript значения округляются до десятков и подставляются в страницу.
Переходим на страницу 192.168.***.***/status.htm – и да, действительно нужные нам значения тонера мы видим на данной странице
Теперь мы знаем, где хранятся нужные нам значения состояния тонера. Приступим к парсингу.
Парсинг
Примечание: далее будет описание построения скрипта для парсинга страницы с примерами и картинками. Я постараюсь, что бы описание было понятно даже тем, кто очень слабо знаком с Bash. Если же вы имеете желание прочитать уже результат – прошу пролистывать дальше.
Итак, Bash. Рубикон пройден, как сказали две тысячи лет назад на берегу одноименной реки.
Первым делом я предлагаю ознакомиться с синтаксисом языка. Он крайне прост и незамысловат – но это нам поможет при написании скрипта и автоматизации.
Далее обратим внимание на cURL – command line and tool, как заявлено на официальном сайте этого инструмента. cURL поддерживает огромное количество протоколов, из которых нам требуется поддержка HTTP – помним, что именно по этому протоколу идет «общение» с веб-страницей принтера.
Напишем первый запрос:
В ответ нам вываливается прямо в командную строку огромное количество информации, которую не совсем удобно читать в терминале, не говоря уже об обработке данной информации.
Перенаправим вывод в файл – так будет явно удобнее. В этом нам поможет спецсимвол ‘>’
Открываем получившийся файл в редакторе Vi
Уже гораздо лучше, не правда ли? Однако, вся страница нам все равно не нужна. Нужны лишь значения состояния тонера. Начинаем вычленять данные. В этом нам поможет grep – утилита, ищущая строки, в которых содержится значение, равное указанному регулярному значению.
Внимательно рассмотрим теги, в которых содержится значения тонера. Видим, что в них мы встречаем одно и то же выражение ‘value=”***”’
Более опытные читатели так же могут заметить, что можно отсеять данные по регулярному выражению “hidden”. Да, вы абсолютно правы. Для подтверждения прикрепляю скриншот вывода терминала. Как можете видеть – результат абсолютно такой же, как и при отсеивании через ‘value=”***”’
«Грепаем» результаты, полученные через cURL. Дабы немного ускорить и визуализировать процесс – выводим значения сразу в терминал.
Отлично. Достаточно лаконичный вывод. Далее нам нужно избавиться от текста и оставить лишь числовые значения.
Отсеем текстовые данные, оставив лишь числовые значения. В этом нам снова поможет grep c флагом -Eo. Он позволить вывести только числовые значения.
Итак, мы получили необходимые числовые значения. Теперь разберем наш вывод на отдельные строки – дабы мы могли их по отдельности сохранить в текстовые файлы. В этом нам поможет sed, утилита, являющаяся потоковым текстовым редактором. В нашем случае самое важное то, что sed может вычленять отдельные строки – а нам это как раз и нужно.
Разберем часть с sed. 1p – дать на вывод первую строку. -n – отсеять все, кроме указанной строки. Как видим – после данной команды на выводе – лишь численное значение состояния голубого тонера.
Теперь займемся написание скрипта.
Bash-скрипты имеют некоторую особенность по сравнению с теми же bat-скриптами. Они обязательно должны начинаться с шебанга – «#!». Дальнейшие строки, начинающиеся с # — будут интерпретированы как комментарии.
Скрипт же будет выглядеть следующим образом:
Добавляем файл скрипта в crontab, и тем самым автоматизируем его выполнение. Автор выставил */15 * * * * — выполнение каждые 15 минут.
Итог – веб-страница принтера автоматически парсится, мы получаем необходимые нам числовые значения и сохраняем их в нужной нам директории.
Перенос полученных значений в Zabbix
Теперь займемся переносом данных в Zabbix.
Создадим новый элемент данных. Именуем как нам угодно, тип указываем Zabbix agent.
Самое интересное и важное у нас на данном этапе – ключ. Нам необходим vfs.file.contents[файл, ]. Файл – абсолютный путь к файлу.
Указываем наш путь к файлу и проверяем правильность. На выводе теста мы должны увидеть наше значение черного тонера.
Итог – мы осуществили перенос данных в Zabbix, и теперь можем контролировать состояние расходных материалов централизованно.
Заключение
Мы освоили получение данных с помощью парсинга веб-страниц. В данном примере был взят принтер Oki 834, и успешно осуществлено получение данных о тонере. Я ответственно заявляю, что таким же способом было осуществлено получение данных о состоянии драм-юнитов, ленты и печи.
Таким образом возможно получение информации о расходниках с практически всех принтеров, и не только о принтерах. Парсинг – достаточно удобный инструмент, и работать с ним мне очень понравилось. И если моя статья поможет хотя бы одному человеку – значит, все было не зря.
Хочу так же выразить огромную благодарность redheaddeer, akozhevnikov97 и человеку, пожелавшему быть анонимом за помощь в написании статьи. Всем спасибо!
Источник