استقصاء أجهزة الطباعة باستخدام SNMP أثناء قيام الطابعة بالطباعة



سأخبرك بتجربتي في إنشاء تطبيق يجمع إحصائيات حول أجهزة الطباعة باستخدام بروتوكول SNMP. في المجموع ، يتم إجراء أكثر من 1000 جهاز والاستطلاع في الوقت الحقيقي أثناء طباعة الطابعة. كيف يتم تنفيذ كل هذا ، ستتعلم من المقالة.



المقدمة


SNMP هو بروتوكول إنترنت قياسي لإدارة الأجهزة في شبكات IP استنادًا إلى بنى TCP / UDP.

لا يؤدي استخدام SNMP إلى جمع معلومات حول المستخدم الذي أرسل الملف لطباعته. بالإضافة إلى ذلك ، لا يمكن استخدام SNMP للطابعات المحلية المتصلة عبر USB.
لحل هذه المشاكل ، تحتاج إلى إنشاء عميل يجب عليه جمع المعلومات وإرسال جميع الإحصائيات إلى الخادم. تم تأسيس المؤسسة بحيث تم تثبيت نظام التشغيل Linux نفسه على جميع أجهزة العميل. وفقًا لذلك ، تتم كتابة عميل جمع إحصائيات الطباعة في نظام Linux كبرنامج خفي (نظير الخدمة في Windows).

عميل طباعة معلومات الطباعة


يقوم عميل مجموعة الطباعة (المكتوب بلغة Python) بتنفيذ المهام التالية:

  1. اعتراض الرسائل من خدمة الطباعة CUPS
  2. يحفظ معلومات الطباعة إلى ملف CSV
  3. يرسل ملفات CSV إلى مجلد على الخادم عبر FTP

يحتوي ملف CSV على الحقول التالية:

  1. تاريخ ووقت مهمة الطباعة
  2. عنوان IP أو اسم المجال للكمبيوتر الذي تم إرسال المستند للطباعة منه
  3. عنوان IP أو مضيف جهاز الطباعة
  4. معرف مهمة الكؤوس - معرف المهمة من خدمة طباعة CUPS
  5. اسم الوظيفة - غالبًا ما يكون اسم الملف
  6. اسم المستخدم الذي أرسل للطباعة
  7. عدد الصفحات
  8. حجم مهمة الطباعة (حجم المهمة بالكيلوبايت)
  9. حالة الطباعة (حالة المهمة)
  10. عدد النسخ (عدد النسخ)
  11. عدد النسخ الموجودة في ملف الوظيفة - يتم استخدامها لتحديد عدد النسخ بدقة أكبر ؛
  12. عدد الصفحات بواسطة بروتوكول SNMP - يستخدم لتحديد عدد الصفحات بدقة أكبر
  13. SNMP متاح - هذه علامة على أن الجهاز يجب أن يتم استطلاعه باستمرار باستخدام بروتوكول SNMP أثناء طباعة المستند
  14. عداد جهاز الطباعة في وقت بدء الطباعة (قيمة متغيرة SNMP) هو عداد التحقق الذي يحدد بداية اقتراع SNMP بواسطة الخادم

لا يمتلك العميل واجهة GUI ، ويتم تسجيل جميع الإعدادات في ملف التكوين

مثال ملف التكوين
[main]
#    
app_directory = /opt/printwatcher

#  .    
#        )
stat_file_directory = /opt/printwatcher/data

# ,      
state_file = /opt/printwatcher/data/state.pickle

# ,       
command_state_file = /opt/printwatcher/data/command.state

#    
#   :
#  datetime -     ISO 8601
#  random -    8 
stat_filename_template = {random}_print_jobs.csv

#      
# (    )
max_stat_file_size_mb = 10

#  CSV.  : TAB, SPACE, SEMICOLON, COMMA
csv_delimiter = SEMICOLON

#      
start_service = start


[logging]

#   (DEBUG, INFO, TRACE)
level = DEBUG

#  
log_file = /var/log/printwatcher.log

#      
restart_log_file = /var/log/printwatcher-restart.log

#   
# (  /   logrotate)
max_log_file_size_mb = 10


[cups]

# ,      CUPS
spool_directory = /var/spool/cups/

#    CUPS    
# ( )
job_file_lifetime_hours = 48

#           
# ( )
job_info_lifetime_hours = 48


