Polling perangkat cetak menggunakan SNMP saat printer sedang mencetak



Saya akan memberi tahu Anda pengalaman saya dalam membuat aplikasi yang mengumpulkan statistik tentang perangkat pencetakan menggunakan protokol SNMP. Secara total, lebih dari 1000 perangkat dan survei dilakukan secara real time saat printer sedang mencetak. Bagaimana ini semua diterapkan, Anda akan belajar dari artikel.



pengantar


SNMP adalah protokol Internet standar untuk mengelola perangkat dalam jaringan IP berdasarkan arsitektur TCP / UDP.

Menggunakan SNMP tidak mengumpulkan informasi tentang pengguna yang mengirim file untuk dicetak. Selain itu, SNMP tidak dapat digunakan untuk printer lokal yang terhubung melalui USB.
Untuk mengatasi masalah ini, Anda perlu membuat klien yang harus mengumpulkan informasi dan mengirim semua statistik ke server. Organisasi itu sangat mapan sehingga OS Linux yang sama diinstal pada semua mesin klien. Dengan demikian, klien untuk mengumpulkan statistik cetak ditulis dalam sistem Linux sebagai daemon (analog dari layanan di Windows).

Cetak Pengumpulan Informasi Klien


Klien koleksi cetak (ditulis dengan Python) melakukan tugas-tugas berikut:

  1. memotong pesan dari layanan cetak CUPS
  2. menyimpan informasi cetak ke file CSV
  3. mengirimkan file CSV ke folder di server melalui FTP

File CSV berisi bidang-bidang berikut:

  1. Tanggal dan waktu pekerjaan cetak
  2. Alamat IP atau nama domain komputer tempat dokumen dikirim untuk dicetak
  3. Alamat IP atau host perangkat cetak
  4. Cups Job ID - ID Pekerjaan dari Layanan Cetak CUPS
  5. Nama pekerjaan - ini paling sering nama file
  6. Nama pengguna yang dikirim untuk mencetak
  7. Jumlah halaman
  8. Ukuran pekerjaan cetak (Ukuran pekerjaan dalam KB)
  9. Status Cetak (Status Pekerjaan)
  10. Jumlah salinan (Jumlah salinan)
  11. Jumlah salinan pada file pekerjaan - digunakan untuk lebih akurat menentukan jumlah salinan;
  12. Jumlah halaman berdasarkan protokol SNMP - digunakan untuk lebih akurat menentukan jumlah halaman
  13. SNMP tersedia - ini adalah tanda bahwa perangkat harus terus-menerus disurvei menggunakan protokol SNMP saat dokumen sedang dicetak
  14. Penghitung perangkat pencetakan pada saat mulai mencetak (nilai variabel SNMP) adalah penghitung verifikasi yang menentukan awal pemungutan SNMP oleh server

Klien tidak memiliki antarmuka GUI, semua pengaturan terdaftar dalam file konfigurasi

