
Este artigo é um pequeno manual escrito em uma forma um tanto artística. Há muitas fotos no artigo, cuidadosamente escondidas em spoilers.
Para quem é este artigo? Para administradores de sistemas novatos que ainda estão pouco familiarizados com sistemas UNIX, Zabbix, mas que desejam coletar centralmente informações de impressoras.
Introdutório. Acessível:
- Zabbix 5.0
- CentOS 8
- Uma impressora que não envia as informações necessárias sobre consumíveis via SNMP (neste manual, a Oki C834 é considerada um exemplo)
- Conhecimento virtualmente ausente de Zabbix, sistemas UNIX
- Há um grande desejo de coletar informações sobre consumíveis de impressoras de forma centralizada.
Ir!
Razões e justificativas
A preguiça é o motor do progresso. Certa manhã, percebi que estava com preguiça de percorrer as impressoras instaladas no escritório para monitorar o status dos consumíveis - como cartuchos de toner, unidades de tambor, fitas e fornos. E também reúna de vez em quando os indicadores dos contadores das páginas impressas - com base neles, é tomada uma decisão sobre a manutenção da impressora.
"Bem, isso é quanto tempo você pode economizar coletando essas informações centralmente!" - esse pensamento não saiu da minha cabeça. Decidiu-se implantar um sistema de monitoramento. O Zabbix foi escolhido com uma dica de companheiros mais antigos - com a expectativa de que, além das impressoras, o monitoramento de servidores e equipamentos de rede fossem gradativamente conectados.
O CentOS 8 foi instalado como sistema operacional - pelo menos eu estava um pouco familiarizado com ele. Talvez alguém já esteja escrevendo no momento que ay-a-ay, você precisa estudar sistemas UNIX, se você já iniciou a administração de sistemas. Minha resposta é sim, você está absolutamente certo.
Estudar os manuais de monitoramento de impressoras prometia um procedimento extremamente simples - snmpwalk, isolando os parâmetros necessários, conectando o OID ao Zabbix, lucro. A realidade, porém, abalou um pouco esta bela imagem. Não houve indicadores do estado dos consumíveis. Não havia nem remotamente semelhantes. Geralmente.
Artigo Obtendo estatísticas de dispositivos Kyocera no Zabbixsolicitou uma pesquisa por software proprietário para monitorar a impressora e interceptar a comunicação entre o software e a impressora. Foi encontrado - Configuration Tool, um utilitário da Oki para monitorar o status das impressoras. Baixe, execute e…. via SNMP Configuration Tool recebe informações sobre o nome da impressora, endereço MAC e versão do software. As informações sobre os consumíveis são transmitidas no corpo dos pacotes TCP / IP.
“Bem, ótimo, a aventura começa”, pensei. Pensar nas opções de solução levou à seguinte cadeia lógica:
- Neste estágio, não sei e não sei como simular corretamente a solicitação que a Ferramenta de Configuração envia para a impressora.
- A impressora tem sua própria página na web, onde fornece informações sobre o status dos suprimentos e o número de páginas impressas
- A solução para o meu problema é extrair (analisar) as informações da página da web da impressora em uma programação e, de alguma forma, transferir essas informações para o Zabbix.
A pesquisa de uma ferramenta de análise gerou os seguintes resultados:
- Bash
- PHP
- Pitão
Nota: Estou bem ciente de que existem mais ferramentas de análise do que as mostradas nesta lista - mas não faz sentido indicar todas elas, e então você entenderá por quê.
Eu escolhi Bash - e este é o motivo:
- Pré-instalado na maioria dos sistemas UNIX. Não preciso instalar software adicional.
- Simplicidade. Os comandos são lógicos e bastante compreensíveis após um pequeno estudo da sintaxe.
- A necessidade de aprender sistemas UNIX. Obviamente, não será supérfluo estudar a sintaxe do comando nesta direção.
Analise uma página da web da impressora
Antes de começarmos a analisar, vamos dar uma olhada no que é uma página da web da impressora.
Nota
, - . , , , -.
-
-
Página da web da impressora

Observe que existem indicadores de status do toner no canto superior direito da página. Agora, precisamos entender como esses indicadores aparecem na página da web. RMB-> Inspecionar. A seguinte imagem se abre para nós.
Inspeção do código da página


Observe que os valores do toner são na verdade obtidos através da página /status.htm.Vamos
que os valores do toner são transmitidos em tags:
Em seguida, usando JavaScript, os valores são arredondados para dezenas e inseridos na página.
Vá para a página 192.168. ***. *** / status.htm - e sim, vemos os valores de toner de que realmente precisamos nesta página
status.htm

Agora sabemos onde os valores de status do toner que desejamos estão armazenados. Vamos começar a analisar.
Análise
Nota: o seguinte será uma descrição da construção de um script para analisar uma página com exemplos e imagens. Tentarei deixar a descrição clara mesmo para aqueles que não estão familiarizados com o Bash. Se você já quiser ler o resultado, vá mais adiante.
Então, Bash. O Rubicão já foi passado, como diziam há dois mil anos, às margens do rio do mesmo nome.
Em primeiro lugar, sugiro que você se familiarize com a sintaxe da linguagem . É extremamente simples e direto - mas nos ajudará na criação de scripts e automação.
A seguir, vamos prestar atenção a cURL - linha de comando e ferramenta, conforme declarado no site oficialesta ferramenta. cURL suporta um grande número de protocolos, dos quais precisamos de suporte para HTTP - lembre-se de que este é o protocolo usado para "comunicar" com a página da web da impressora.
Vamos escrever a primeira solicitação:
$ curl 192.168.***.***/status.htm
Saída terminal

