Zabbix. Que faire si l'imprimante ne partage pas les informations via SNMP?

Bonne journée!



imageKDPV



Cet article est un petit manuel écrit sous une forme quelque peu artistique. Il y a de nombreuses images dans l'article, soigneusement cachées dans des spoilers.



A qui est destiné cet article? Pour les administrateurs système novices qui sont encore peu familiarisés avec les systèmes UNIX, Zabbix, mais qui souhaitent collecter des informations de manière centralisée sur les imprimantes.



Introduction. Disponible:



  • Zabbix 5.0
  • CentOS 8
  • Une imprimante qui n'envoie pas les informations nécessaires sur les consommables via SNMP (dans ce manuel, Oki C834 est prise comme exemple)
  • Connaissance pratiquement absente des systèmes Zabbix et UNIX
  • Il existe un grand désir de collecter des informations sur les consommables auprès des imprimantes de manière centralisée.


Aller!



Raisons et justifications



La paresse est le moteur du progrès. Un beau matin, je me suis rendu compte que j'étais trop paresseux pour faire le tour des imprimantes installées dans le bureau afin de surveiller l'état des consommables tels que les cartouches de toner, les tambours, les rubans et les fours. Et collectez également de temps en temps les indicateurs des compteurs des pages imprimées - sur leur base, une décision est prise concernant la maintenance de l'imprimante.



"Eh bien, c'est le temps que vous pouvez gagner en collectant ces informations de manière centralisée!" - cette pensée n'a pas quitté ma tête. Il a été décidé de déployer un système de surveillance. Zabbix a été choisi avec un soupçon de camarades plus âgés - avec l'espoir qu'en plus des imprimantes, la surveillance des serveurs et des équipements réseau serait progressivement connectée.



CentOS 8 a été installé comme système d'exploitation - car je le connaissais au moins un peu. Peut-être que quelqu'un en ce moment est déjà en train d'écrire que ay-ay-ay, vous devez étudier les systèmes UNIX, si vous avez déjà pris en charge l'administration système. Ma réponse est oui, vous avez absolument raison.



L'étude des manuels de surveillance des imprimantes promettait une procédure extrêmement simple - snmpwalk, isolement des paramètres nécessaires, connexion de l'OID à Zabbix, profit. La réalité a cependant un peu secoué cette belle photo. Il n'y avait aucun indicateur de l'état des consommables. Il n'y en avait même pas de similaires à distance. Généralement.



Article Obtenir des statistiques à partir d'appareils Kyocera dans Zabbixa incité à rechercher un logiciel propriétaire pour surveiller l'imprimante et intercepter la communication entre le logiciel et l'imprimante. Il a été trouvé - Outil de configuration, un utilitaire d'Oki pour surveiller l'état des imprimantes. Téléchargez, exécutez et…. via SNMP Configuration Tool reçoit des informations sur le nom de l'imprimante, l'adresse MAC et la version du logiciel. Les informations sur les consommables sont transmises dans le corps des paquets TCP / IP.



«Eh bien, super, l'aventure commence», ai-je pensé. La réflexion sur les options de solution a conduit à la chaîne logique suivante:



  1. A ce stade, je ne sais pas comment et ne sais pas comment simuler correctement la demande que l'Outil de Configuration envoie à l'imprimante.
  2. L'imprimante possède sa propre page Web où elle fournit des informations sur l'état des fournitures et le nombre de pages imprimées
  3. La solution à mon problème consiste à extraire (analyser) les informations de la page Web de l'imprimante selon un calendrier et à transférer ces informations vers Zabbix.


La recherche d'un outil d'analyse a donné les résultats suivants:



  1. Frapper
  2. PHP
  3. Python


Remarque: je suis tout à fait conscient qu'il y a plus d'outils d'analyse que ceux indiqués dans cette liste - mais cela n'a aucun sens de les indiquer tous, et vous comprendrez alors pourquoi.



J'ai choisi Bash - et voici pourquoi:



  1. Préinstallé sur la plupart des systèmes UNIX. Je n'ai pas besoin d'installer de logiciel supplémentaire.
  2. Simplicité. Les commandes sont logiques et tout à fait compréhensibles après une petite étude de la syntaxe.
  3. Le besoin d'apprendre les systèmes UNIX. Evidemment, il ne sera pas superflu d'étudier la syntaxe des commandes dans ce sens.


Analyser une page Web d'imprimante



Avant de commencer l'analyse, examinons ce qu'est une page Web d'imprimante.



Remarque
, - . , , , -.



-



Page Web de l'imprimante
image



Notez qu'il y a des indicateurs d'état du toner en haut à droite de la page. Il nous reste maintenant à comprendre comment ces indicateurs apparaissent sur la page Web. RMB-> Inspecter. L'image suivante s'ouvre à nous.



Inspection du code de page
image

image



Notez que les valeurs de toner sont en fait obtenues via la page /status.htm.

Nous voyons que les valeurs de toner sont transmises dans les balises:



Après cela, en utilisant JavaScript, les valeurs sont arrondies à des dizaines et insérées dans la page.



Allez à la page 192.168. ***. *** / status.htm - et oui, nous voyons les valeurs de toner dont nous avons vraiment besoin sur cette page



status.htm
image



Nous savons maintenant où sont stockées les valeurs d'état du toner souhaitées. Commençons par analyser.



Analyse



Remarque: ce qui suit sera une description de la construction d'un script pour analyser une page avec des exemples et des images. J'essaierai de rendre la description claire même pour ceux qui connaissent très peu Bash. Si vous souhaitez déjà lire le résultat, veuillez faire défiler plus loin.