#  FTP
[ftp]

host = 192.168.1.39
user = ftpuser
password = P@ssw0rd
port = 21

#         FTP
# ( )
connection_retry_seconds = 10

#  ,       FTP
# ( )
connection_timeout_seconds = 3600

#        FTP 
# ( )
polling_interval = 30

#     ftp-
management_directory = /management

#       ftp-
response_directory = /management

#   
update_directory = /update

#      
data_directory = /data

#  SNMP
[snmp]
#      SNMP
retrieve_snmp_info = false
community = public
oid = 1.3.6.1.2.1.43.10.2.1.4.1.1
port = 161


إذن ، العميل مكتوب ، الآن نحن بحاجة إلى خادم لا يقوم فقط بجمع المعلومات من جميع العملاء ، ولكن أيضًا يجب على الخادم مراقبة حالات الطوارئ - إيقاف الطباعة مؤقتًا ، الورق المفقود أو المنحشر ، إلخ.

طباعة بنية خادم جمع المعلومات


الخادم مكتوب بلغة C # ، DBMS MSSQL.

  1. Database Configurator هو تطبيق GUI يسمح لك بإنشاء قاعدة بيانات وحذفها.
    يتم تطبيع قاعدة البيانات إلى أقصى حد بحيث لا توجد حقول نص في جدول الإحصائيات الرئيسي لتوفير مساحة على القرص.
  2. , GUI SNMP-, OID, .



  3. ( Windows)



  1. CSV-
  2. CSV
  3. CSV-
  4. CSV- ( ) [ ]
  5. CSV-
  6. OID'
  7. ,


قبل أن تراقب الخدمة الطباعة في الوقت الفعلي ، من الضروري تحليل ملفات CSV القديمة (التي تراكمت حتى كان الخادم يعمل) وحفظ المعلومات في قاعدة البيانات. سوف نطلق على هذه النقطة "القراءة الأولى لدليل ملف CSV" ، والتي يمكن أن تساعد في جمع إحصائيات المطبوعة القديمة بسرعة وحفظها في قاعدة البيانات.

ثم تنتقل الخدمة إلى المراقبة المستمرة لظهور ملفات CSV في مجلد في دفق منفصل بفاصل زمني 1 ثانية. تتم معالجة كل ملف CSV في دفق منفصل.

إذا كان هناك الكثير من ملفات CSV في المجلد ، فهناك في هذه الحالة حد لعدد تدفقات القراءة المتزامنة للملفات حتى يعمل التطبيق بشكل مستقر. عند بدء الخدمة ، يمكن أن يكون هناك الكثير من ملفات CSV في المجلد وتتم معالجة هذه الملفات دون استقصاء SNMP ؛ وبناءً على ذلك ، فإن القراءة الأولى للدليل لها حد منفصل على عدد سلاسل عمليات معالجة ملفات CSV (وقد ثبت تجريبياً أن عدد سلاسل المحادثات في القراءة الأولى لـ CSV يجب أن تكون الملفات أصغر بكثير من عدد سلاسل العمليات بعد معالجة عدد كبير من الملفات).

توفر الخوارزمية تحديد عنوان IP حسب اسم الجهاز والعكس بالعكس (تحديد اسم الجهاز حسب عنوان IP) باستخدام أسلوب System.Net.Dns.GetHostEntry (). إذا لم يكن هناك اتصال بالجهاز ، تستغرق الطريقة System.Net.Dns.GetHostEntry () وقتًا طويلاً جدًا ، فيما يتعلق بهذا ، تم الانتهاء من العميل الذي يوفر هذه المعلومات في CSV. ولكن ظل هذا الاختيار على الخادم ولا تزال طريقة System.Net.Dns.GetHostEntry () تمثل اختناقًا.

حفظ المعلومات في قاعدة البيانات


بالإضافة إلى معلومات حول الطباعة ، تقوم قاعدة البيانات بتخزين المعلومات للإحصاءات:

  1. بدء اقتراع SNMP ووقت انتهائه
  2. إجمالي عدد الأسطر في ملف CSV
  3. عدد الأسطر مع تمكين استطلاع SNMP.

يتم توفير قائمة بالأجهزة التي لا ينبغي استطلاعها ، ما يسمى الاستثناءات التي لا يتم تخزين أي شيء لها في قاعدة البيانات.

