Monitorando Status de Serviço NFE da Sefaz com Zabbix

By | 11 de julho de 2016

image

Em 2014, na empresa que trabalhava realizava o monitoramento via web da página de disponibilidade da do Portal de Nota fiscal Eletrônica, naquela época somente com o monitoramento web era possível realizar esse monitoramento com o Zabbix. Porem de lá para cá outros serviços foram surgindo e se tornou impossível realizar o monitoramento do source desta página. A um tempo atrás tive novamente a necessidade de realizar novamente esse monitoramento.

NOTA: Esse tipo de monitoramento pega apenas as informações contidas no portal de Disponibilidade, ele não faz consulta via webservice de cada SEFAZ. Os valores contidos neste portal podem variar, tal informação é disponibilizada por cada SEFAZ e não pelo SCRIPT. Foi desenvolvido a partir de uma brincadeira na comunidade e com base nos scripts é possível realizar outros tipos de monitoramento.

Ajudei o André Pelissari e conseguimos resolvemos essa demanda e monitorar novamente pelo Zabbix, porém utilizando um script externo junto com o CURL. Com o script que iremos mostrar, é possível pegar a disponibilidade de cada serviço de um determinado autorizador.

image

Uma pergunta Bernardo, como os scripts funcionam?

Teremos dois shell script funcionando, são eles:

sefaznfe.discovery.sh – Realiza o download da página e salva em /tmp com o nome statusNFE.txt. Se ele tiver sucesso no download ele retorna o valor 1, caso tenha falha ou a página estiver offline ele retorna 0.
sefaznfe.consulta.sh – Responsável por realizar a consulta dentro do arquivo statusNFE.txt, nas consultas será pesquisada as linhas do Autorizador e cada linha de serviço deste autorizador, nesse script ele verificará as alterações das “Bolinhas” em cada serviço, se for verde (Disponível) ele apresentará o resultado 1, 2 para amarelo (Indisponível) e 0 para Vermelho(Offine).

Posteriormente criaremos um userparameter para cada serviço desse, para que o Zabbix possa chamar o script de consulta colher as informações necessárias.

Para essa documentação, estou utilizando:
Zabbix Server: 3.0.3
Ubuntu server 14.04
Curl pré-instalado.
Acesso à internet no zabbix server.

Mãos na massa, precisaremos criar os dois scripts dentro da pasta de script externos do Zabbix. Utilizando seu editor favorito crie os seguintes arquivos.

sefaznfe.discovery.sh

sefaznfe.consulta.sh

Salve os arquivos e aplique a permissão para que o script possa ser executado.

Feito isso, precisaremos criar nesse momento os nossos userparameter. Inclua as linhas abaixo dentro do seu zabbix_agentd.conf. Será também necessário alterar o UnsafeUserParameters para 1. Apos a inclusão, deverá reiniciar o serviço do agente.

Pronto, nesse momento podemos partir para nosso Frontend do Zabbix.

Precisaremos criar um mapeamento de valor, pois no script ele enviará para o Zabbix apenas os valores 0, 1 e 2, pode criar manualmente ou realize o download do mapeamento abaixo importe para seu Zabbix 3.0.

Mapeamento de Valor (remova o .txt antes da importação).

image

Após ter criado o mapeamento, precisaremos importar o Template. Baixe o arquivo abaixo e importe para seu Zabbix.

Template Disponibilidade Sefaz (antes de importar remova o .txt)

image

Feito a importação, criaremos um host agora, Dê um nome e com o IP local do Zabbix. Já que o script está rodando localmente.

image

Associe o Template recém-importado.

image

E precisaremos criar duas macros, você pode criar essas macros tanto no host, quanto no Template, fica ao seu critério. Uma {$AUT} será para passar qual Autorizador que será feita a pesquisa e outra, {$LINK}, o link da página de disponibilidade. Nesse exemplo utilizei o SVRS, pois é o que meu estado utiliza.

image

Basta neste momento aguardar os resultados da coleta.

image

Gráfico.

image

Pronto. A partir desse momento não será preciso ficar com F5 no site vendo se algum serviço está indisponível. Lembrando que essa solução também é possível monitorar a Disponibilidade do CTE (Conhecimento de Transporte Eletrônico), basta adequar o script para este ambiente, alterando a forma que é consulta dentro do script de consult.

