Pull to refresh

Опытные мелочи-6, или «Учет и контроль печатника Ивана Федорова»

Reading time 4 min
Views 35K
image Продолжение «опытных мелочей». Предыдущие части: раз, два, три, четыре, пять.

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

В компании, о которой идет речь, довольно много печатают. Есть и большие, мощные принтера (типа HP 9000) и средние, и совсем уж Home класса. Благо, все они сетевые, и ассортимент производителей узок, всего два: HP и Ricoh (в разных ипостасях, от NRG до MB). И вот в один прекрасный весенний день, посмотрев на счета за канцелярию, бережливым руководством была поставлена задача: регулярно собирать статистику печати, «чтоб потом анализировать». Причем сильно они и не заморачивались: «Все принтера сетевые, у них есть страничка статистики, с утра сели обошли по списочку, записали циферки в Excel, вот и все — делов-то»!


Естественно, на наш взгляд, это было неинтересно, глупо и «утомительно», т.к. принтеров в организации довольно много. И мы стали думать «как бы сделать так, чтоб оно само работало». Вообще, мне кажется, это желание («чтоб оно само работало») является ключевым и необходимым для каждого системного администратора, и те, у кого это получается раз за разом, всегда вызывают у меня добрую, белую зависть.

С ходу отринув парсеры веб-страниц (неправильно это, да и, например, у Ricoh страницы были динамическими, не было жесткого URL куда обращаться), мы обратились к старому доброму SNMP. И вот что из этого получилось.

Здесь наверное стоит сделать небольшое отступление для тех, для кого аббревиатура SNMP пока ничего не значит. Господа, вы многое упускаете! В срочном порядке рекомендую уделить вечер другой и изучить вопрос хотя бы на базовом уровне. Если быть кратким, SNMP — это протокол управления и мониторинга, работающий на основе UDP. Подавляющее большинство устройств(если не все), имеющих сетевой интерфейс, поддерживают этот протокол, и позволяют с его помощью не только собирать данные о работе устройства, но и управлять самим устройством. Данные (объекты), которые доступны по SNMP-протоколу, т.н. OID, организованы в иерархическом порядке. На бытовом плане это означает, что если спросить у устройства значение OID с «номером» .1.3.6.1.4.1.11, то устройство ответит и передаст это значение. А зная какой OID соответствует нужному нам значению, можно написать небольшой скрипт, который будет опрашивать устройства и собирать их ответы в базу. Опрашивать устройства можно, например, с помощью вот этих замечательных и бесплатных утилит. Забегая вперед, скажу что в нашем конкретном случае пригодились Snmpget и SnmpWalk.

Алгоритм в целом был понятен, утилиты были под рукой, осталось самое интересное — понять какие же OID обозначают то, что нам нужно: счетчик напечатанных страниц. Полное описание переменных устройства, т.н. MIB-базы довольно непросто найти (можно попробовать поискать тут), но можно пойти и другим путем.

С помощью утилиты SnmpWalk, один раз опросив устройство, вы получаете с него ВСЕ OID с их значениями, которые оно способно выдать. Со своей стороны, мы четко знаем какие именно ЗНАЧЕНИЯ нам нужны (мы ведь можем узнать их текущее состояние на веб-странице). Дальше уже остается дело за малым:
  • Собираем в текстовый файл полную карту устройства с помощью SnmpWalk.
  • Узнаем через веб-интерфейс текущее число напечатанных страниц, которое нам требуется
  • Ищем в файле число напечатанных страниц, и таким образом узнаем код OID.
  • Используем полученный OID в нашем скрипте

image
Несколько замечаний

  • Каждый производитель в однотипных устройствах почти всегда придерживается единой структуры MIB. Соответственно номер OID, соответствующий например счетчику Total Pages Number будет единым для всех принтеров HP (за редким исключением). Это позволяет написать «шаблон опроса», которому будут соответствать многие принтера одного производителя.
  • Иногда в процессе анализа файла snmpwalk находится несколько искомых значений. Тут можно либо напечатать еще одну страничку и, снова собрав данные, определить какой OID содержит нужный нам счетчик, либо просто выбрать немного подумав логически (помним про иерархичность структуры!).
  • Некоторые принтера не показывая на веб-странице определенных счетчиков, тем не менее, позволяют их собрать по SNMP. Например, на веб-странице есть только Total счетчик страниц, но с помощью SNMP можно получить и более подробные значения (дуплекс, А3, число «запросов на печать» и т.д.)
  • Собирать данные лучше сразу куда-нибудь в базу «для последующего анализа». В нашем же случае, по настоянию хозяйственников, я писал все в текстовый файл, который затем автоматически открывался в Excel, и с помощью макроса раскладывался по ячейкам. С Excel хозяйственникам работать было проще, чем с SQL, ну а я лично был не против.
  • С помощью этого нехитрого способа за несколько месяцев мы построили довольно неплохую статистику печати в компании, разумно, с цифрами на руках получили бюджет на более мощные принтера в ряд отделов, и выяснили отношения с компанией заправщиком картриджей, когда выяснилось, что ряд их продукции вместо положенных 15000 страниц выдает на одной заправке от силы 6000.


В качестве бонуса приведу текст скрипта , Excel-макроса и дам несколько пояснений:

  • в начале кода скрипта описаны настройки (пул IP-адресов оборудования, и шаблоны опроса).
  • несмотря на то, что у производителей обычно единая структура MIB, в некоторых случаях, оборудование разного класса все таки имеет разные OID для одних и тех же данных (например у принтеров НР ниже 2ХХХ серии OID для получения серийного номера — один, а выше — другой.
  • для более мощных принтеров мы собираем не только TotalPagesCount, но и всякие другие счетчики (копир, A3, дуплекс и т.д.)
  • у HP есть такое понятие TotalpagesCountEquivalent — это число именно НАПЕЧАТАННЫХ страниц, т.е. полностью прошедших по печатному тракту. В то время как просто TotalPagesCount по версии НР — это число листов взятых из устройств подачи бумаги. Разница между ними — фактически равна замятиям.
  • скрипт собирает серийные номера принтеров, чтобы к ним потом в Excel привязывать данные, а также IP, дату и сетевое имя — это уже просто так, для наглядности.
  • в конце скрипт запускает лежащий рядом с ним Excel-файл, который в свою очередь при открытии запускает макрос, который уже и раскидывает все по полочкам. Довольно сумбурная система, но это результат разделения труда, т.к. от меня хотели голые данные, а «аналитику мы сами напишем». Вот и написали. В нем я уже не смогу что-то подробно объяснить, но попробую.
  • макрос действует так: открывает файл со статистикой, забирает оттуда все данные, копирует цифры статистики в нужные колонки таблицы, привязываясь к серийному номеру обрудования, переименовывает сегодняшний файл статистики в *.bak, закрывает Excel.
  • Макрос пришлось подписать внутренним сертификатом, т.к. отключать безопасность макросов в Excel совсем не хотелось, а без этого автоматически макрос не стартует. И, кстати, это было натуральным квестом, т.к. как и чем подписывать макрос ни я ни его авторы на тот момент понятия не имели :)


Продолжение следует
Tags:
Hubs:
+46
Comments 20
Comments Comments 20

Articles