Продовження «досвідчених дрібниць». Попередні частини: разів, два, три, чотири, п'ять.
У цьому пості я розповім про невеликий, але по-своєму цікавий досвід використання протоколу 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 у нашому скрипті
Декілька зауважень
- Кожен виробник в однотипних пристроях майже завжди дотримується єдиної структури 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 зовсім не хотілося, а без цього автоматично макрос не стартує. І, до речі, це було натуральним квестом, тому що як і чим підписувати макрос ні я ні його автори на той момент поняття не мали:)
Продовжити