Zabbix. Bagaimana jika printer tidak berbagi informasi melalui SNMP?

Selamat siang!



gambarKDPV



Artikel ini adalah manual kecil yang ditulis dalam bentuk yang agak artistik. Ada banyak gambar dalam artikel itu, tersembunyi dengan cermat di spoiler.



Untuk siapa artikel ini? Untuk sysadmin pemula yang masih sedikit terbiasa dengan sistem UNIX, Zabbix, tetapi yang ingin mengumpulkan informasi dari printer secara terpusat.



Pengantar. Tersedia:



  • Zabbix 5.0
  • CentOS 8
  • Printer yang tidak mengirimkan informasi yang diperlukan tentang bahan habis pakai melalui SNMP (dalam manual ini, Oki C834 diambil sebagai contoh)
  • Pengetahuan yang hampir tidak ada tentang Zabbix, sistem UNIX
  • Ada keinginan besar untuk mengumpulkan informasi tentang bahan habis pakai dari printer secara terpusat.


Pergilah!



Alasan dan alasan



Kemalasan adalah mesin kemajuan. Suatu pagi yang cerah, saya menyadari bahwa saya terlalu malas untuk berkeliling ke printer yang dipasang di kantor untuk memantau status bahan habis pakai seperti kartrid toner, unit drum, pita, dan oven. Dan juga dari waktu ke waktu mengumpulkan indikator penghitung halaman yang dicetak - atas dasar mereka, keputusan dibuat tentang pemeliharaan printer.



"Nah, ini berapa banyak waktu yang dapat Anda hemat dengan mengumpulkan informasi seperti itu secara terpusat!" - pikiran ini tidak meninggalkan kepalaku. Diputuskan untuk menggunakan sistem pemantauan. Zabbix dipilih dengan petunjuk dari rekan-rekan yang lebih tua - dengan harapan bahwa selain printer, pemantauan server dan peralatan jaringan akan terhubung secara bertahap.



CentOS 8 diinstal sebagai sistem operasi - karena saya setidaknya sedikit mengenalnya. Mungkin seseorang sudah menulis saat ini bahwa ay-ay-ay, Anda perlu mempelajari sistem UNIX, jika Anda telah mengambil administrasi sistem. Jawaban saya adalah ya, Anda benar sekali.



Mempelajari manual untuk memantau printer menjanjikan prosedur yang sangat sederhana - snmpwalk, mengisolasi parameter yang diperlukan, menghubungkan OID ke Zabbix, untung. Realitas telah sedikit mengguncang gambaran indah ini. Tidak ada indikator kondisi barang habis pakai. Bahkan tidak ada yang mirip. Umumnya.



Artikel Mendapatkan statistik dari perangkat Kyocera di Zabbixmeminta perangkat lunak berpemilik untuk memantau printer dan mengganggu komunikasi antara perangkat lunak dan printer. Ditemukan - Alat Konfigurasi, utilitas dari Oki untuk memantau status printer. Unduh, jalankan, danโ€ฆ. melalui SNMP Configuration Tool menerima informasi tentang nama printer, alamat MAC, dan versi perangkat lunak. Informasi tentang bahan habis pakai ditransmisikan di badan paket TCP / IP.



โ€œHebat, petualangan dimulai,โ€ pikir saya. Berpikir tentang opsi solusi mengarah ke rantai logis berikut:



  1. Pada tahap ini, saya tidak tahu caranya dan saya tidak tahu cara benar mensimulasikan permintaan yang dikirim Alat Konfigurasi ke printer.
  2. Printer memiliki halaman web sendiri yang memberikan informasi tentang status persediaan dan jumlah halaman yang dicetak
  3. Solusi untuk masalah saya adalah mengekstrak (mengurai) informasi dari halaman web printer sesuai jadwal dan entah bagaimana mentransfer informasi ini ke Zabbix.


Pencarian untuk alat parsing memberikan hasil sebagai berikut:



  1. Pesta
  2. PHP
  3. Python


Catatan: Saya cukup sadar bahwa ada lebih banyak alat parsing daripada yang ditampilkan dalam daftar ini - tetapi tidak masuk akal untuk menunjukkan semuanya, dan Anda akan mengerti alasannya.



