Zabbix. ¿Qué sucede si la impresora no comparte información a través de SNMP?

¡Buen día!



imagenKDPV



Este artículo es un pequeño manual escrito en una forma algo artística. Hay muchas imágenes en el artículo, cuidadosamente escondidas en spoilers.



¿Para quién es este artículo? Para administradores de sistemas novatos que todavía están poco familiarizados con los sistemas UNIX, Zabbix, pero que quieren recopilar información de las impresoras de forma centralizada.



Introductorio. Disponible:



  • Zabbix 5.0
  • CentOS 8
  • Una impresora que no envía la información necesaria sobre consumibles a través de SNMP (en este manual, se toma como ejemplo Oki C834)
  • Conocimiento prácticamente ausente de Zabbix, sistemas UNIX
  • Existe un gran deseo de recopilar información sobre los consumibles de las impresoras de forma centralizada.


¡Vamos!



Razones y fundamentos



La pereza es el motor del progreso. Una buena mañana, me di cuenta de que era demasiado vago para recorrer las impresoras instaladas en la oficina a fin de controlar el estado de los consumibles como cartuchos de tóner, unidades de tambor, cintas y hornos. Y también recopile de vez en cuando los indicadores de los contadores de las páginas impresas; sobre su base, se toma una decisión sobre el mantenimiento de la impresora.



"Bueno, ¡este es el tiempo que puede ahorrar al recopilar dicha información de forma centralizada!" - este pensamiento no salió de mi cabeza. Se decidió implementar un sistema de monitoreo. Zabbix fue elegido con una sugerencia de camaradas mayores, con la expectativa de que, además de las impresoras, se conectaría gradualmente la supervisión de servidores y equipos de red.



CentOS 8 se instaló como sistema operativo, ya que al menos estaba un poco familiarizado con él. Quizás alguien ya esté escribiendo en este momento que ay-ay-ay, necesitas estudiar sistemas UNIX, si ya te has dedicado a la administración de sistemas. Te responderé: sí, tienes toda la razón.



Estudiar los manuales para monitorear impresoras prometía un procedimiento extremadamente simple: snmpwalk, aislar los parámetros necesarios, conectar el OID a Zabbix, obtener ganancias. La realidad, sin embargo, sacudió un poco esta hermosa imagen. No hubo indicadores del estado de los consumibles. No había ni remotamente similares. En general.



Artículo Obtención de estadísticas de dispositivos Kyocera en Zabbixsolicitó una búsqueda de software propietario para monitorear la impresora e interceptar la comunicación entre el software y la impresora. Se encontró - Herramienta de configuración, una utilidad de Oki para monitorear el estado de las impresoras. Descarga, ejecuta y…. mediante la herramienta de configuración SNMP recibe información sobre el nombre de la impresora, la dirección MAC y la versión del software. La información sobre los consumibles se transmite en el cuerpo de los paquetes TCP / IP.



“Bueno, genial, comienza la aventura”, pensé. Pensar en las opciones de solución llevó a la siguiente cadena lógica:



  1. En esta etapa, no sé cómo y no sé cómo simular correctamente la solicitud que la herramienta de configuración envía a la impresora.
  2. La impresora tiene su propia página web donde proporciona información sobre el estado de los suministros y el número de páginas impresas.
  3. La solución a mi problema es extraer (analizar) información de la página web de la impresora en un horario y de alguna manera transferir esta información a Zabbix.


La búsqueda de una herramienta de análisis dio los siguientes resultados:



  1. Intento
  2. PHP
  3. Pitón


Nota: Soy bastante consciente de que hay más herramientas de análisis de las que se muestran en esta lista, pero no tiene sentido indicarlas todas, y entonces comprenderá por qué.



Elegí Bash, y este es el motivo:



  1. Preinstalado en la mayoría de los sistemas UNIX. No necesito instalar software adicional.
  2. Sencillez. Los comandos son lógicos y bastante comprensibles después de un pequeño estudio de la sintaxis.
  3. La necesidad de aprender sistemas UNIX. Evidentemente, no será superfluo estudiar la sintaxis de los comandos en esta dirección.


Analizar la página web de una impresora



Antes de comenzar a analizar, echemos un vistazo a qué es una página web de impresora.



Nota
, - . , , , -.



-



Página web de la impresora
image



Observe que hay indicadores de estado del tóner en la parte superior derecha de la página. Ahora nos queda por entender cómo aparecen estos indicadores en la página web. RMB-> Inspeccionar. Se nos abre la siguiente imagen.



Inspección de código de página
image

image



Tenga en cuenta que los valores de tóner en realidad se obtienen a través de la página /status.htm

Vemos que los valores de tóner se transmiten en etiquetas:



Luego, usando JavaScript, los valores se redondean a decenas y se insertan en la página.



Vaya a la página 192.168. ***. *** / status.htm - y sí, vemos los valores de tóner que realmente necesitamos en esta página



status.htm
image



Ahora sabemos dónde se almacenan los valores de estado del tóner que queremos. Comencemos a analizar.



Analizando