Update:

Alguns leitores informaram que o script não estava funcionando. Pude notar dois pontos.

  1. Versão antiga do CURL;
  2. No script sefaznfe.discovery.sh. Tivemos que incluir a opção -k na linha “if $CURL -s -k -o” para poder ignorar certificados.

29 thoughts on “Monitorando Status de Serviço NFE da Sefaz com Zabbix

  1. Marcelo Moraes

    Bom dia…

    O meu não funcionou, acredito que talvez seja a versão do cURL ou algo assim, ele não consegue criar o arquivo /tmp/statusNFE.txt

    Será que poderia me dar alguma ideia do que possa ser? ou alguma forma de testar os procedimentos?

    Grato

    Reply
    1. blankheet Post author

      Olá, Obrigado pela visita. Utilizei nesse post a versão curl 7.35.0 (x86_64-pc-linux-gnu), libcurl/7.35.0 OpenSSL/1.0.1f zlib/1.2.8 e libid n/1.28 librtmp/2.3.

      Reply
      1. Marcelol

        Eu consegui fazer ele baixar o arquivo, porém tirei as variáveis da linha do cURL e coloquei manualmente o caminho do arquivo e o caminho da pagina de disponibilidade do sefaz. Assim funciona tbm?

        Reply
  2. Wanderlei

    Se eu executar o script manual, como passar os parâmetros?
    Não consegui identificado como que ele verifica o autorizador que está offline.

    Reply
    1. blankheet Post author

      Olá Wanderlei, no script sefaznfe.discovery.sh basta adicionar na frente o link da pagina e o mesmo caso para o sefaznfe.consulta.sh que basta adicionar o autorizador logo na frente.
      Ex: sefaznfe.consulta.sh SVRS

      Reply
  3. Klebson

    Bom dia
    Poderia nos informar como ficou seus arquivos de config pois comigo também não funcionou…

    Reply
    1. blankheet Post author

      Olá Klebson. O post foi feito com base nos meus arquivos de config que está no Zabbix de produção. Pude perceber que em algumas versões do CURL o script não funciona corretamente, claro, pode variar de ambiente para ambiente. Recomento verificar se não tem atualização para ele no seu ambiente e tente refazer o procedimento do zero novamente. Talvez pulou alguma parte. Qualquer duvida estamos a disposição.

      Reply
  4. Leandro

    Bernardo, boa noite!

    Parabens pelo ótimo artigo, no meu ambiente o script de discover esta dando o erro abaixo:

    item “SEFAZ:discovery[{$LINK}]” became not supported: Item does not allow parameters

    Quando executo na mão ele funciona, tem alguma ideia do que pode ser?
    Att.

    Reply
    1. blankheet Post author

      Olá leandro, muito obrigado. Dê uma verificada no seus userparameter se não está faltando algo, ou ate se a opção UnsafeUserParameter está setado como 1.

      Reply
  5. Marcelo Moraes

    Boa tarde…

    Hoje aconteceu uma queda no sefaz de MG e eu pude notar que meu servidor não esta rodando automaticamente o script de discovery, mas se eu ir pelo shell e rodar manualmente funciona. Onde posso ter errado?

    Grato

    Reply
    1. blankheet Post author

      Olá Marcelo. Obrigado pela visita. Dê uma verificada no seu Userparameter de discovery, quando está copiando e colando está faltando algumas partes.

      Reply
  6. Leandro

    Bernardo, boa noite!
    Quando executo meu script de discover via shell ele retorna o valor (online) quando executo via zabbix ele retorna sempre 0 (offiline), ja verifiquei várias as vezes as configurações e estão iguais as que você publicou, não faço ideia do que pode ser..

    Obrigado!

    Att.

    Reply
  7. Leandro

    Bernardo, boa noite!
    Descobri o problema, como havia testado o script executando “na mão” o arquivo temporário ficou “locado” para o usuário root e o usuário do zabbix não conseguia gravar nele por isso ele retornava sempre 0 (offline) para o discovery. Apaguei o arquivo e problema, removi o desassociel e limpei o template e o problema foi solucionado.

    Att.

    Reply
  8. Tangles

    Bernado, Boa tarde!

    Não consegui descobrir o problema, fez o download da pagina, porem o segundo script não esta funcionando.
    Fica com Status não suportado

    Received value [/usr/lib/zabbix/externalscripts/sefaznfe.consulta.sh: 1: /usr/lib/zabbix/externalscripts/sefaznfe.consulta.sh:

    #!/bin/bash: not found/usr/lib/zabbix/externalscripts/sefaznfe.consulta.sh: 25: /usr/lib/zabbix/externalscripts/sefaznfe.consulta.sh: Syntax error: “(” unexpected] is not suitable for value type [Numeric (unsigned)] and data type [Decimal]

    Reply
    1. blankheet Post author

      Obrigado pela Visita Tangles. Pelo que está parecendo ele não está executando o script, aplicou permissão no script para o Zabbix executar? Como está seu userparameter? De uma revisada nisso.

      Reply
  9. Carlos Eduardo

    Bernardo, uma dúvida, tenho que criar uma macro para cada estado que desejo monitorar?
    Ex: Preciso monitorar BA, SP e alguns estados do SVRS, então neste caso preciso criar 3 macros um para cada estado?

    Abraço!

    Reply
    1. Bernardo Lankheet Post author

      Olá Carlos, obrigado pela visita. Desta forma você não irá conseguir fazer vários estados de uma vez só. Deverá criar outros itens no template e adequar para seu ambiente.

      Reply
  10. Gbex TI Marcos

    Olá bernardo, primeiro obrigado pelo tutorial, você poderia me dizer quais alterações tem que ser feita no arquivo Consult para que seja possível consulta CTE.
    “Lembrando que essa solução também é possível monitorar a Disponibilidade do CTE (Conhecimento de Transporte Eletrônico), basta adequar o script para este ambiente, alterando a forma que é consulta dentro do script de consult.”

    Reply
    1. Bernardo Lankheet Post author

      Olá Marcos, bom dia. Obrigado pela visita. Você terá que adequar ao script para o site da CTE, alterar as palavras chaves de consultas no script de consult e o link de acesso para a pagina.

      Reply
  11. Marcos

    Bernando, só não consegui fazer funcionar a ultima linha “recepçao evento”, me retorna o erro Received value [] is not suitable for value type [Numeric (unsigned)] and data type [Decimal]

    STATUS_RECEPCAO_EVENTO=$(echo $CONSULTA_AUTORIZADOR | $AWK -F ‘<img src="' '{print $8}' | $AWK -F '"' '{print $1}')
    consultar_servico "RECEPCAO EVENTO" $STATUS_RECEPCAO_EVENTO

    Reply
    1. Bernardo Lankheet Post author

      Olá Marcos, obrigado pela visita.
      Cria novamente o script de consulta. Veja se não ficou algum caractere diferente ou até se o usuário está com permissão para executar o script. Qualquer duvida estamos a disposição.

      Reply
  12. Eduardo Cardoso

    ótimo post vou tentar fazer no trabalho, pode me tirar uma duvida tem como monitorar as transações TEF com Zabbix?
    onde posso encontrar tutoriais?

    Reply
    1. Bernardo Lankheet Post author

      Olá Eduardo, obrigado pela visita.
      Não tive esta demanda. Porem conheço cases onde já realizam este tipo de monitoramento. Há algumas empresas no mercado que comercializam esta integração com o Zabbix. Caso tenha interesse posso lhe passar alguns contatos.

      Reply
  13. Caio Ferreira Dias

    Ola Bernardo, ja fiz e refiz de acordo com o tutorial e o zabbix aparece o seguinte la nos itens:
    Received value [/usr/bin/cat: /tmp/statusNFE.txt: Arquivo ou diretório não encontrado] is not suitable for …

    Já até criei o arquivo manualmente e quando faço isso a mensagem muda para sem permissão ao arquivo statusNFE.txt
    Com isso apliquei ate chmod 777 /tmp/statusNFE.txt e mesmo assim continual dando erro de permissão.

    Executando manualmente os scripts o arquivo eh gerado.

    Estou usando:
    CentOS7
    Zabbix 3.2
    cURL 7.51.0

    Alguma ideia de como resolver?

    Reply

Deixe uma resposta