Saya memilih Bash - dan inilah alasannya:



  1. Pra-instal pada sebagian besar sistem UNIX. Saya tidak perlu menginstal perangkat lunak tambahan.
  2. Kesederhanaan. Perintahnya logis, dan cukup dimengerti setelah sedikit mempelajari sintaks.
  3. Kebutuhan untuk mempelajari sistem UNIX. Jelas tidak akan berlebihan untuk mempelajari sintaks perintah ke arah ini.


Parse halaman web printer



Sebelum kita mulai parsing, mari kita lihat apa itu halaman web printer.



Catatan
, - . , , , -.



-



Halaman web printer
image



Perhatikan bahwa ada indikator status toner di kanan atas halaman. Sekarang tinggal kita memahami bagaimana indikator ini muncul di halaman web. RMB-> Periksa. Gambar berikut terbuka bagi kita.



Inspeksi kode halaman
image

image



Perhatikan bahwa nilai toner sebenarnya diperoleh melalui halaman /status.htm

Kita melihat bahwa nilai toner dikirim dalam tag:



Kemudian, dengan menggunakan JavaScript, nilai dibulatkan menjadi puluhan dan dimasukkan ke dalam halaman.



Buka halaman 192.168. ***. *** / status.htm - dan ya, kami melihat nilai toner yang benar-benar kami butuhkan di halaman ini



status.htm
image



Kami sekarang tahu di mana nilai status toner yang kami inginkan disimpan. Mari mulai parsing.



Parsing



Catatan: berikut ini adalah deskripsi pembuatan script untuk mengurai halaman dengan contoh dan gambar. Saya akan mencoba memperjelas uraiannya bahkan bagi mereka yang sangat sedikit mengenal Bash. Jika Anda ingin membaca hasilnya, silahkan scroll lebih lanjut.

Jadi Bash. Rubicon telah berlalu, seperti yang mereka katakan dua ribu tahun yang lalu, di tepi sungai dengan nama yang sama.

Pertama-tama, saya sarankan Anda membiasakan diri dengan sintaks bahasa . Ini sangat sederhana dan lugas - tetapi ini akan membantu kita dalam pembuatan skrip dan otomatisasi.



Selanjutnya, mari perhatikan cURL - baris perintah dan alat, seperti yang dinyatakan di situs web resmialat ini. cURL mendukung sejumlah besar protokol, di mana kami memerlukan dukungan untuk HTTP - ingatlah bahwa ini adalah protokol yang digunakan untuk "berkomunikasi" dengan halaman web printer.

Mari tulis permintaan pertama:



$ curl 192.168.***.***/status.htm


Keluaran terminal
image



Sebagai tanggapan, sejumlah besar informasi dibuang langsung ke baris perintah, yang sangat tidak nyaman untuk dibaca di terminal, belum lagi pemrosesan informasi ini.

Mari kita alihkan output ke file - ini jelas akan lebih nyaman. Karakter khusus '>' akan membantu kita dalam hal ini.



$ curl 192.168.***.***/status.htm > Oki.txt


Buka file yang dihasilkan di editor Vi



$ vi Oki.txt


Oki.txt di editor Vi
image



Jauh lebih baik, bukan? Namun, kami tidak membutuhkan keseluruhan halaman. Hanya nilai status toner yang dibutuhkan. Kami mulai mengisolasi data. Di sinilah grep, utilitas yang mencari baris yang berisi nilai yang sama dengan nilai reguler yang ditentukan, akan membantu kita.



Mari kita lihat lebih dekat tag yang mengandung nilai toner. Kami melihat bahwa di dalamnya kami bertemu dengan ekspresi yang sama 'value = โ€***โ€'



Catatan
? - 100.



Catatan
, โ€œhiddenโ€. , . . โ€“ , โ€˜value=โ€***โ€โ€™



image



Kami "merobek" hasil yang diperoleh melalui cURL. Untuk sedikit mempercepat dan memvisualisasikan prosesnya, kami mengeluarkan nilai langsung ke terminal.



$ curl 192.168.***.***/status.htm | grep โ€˜value=โ€***โ€โ€™ 


Hasil grep
image



Luar biasa. Kesimpulan yang cukup ringkas. Selanjutnya, kita perlu menghilangkan teks dan hanya menyisakan nilai numerik.



Catatan
, โ€“ ยซ Zabbixโ€™ !ยป. , . โ€“ . .



Kami memfilter data teks, hanya menyisakan nilai numerik. Grep dengan flag -Eo akan membantu kita lagi dalam hal ini. Ini akan memungkinkan hanya nilai numerik untuk ditampilkan.