Contoh File Konfigurasi
[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


Jadi, klien ditulis, sekarang kita membutuhkan server yang tidak hanya mengumpulkan informasi dari semua klien, tetapi juga server harus memantau situasi darurat - jeda pencetakan, kertas yang hilang atau macet, dll.

Print Information Collection Arsitektur Server


Server ditulis dalam C #, DBMS adalah MSSQL.

  1. Database Configurator adalah aplikasi GUI yang memungkinkan Anda membuat dan menghapus basis data.
    Basis data dimaksimalkan secara maksimal sehingga tidak ada bidang teks dalam tabel statistik utama untuk menghemat ruang disk.
  2. , GUI SNMP-, OID, .



  3. ( Windows)



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


Sebelum layanan akan memantau pencetakan secara real time, perlu untuk mengurai file CSV lama (yang terakumulasi hingga server bekerja) dan menyimpan informasi dalam database. Kami akan menyebut titik ini "pembacaan pertama direktori file CSV", yang dapat membantu dengan cepat mengumpulkan statistik dari cetakan lama dan menyimpannya ke database.

Kemudian layanan beralih ke pemantauan konstan terhadap penampilan file CSV dalam folder dalam aliran terpisah dengan interval 1 detik. Setiap file CSV diproses dalam aliran terpisah.

Jika ada banyak file CSV di folder, maka dalam hal ini ada batasan jumlah stream baca simultan file sehingga aplikasi bekerja secara stabil. Ketika layanan dimulai, mungkin ada banyak file CSV di folder dan file-file ini diproses tanpa jajak pendapat SNMP; oleh karena itu, pembacaan pertama direktori memiliki batasan terpisah pada jumlah utas pemrosesan file CSV (secara eksperimental ditetapkan bahwa jumlah utas pada pembacaan pertama CSV file harus jauh lebih kecil daripada jumlah utas setelah memproses sejumlah besar file).

Algoritma menyediakan untuk menentukan alamat IP dengan nama perangkat dan sebaliknya (menentukan nama perangkat berdasarkan alamat IP) menggunakan metode System.Net.Dns.GetHostEntry (). Jika tidak ada koneksi dengan perangkat, metode System.Net.Dns.GetHostEntry () membutuhkan waktu yang sangat lama, sehubungan dengan ini, klien yang menyediakan informasi ini ke CSV telah diselesaikan. Tapi pemeriksaan ini tetap di server dan metode System.Net.Dns.GetHostEntry () masih menjadi hambatan.

Menyimpan informasi dalam database


Selain informasi tentang pencetakan, database menyimpan informasi untuk statistik:

  1. Pemungutan suara SNMP mulai dan berakhirnya waktu
  2. jumlah total baris dalam file CSV
  3. Jumlah baris dengan polling SNMP diaktifkan.

Daftar perangkat yang tidak boleh disurvei disediakan untuk, yang disebut pengecualian yang tidak ada yang disimpan dalam database.

Setelah membaca seluruh file CSV, informasi tentang semua pekerjaan cetak dikumpulkan dalam objek Daftar, yang harus dipantau oleh jajak pendapat SNMP. Setelah membaca file CSV, itu ditransfer ke arsip, jika ditentukan oleh pengaturan, dan kemudian file CSV dihapus.

Setelah file CSV sepenuhnya dibaca, diperiksa bahwa pengaturan polling dikonfigurasikan menggunakan protokol SNMP, kemudian perangkat diurutkan berdasarkan prioritas:

  1. Grup default, di mana terdapat semua perangkat basis ricoh_dmnx, adalah nama database sistem pemantauan dari pabrikan Ricoh, dari mana kami mengambil daftar perangkat yang akan disurvei.
  2. Perangkat yang ada di database ricoh_dmnx, tetapi tidak dalam kelompok
  3. Perangkat yang ada di database ricoh_dmnx dan dalam grup
  4. Perangkat yang tidak ada dalam basis data ricoh_dmnx, tetapi ada dalam basis data layanan kami

Setiap perangkat memiliki antrian cetak sehingga pada satu titik waktu, jajak pendapat SNMP hanya bekerja dengan satu pekerjaan cetak. Jadi, ketika perangkat sedang diinterogasi menggunakan protokol SNMP, pengguna dapat mengirim file lain untuk dicetak dan file CSV baru dapat diterima di server, yang disimpan segera dalam database, tetapi polling akan dilakukan setelah saat ini dokumen.

Pemungutan suara SNMP melacak perubahan pada penghitung cetak, status perangkat, dan tanda kesalahan perangkat selama pencetakan. Latensi antara jajak pendapat SNMP adalah 300 ms.

Batuan bawah laut


Algoritma server telah terus ditingkatkan, karena ada banyak situasi yang berbeda di mana penghitung dianggap salah. Berikut ini beberapa kiat dari pengalaman pribadi:

1) Jangan melanjutkan polling saat perangkat berada dalam status kesalahan (misalnya: kertas macet)

2) Kesalahan printer dapat berubah seiring waktu, sehingga batas waktu polling SNMP tidak akan berfungsi jika kesalahan berubah (misalnya, printer kehabisan kertas, tetapi setelah menambahkan kertas ke baki, status printer berubah)

3) Jika beberapa pekerjaan dikirim ke perangkat cetak secara bersamaan, maka penghitung setelah mencetak pekerjaan pertama:
- tidak mengubah status
- mengubah penghitung

Sistem OID Perangkat Pencetakan


Berdasarkan analisis ketiga OID ini, aplikasi saya untuk polling perangkat SNMP ditulis:

1) [1.3.6.1.2.1.43.10.2.1.4.1.1] - Penghitung total perangkat

2) [1.3.6.1.2.1.25.3.5.1 .1.1] - Status perangkat



3) [1.3.6.1.2.1.25.3.2.1.5.1] - Kesalahan perangkat selama pencetakan

Laporan


Laporan diimplementasikan menggunakan Layanan Pelaporan SQL Server.

Laporan Perbandingan Cetak Bulanan




Pekerjaan Cetak oleh Pengguna




Laporan Ringkasan Permintaan SNMP




Statistik Permintaan SNMP




Kesimpulan


Saya senang berbagi pengalaman dalam mengimplementasikan salah satu aplikasi saya yang paling kompleks, yang telah berhasil beroperasi sejak 2018.

Kekhasan dalam implementasi proyek pengumpulan cetak adalah bahwa saya tidak memiliki satu printer pun. Bekerja melalui emulator , yang dapat dengan cepat diinstal dan dikonfigurasi (hanya memiliki file MIB untuk pengaturan perangkat pencetakan).

Di masa depan, saya akan menulis tentang bagaimana pengelolaan agen cetak dilakukan.

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


All Articles