Em resposta, uma grande quantidade de informações é despejada diretamente na linha de comando, o que não é muito conveniente de ler no terminal, sem falar no processamento dessas informações.
Vamos redirecionar a saída para um arquivo - isso obviamente será mais conveniente. O caractere especial '>' nos ajudará com isso.
$ curl 192.168.***.***/status.htm > Oki.txt
Abra o arquivo resultante no editor Vi
$ vi Oki.txt
Oki.txt no editor Vi

Muito melhor, não é? No entanto, não precisamos da página inteira de qualquer maneira. Apenas os valores de status do toner são necessários. Começamos a isolar os dados. É aqui que o grep, um utilitário que procura por linhas contendo um valor igual a um valor regular especificado, nos ajudará.
Dê uma olhada nas etiquetas que contêm os valores do toner. Vemos que neles encontramos a mesma expressão 'valor = ”***”'
Nota
? - 100.
Nota
, “hidden”. , . . – , ‘value=”***”’

Nós "rasgamos" os resultados obtidos por meio do cURL. Para agilizar e visualizar um pouco o processo, enviamos os valores diretamente para o terminal.
$ curl 192.168.***.***/status.htm | grep ‘value=”***”’
Resultados Grep

Excelente. Conclusão concisa o suficiente. Em seguida, precisamos nos livrar do texto e deixar apenas os valores numéricos.
Nota
, – « Zabbix’ !». , . – . .
Filtramos os dados de texto, deixando apenas valores numéricos. Grep com a bandeira -Eo nos ajudará com isso novamente. Isso permitirá que você exiba apenas valores numéricos.
$ curl 192.168.***.***/status.htm | grep ‘value=”***”’ | grep -Eo ‘[0-9]{1,}’
Exibindo números

Portanto, obtivemos os valores numéricos necessários. Agora vamos analisar nossa saída em linhas separadas para que possamos salvá-los separadamente em arquivos de texto. É aqui que o sed, um utilitário editor de texto em fluxo, se torna útil. No nosso caso, o mais importante é que o sed pode isolar linhas individuais - que é exatamente o que precisamos.
Curl 192.168.***.***/status.htm | grep ‘value=”***”’ | grep -Eo ‘[0-9]{1,}’ | sed -n 1p
Saída sed

Vamos dar uma olhada na parte sed. 1p - imprime a primeira linha. -n - exclui tudo, exceto a linha especificada. Como você pode ver, após esse comando, a saída mostra apenas o valor numérico do status do toner ciano.
Agora vamos começar a escrever um script.
Os scripts de bash têm uma certa peculiaridade em comparação com os mesmos scripts de bastão. Eles devem começar com um shebang - "#!". Outras linhas começando com # serão interpretadas como comentários.
O script será semelhante a este:
#! /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
Adicione o arquivo de script ao crontab e, assim, automatize sua execução. O autor definiu * / 15 * * * * - execução a cada 15 minutos.
Resumindo - a página da web da impressora é analisada automaticamente, obtemos os valores numéricos de que precisamos e os salvamos no diretório de que precisamos.
Transferindo valores recebidos para Zabbix
Agora vamos começar a transferir dados para o Zabbix.
Vamos criar um novo item. Nós o nomeamos como quisermos, especificamos o tipo de agente Zabbix.
ATENÇÃO
Zabbix-server Zabbix-agent. , , Zabbix-agent.
A coisa mais interessante e importante que temos nesta fase é a chave. Precisamos de vfs.file.contents [file, <encoding>]. Arquivo é o caminho absoluto para o arquivo.
Criar item no Zabbix

Indicamos nosso caminho para o arquivo e verificamos a exatidão. Na saída do teste, devemos ver nosso valor de toner preto.
Teste concluído com sucesso

Conclusão - migramos os dados para o Zabbix e agora podemos controlar o status dos consumíveis de forma centralizada.
Conclusão
Dominamos a obtenção de dados por meio da análise de páginas da web. Neste exemplo, a impressora Oki 834 foi usada e a aquisição de dados do toner foi bem-sucedida. Declaro responsavelmente que o mesmo método foi usado para obter dados sobre o estado das unidades de cilindro, fita e forno.
Evidência de captura de tela


Assim, é possível obter informações sobre consumíveis de quase todas as impressoras, e não apenas sobre impressoras. A análise é uma ferramenta bastante conveniente e eu realmente gostei de trabalhar com ela. E se meu artigo ajuda pelo menos uma pessoa, então não foi em vão.
Eu também quero expressar minha profunda gratidãoruiva, akozhevnikov97e uma pessoa que desejou manter o anonimato por sua ajuda na redação do artigo. Obrigado a todos!