Nota: lo siguiente será una descripción de la creación de un script para analizar una página con ejemplos e imágenes. Intentaré aclarar la descripción incluso para aquellos que están muy poco familiarizados con Bash. Si ya desea leer el resultado, desplácese más.

Entonces Bash. El Rubicón ha pasado, como decían hace dos mil años, a orillas del río del mismo nombre.

En primer lugar, le sugiero que se familiarice con la sintaxis del lenguaje . Es extremadamente simple y directo, pero nos ayudará en la creación de scripts y la automatización.



A continuación, prestemos atención a cURL: línea de comando y herramienta, como se indica en el sitio web oficialesta herramienta. cURL admite una gran cantidad de protocolos, de los cuales necesitamos soporte para HTTP; recuerde que este es el protocolo que se usa para "comunicarse" con la página web de la impresora.

Escribamos la primera solicitud:



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


Salida terminal
image



En respuesta, una gran cantidad de información se vierte directamente en la línea de comandos, lo que no es muy conveniente para leer en la terminal, sin mencionar el procesamiento de esta información.

Redirigamos la salida a un archivo; esto obviamente será más conveniente. El carácter especial '>' nos ayudará con esto.



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


Abra el archivo resultante en el editor Vi



$ vi Oki.txt


Oki.txt en el editor Vi
image



Mucho mejor, ¿no? Sin embargo, no necesitamos toda la página de todos modos. Solo se necesitan los valores de estado del tóner. Comenzamos a aislar los datos. Aquí es donde grep, una utilidad que busca líneas que contienen un valor igual a un valor regular especificado, nos ayudará.



Observe detenidamente las etiquetas que contienen los valores de tóner. Vemos que en ellos encontramos la misma expresión 'valor = ”***”'



Nota
? - 100.



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



image



"Desgarramos" los resultados obtenidos mediante cURL. Para acelerar y visualizar un poco el proceso, enviamos los valores directamente al terminal.



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


Resultados de Grep
image



Excelente. Conclusión suficientemente concisa. A continuación, debemos deshacernos del texto y dejar solo los valores numéricos.



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



Filtramos datos de texto, dejando solo valores numéricos. Grep con la bandera -Eo nos ayudará con esto nuevamente. Le permitirá mostrar solo valores numéricos.



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


Salida de números
image



Entonces, obtuvimos los valores numéricos requeridos. Ahora analizaremos nuestra salida en líneas separadas para que podamos guardarlas por separado en archivos de texto. Aquí es donde sed, una utilidad de edición de texto de flujo, resulta útil. En nuestro caso, lo más importante es que sed puede aislar líneas individuales, que es exactamente lo que necesitamos.



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


Sed salida
image



Echemos un vistazo a la parte sed. 1p: muestra la primera línea. -n: excluye todo excepto la línea especificada. Como puede ver, después de este comando, la salida muestra solo el valor numérico del estado del tóner cian.



Ahora comencemos a escribir un guión.



Los scripts de Bash tienen una cierta peculiaridad en comparación con los mismos scripts de bat. Deben comenzar con un shebang - "#!". Las líneas que comiencen con # se interpretarán como comentarios.



El guión se verá así:



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


Agregue el archivo de secuencia de comandos a crontab y, por lo tanto, automatice su ejecución. El autor ha establecido * / 15 * * * * - ejecución cada 15 minutos.



En pocas palabras: la página web de la impresora se analiza automáticamente, obtenemos los valores numéricos que necesitamos y los guardamos en el directorio que necesitamos.



Transfiriendo valores recibidos a Zabbix



Ahora vayamos a transferir datos a Zabbix.



Nota
, , . , , .



Creemos un nuevo artículo. Lo nombramos como queramos, especificamos el tipo de agente Zabbix.



ATENCIÓN
Zabbix-server Zabbix-agent. , , Zabbix-agent.



Lo más interesante e importante que tenemos en esta etapa es la clave. Necesitamos vfs.file.contents [archivo, <codificación>]. Archivo es la ruta absoluta al archivo.



Crear artículo en Zabbix
image



Indicamos nuestra ruta al archivo y comprobamos la corrección. En la salida de prueba, deberíamos ver nuestro valor de tóner negro.



Prueba completada con éxito
image



En pocas palabras: hemos migrado datos a Zabbix y ahora podemos controlar el estado de los consumibles de forma centralizada.



Conclusión



Hemos dominado la obtención de datos mediante el análisis de páginas web. En este ejemplo, se tomó una impresora Oki 834 y la adquisición de datos de tóner fue exitosa. Declaro responsablemente que se utilizó el mismo método para obtener datos sobre el estado de las unidades de tambor, cinta y horno.



Prueba de captura de pantalla
image



image



Por lo tanto, es posible obtener información sobre consumibles de casi todas las impresoras, y no solo de impresoras. El análisis es una herramienta bastante conveniente y me gustó mucho trabajar con ella. Y si mi artículo ayuda al menos a una persona, entonces no fue en vano.



También quiero expresar mi más profundo agradecimiento.pelirroja, akozhevnikov97y una persona que deseaba permanecer anónima por su ayuda para escribir el artículo. ¡Gracias a todos!



All Articles