$ curl 192.168.***.***/status.htm | grep โ€˜value=โ€***โ€โ€™ | grep -Eo โ€˜[0-9]{1,}โ€™


Mengeluarkan angka
image



Jadi, kami mendapatkan nilai numerik yang diperlukan. Sekarang mari kita analisis output kita menjadi baris terpisah sehingga kita dapat menyimpannya secara terpisah ke file teks. Di sinilah sed, utilitas editor teks aliran, berguna. Dalam kasus kami, hal terpenting adalah sed dapat mengisolasi baris individu - yang persis seperti yang kami butuhkan.



Curl 192.168.***.***/status.htm | grep โ€˜value=โ€***โ€โ€™ | grep -Eo โ€˜[0-9]{1,}โ€™ | sed -n 1p


Keluaran sed
image



Mari kita lihat bagian sed. 1p - keluaran baris pertama. -n - mengecualikan semuanya kecuali baris yang ditentukan. Seperti yang Anda lihat, setelah perintah ini, output hanya menunjukkan nilai numerik dari status toner cyan.



Sekarang mari kita mulai menulis skrip.



Skrip Bash memiliki kekhasan tertentu dibandingkan dengan skrip bat yang sama. Mereka harus mulai dengan shebang - "#!". Baris selanjutnya yang dimulai dengan # akan diartikan sebagai komentar.



Skripnya akan terlihat seperti ini:



#! /bin/bash 
#This script received toner level's from Oki_834
curl 192.168.***.***/status.htm | grep โ€˜value=โ€***โ€โ€™ | grep -Eo โ€˜[0-9]{1,}โ€™ | sed -n 1p >/var/cyan.txt
curl 192.168.***.***/status.htm | grep โ€˜value=โ€***โ€โ€™ | grep -Eo โ€˜[0-9]{1,}โ€™ | sed -n 2p >/var/magenta.txt
curl 192.168.***.***/status.htm | grep โ€˜value=โ€***โ€โ€™ | grep -Eo โ€˜[0-9]{1,}โ€™ | sed -n 3p >/var/yellow.txt
curl 192.168.***.***/status.htm | grep โ€˜value=โ€***โ€โ€™ | grep -Eo โ€˜[0-9]{1,}โ€™ | sed -n 4p >/var/black.txt


Tambahkan file skrip ke crontab, dan dengan demikian otomatis eksekusinya. Penulis telah menetapkan * / 15 * * * * - eksekusi setiap 15 menit.



Intinya - halaman web printer secara otomatis diurai, kita mendapatkan nilai numerik yang kita butuhkan dan menyimpannya di direktori yang kita butuhkan.



Mentransfer nilai yang diterima ke Zabbix



Sekarang mari mulai mentransfer data ke Zabbix.



Catatan
, , . , , .



Mari buat item baru. Kami menamainya sesuka kami, kami menentukan jenis agen Zabbix.



PERHATIAN
Zabbix-server Zabbix-agent. , , Zabbix-agent.



Hal paling menarik dan penting yang kami miliki pada tahap ini adalah kuncinya. Kami membutuhkan vfs.file.contents [file, <encoding>]. File adalah jalur absolut ke file.



Buat item di Zabbix
image



Kami menunjukkan jalur kami ke file dan memeriksa kebenarannya. Pada hasil tes, kita akan melihat nilai toner hitam kita.



Tes berhasil diselesaikan
image



Intinya - kami telah memigrasi data ke Zabbix, dan sekarang kami dapat mengontrol status bahan habis pakai secara terpusat.



Kesimpulan



Kami telah menguasai mendapatkan data dengan mengurai halaman web. Dalam contoh ini, printer Oki 834 diambil dan akuisisi data toner berhasil. Saya secara bertanggung jawab menyatakan bahwa metode yang sama digunakan untuk mendapatkan data tentang status unit drum, tape dan oven.



Bukti tangkapan layar
image



image



Dengan demikian, Anda dapat memperoleh informasi tentang bahan habis pakai dari hampir semua printer, dan tidak hanya tentang printer. Parsing adalah alat yang cukup nyaman, dan saya sangat suka bekerja dengannya. Dan jika artikel saya membantu setidaknya satu orang, itu berarti semuanya tidak sia-sia.



Saya juga ingin mengucapkan terima kasih yang dalamberambut merah, akozhevnikov97dan seseorang yang tidak ingin disebutkan namanya atas bantuannya dalam menulis artikel. Terimakasih untuk semua!



All Articles