بعد قراءة ملف CSV بأكمله ، يتم جمع معلومات حول جميع مهام الطباعة في كائن القائمة ، والذي يجب مراقبته من خلال استطلاع SNMP. بعد قراءة ملف CSV ، يتم نقله إلى الأرشيف ، إذا حددته الإعدادات ، ثم يتم حذف ملف CSV.

بعد قراءة ملف CSV بالكامل ، يتم التحقق من تكوين إعدادات الاستقصاء باستخدام بروتوكول SNMP ، ثم يتم فرز الأجهزة حسب الأولوية:

  1. المجموعة الافتراضية ، التي توجد فيها جميع أجهزة قاعدة ricoh_dmnx ، هي اسم قاعدة بيانات نظام المراقبة من الشركة المصنعة Ricoh ، والتي نأخذ منها قائمة الأجهزة التي سيتم التصويت عليها.
  2. الأجهزة الموجودة في قاعدة بيانات ricoh_dmnx ، ولكن ليس في مجموعات
  3. الأجهزة الموجودة في قاعدة بيانات ricoh_dmnx والموجودة في مجموعات
  4. الأجهزة غير الموجودة في قاعدة بيانات ricoh_dmnx ، ولكنها موجودة في قاعدة بيانات خدمتنا

يحتوي كل جهاز على قائمة انتظار طباعة بحيث يعمل استطلاع SNMP مع مهمة طباعة واحدة فقط في وقت ما. وبالتالي ، أثناء استجواب الجهاز باستخدام بروتوكول SNMP ، يمكن للمستخدم إرسال ملف آخر للطباعة ويمكن استلام ملف CSV جديد على الخادم ، والذي يتم حفظه على الفور في قاعدة البيانات ، ولكن سيتم إجراء الاستطلاع بعد الحالي المستند.

يتتبع استطلاع SNMP التغييرات في عداد الطباعة وحالة الجهاز وعلامة خطأ في الجهاز أثناء الطباعة. الكمون بين استطلاعات SNMP هو 300 مللي ثانية.

صخور تحت الماء


تم تحسين خوارزمية الخادم باستمرار ، حيث كانت هناك العديد من المواقف المختلفة التي تم فيها اعتبار العداد بشكل غير صحيح. إليك بعض النصائح من التجربة الشخصية:

1) لا تتابع الاستقصاء عندما يكون الجهاز في حالة خطأ (على سبيل المثال: انحشار الورق)

2) قد يتغير خطأ في الطابعة بمرور الوقت ، لذلك لا ينبغي أن تنتهي مهلة الاستطلاع SNMP إذا تغير الخطأ (على سبيل المثال ، نفد الورق من الطابعة ، ولكن بعد إضافة الورق إلى الدرج ، تغيرت حالة الطابعة)

3) إذا تم إرسال العديد من المهام إلى جهاز الطباعة في نفس الوقت ، فإن العداد بعد طباعة المهمة الأولى:
- لا يغير الحالة
- يغير العداد

معرفات النظام لأجهزة الطباعة


استنادًا إلى تحليل OIDs الثلاثة هذه ، تمت كتابة طلبي لاستقصاء أجهزة SNMP:

1) [1.3.6.1.2.1.43.10.2.1.4.1.1] - عداد الجهاز الإجمالي

2) [1.3.6.1.2.1.25.3.5.1 .1.1] - حالة الجهاز



3) [1.3.6.1.2.1.25.3.2.1.5.1] - خطأ في الجهاز أثناء الطباعة

التقارير


يتم تنفيذ التقارير باستخدام SQL Server Reporting Services.

تقرير مقارنة المطبوعات الشهرية




المهام المطبوعة من قبل المستخدم




تقرير ملخص طلب SNMP




إحصائيات طلب SNMP




استنتاج


يسعدني أن أشارك تجربتي في تنفيذ أحد أكثر تطبيقاتي تعقيدًا ، والتي تعمل بنجاح منذ عام 2018.

من السمات المميزة في تنفيذ مشروع مجموعة الطباعة عدم وجود طابعة واحدة معي. يعمل من خلال محاكي ، والذي يمكن تثبيته وتكوينه بسرعة (لديك فقط ملف MIB لإعدادات جهاز الطباعة).

في المستقبل ، سأكتب عن كيفية إدارة عوامل الطباعة.

Source: https://habr.com/ru/post/undefined/


All Articles