Alors Bash. Le Rubicon a été adopté, comme on disait il y a deux mille ans, sur les rives de la rivière du même nom.

Tout d'abord, je vous suggère de vous familiariser avec la syntaxe de la langue . C'est extrêmement simple et direct - mais cela nous aidera dans les scripts et l'automatisation.



Ensuite, prêtons attention à cURL - ligne de commande et outil, comme indiqué sur le site officielcet outil. cURL supporte un grand nombre de protocoles, dont nous avons besoin de support pour HTTP - rappelez-vous que c'est le protocole utilisé pour «communiquer» avec la page Web de l'imprimante.

Écrivons la première requête:



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


Sortie de borne
image



En réponse, une énorme quantité d'informations est vidée directement dans la ligne de commande, ce qui n'est pas très pratique à lire dans le terminal, sans parler du traitement de ces informations.

Redirigeons la sortie vers un fichier - ce sera évidemment plus pratique. Le caractère spécial «>» nous aidera avec cela.



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


Ouvrez le fichier résultant dans l'éditeur Vi



$ vi Oki.txt


Oki.txt dans l'éditeur Vi
image



Beaucoup mieux, non? Cependant, nous n'avons pas besoin de la page entière de toute façon. Seules les valeurs d'état du toner sont nécessaires. Nous commençons à isoler les données. C'est là que grep, un utilitaire qui recherche des lignes contenant une valeur égale à une valeur régulière spécifiée, nous aidera.



Examinez attentivement les étiquettes qui contiennent les valeurs de toner. Nous voyons que nous rencontrons en eux la même expression 'valeur = ”***”'



Remarque
? - 100.



Remarque
, “hidden”. , . . – , ‘value=”***”’



image



Nous «déchirons» les résultats obtenus par cURL. Afin d'accélérer et de visualiser un peu le processus, nous sortons les valeurs directement sur le terminal.



$ curl 192.168.***.***/status.htm | grep ‘value=”***”’ 


Résultats Grep
image



Excellent. Conclusion assez concise. Ensuite, nous devons nous débarrasser du texte et ne laisser que les valeurs numériques.



Remarque
, – « Zabbix’ !». , . – . .



Nous filtrons les données textuelles, ne laissant que des valeurs numériques. Grep avec le drapeau -Eo nous aidera à nouveau. Cela permettra uniquement l'affichage de valeurs numériques.



$ curl 192.168.***.***/status.htm | grep ‘value=”***”’ | grep -Eo ‘[0-9]{1,}’


Affichage des nombres
image



Nous avons donc obtenu les valeurs numériques requises. Analysons maintenant notre sortie dans des lignes séparées afin de pouvoir les enregistrer séparément dans des fichiers texte. C'est là que sed, un utilitaire d'édition de texte de flux, est utile. Dans notre cas, le plus important est que sed puisse isoler des lignées individuelles - ce qui est exactement ce dont nous avons besoin.



Curl 192.168.***.***/status.htm | grep ‘value=”***”’ | grep -Eo ‘[0-9]{1,}’ | sed -n 1p


Sortie Sed
image



Jetons un coup d'œil à la partie sed. 1p - affiche la première ligne. -n - exclut tout sauf la ligne spécifiée. Comme vous pouvez le voir, après cette commande, la sortie affiche uniquement la valeur numérique de l'état du toner cyan.



Commençons maintenant à écrire un script.



Les scripts bash ont une certaine particularité par rapport aux mêmes scripts bat. Ils doivent commencer par un shebang - "#!". Les lignes suivantes commençant par # seront interprétées comme des commentaires.



Le script ressemblera à ceci:



#! /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


Ajoutez le fichier de script à crontab et automatisez ainsi son exécution. L'auteur a défini * / 15 * * * * - exécution toutes les 15 minutes.



Bottom line - la page Web de l'imprimante est automatiquement analysée, nous obtenons les valeurs numériques dont nous avons besoin et les sauvegardons dans le répertoire dont nous avons besoin.



Transférer les valeurs reçues vers Zabbix



Passons maintenant au transfert de données vers Zabbix.



Remarque
, , . , , .



Créons un nouvel élément. On le nomme comme on veut, on spécifie le type d'agent Zabbix.



ATTENTION
Zabbix-server Zabbix-agent. , , Zabbix-agent.



La chose la plus intéressante et la plus importante que nous ayons à ce stade est la clé. Nous avons besoin de vfs.file.contents [fichier, <encoding>]. Le fichier est le chemin absolu du fichier.



Créer un élément dans Zabbix
image



Nous indiquons notre chemin vers le fichier et vérifions l'exactitude. Sur la sortie de test, nous devrions voir notre valeur de toner noir.



Test terminé avec succès
image



En bout de ligne, nous avons migré les données vers Zabbix et nous pouvons désormais contrôler l'état des consommables de manière centralisée.



Conclusion



Nous avons maîtrisé l'obtention de données en analysant les pages Web. Dans cet exemple, l'imprimante Oki 834 a été prise et l'acquisition des données de toner a réussi. Je déclare de manière responsable que de la même manière, des données sur l'état des tambours, du ruban et du four ont été obtenues.



Preuve de capture d'écran
image



image



Ainsi, il est possible d'obtenir des informations sur les consommables de presque toutes les imprimantes, et pas seulement sur les imprimantes. L'analyse est un outil assez pratique, et j'ai vraiment aimé travailler avec. Et si mon article aide au moins une personne, ce n'est pas en vain.



Je veux également exprimer ma profonde gratituderousse, akozhevnikov97et une personne qui souhaitait rester anonyme pour son aide à la rédaction de l'article. Merci à tous!



All Articles