Plugin NFe 2.00 Nagios

Publicado por Rogério Tomassoni em 11/05/2011

[ Hits: 12.113 ]

 


Plugin NFe 2.00 Nagios



Plugin que faz verificação do status do serviço da Nota Fiscal eletrônica 2.00.

O plugin foi escrito em Java e Shell Script, os méritos das classes principais são de www.javac.com.br, apenas fiz pequenas modificações para adaptá-lo ao ambiente.

Irei disponibilizar tanto o código fonte, quanto ele já construído. Devido ao fato de eu ter suprimido algumas mensagens de erro do try do Java, o código fonte é necessário, para que as mensagens sejam exibidas.

O projeto foi construído e escrito no Netbeans. Vale lembrar que para o plugin funcionar, claro, é preciso ter o JRE na máquina.

Também irei anexar o projeto já construído chamado NFeBuildCacerts, que gera os certificados CA para cada link.

Os projetos já construídos e prontos para uso encontram-se no diretório "dist".

Usei o banco de dados HSQLDB. Para manter as configurações básicas do aplicativo, existe o HSQL Database Manager que é um front-end para manipular a base, porém não entraremos em detalhes, modificaremos a base com editor de texto de sua preferência.

A base encontra-se no diretório "bd", e o arquivo a ser modificado é o "nfeStatus.script", nele haverá o cadastro dos links da Sefaz a ser verificado. O caminho completo para os certificados (cacert, e pfx), senhas dos certificados. (No projeto em anexo, existe a base já populada para alguns links).

Vamos iniciar à configuração do plugin.

Primeiro, gere os certificados CA para cada link com o projeto NFeBuildCacerts:

# java -jar NFeBuildCacerts.jar nfe-cacerts-sp nfe.fazenda.sp.gov.br

Onde:
  • NFeBuildCacerts.jar é o projeto construído.
  • NnfeCacerts-sp é o certificado a ser gerado (pode ter qualquer nome, lembre-se que ele deve ser configurado no BD depois).
  • nfe.fazenda.sp.gov.br é o link ao qual deverá ser gerado o certificado.

Ao executar o aplicativo e tudo ocorrer de acordo, será exibido algo parecido com o que segue abaixo:

INFO: | Loading KeyStore nfe-cacerts-sp...
INFO: | Opening connection to nfe.fazenda.sp.gov.br:443...
INFO: | Starting SSL handshake...
INFO: | No errors, certificate is already trusted
INFO: | Server sent 3 certificate(s):
INFO: | Added certificate to keystore 'nfe-cacerts-sp' using alias 'nfe.fazenda.sp.gov.br-0'
INFO: | Added certificate to keystore 'nfe-cacerts-sp' using alias 'nfe.fazenda.sp.gov.br-1'
INFO: | Added certificate to keystore 'nfe-cacerts-sp' using alias 'nfe.fazenda.sp.gov.br-2'
INFO: | Cacerts gerado em: D:\Projetos\Projeto NFE\NFeBuildCacerts\nfe-cacerts- sp


Após gerado o certificado para cada link, atualize o BD. Exemplo:

INSERT INTO WEBSERVICE VALUES(35,'https://nfe.fazenda.sp.gov.br/nfeweb/services/nfestatusservico2.asmx','/usr/local/nagios/li bexec/nfeStatus/certsPFX/meu.pfx','senha_pfx','/usr/local/nagios/libexec/nfeStatus/cacerts/nfe- cacerts-sp')

Agora criaremos a estrutura de diretórios no Nagios, ficando assim: "/usr/local/nagios/libexec/nfeStatus".
Linux: Plugin NFe 2.00 Nagios
  • bd -> Onde encontra-se o Banco de Dados
  • cacerts -> Colocar os certificados gerados com NFeBuildCacerts
  • certsPFX -> Certificados propriamente dito. (.pfx)
  • lib -> Bibliotecas de dependências do aplicativo Java (NFeConsultaStatus.jar).
  • check_status_nfe -> Shell Script que retorna os estados do link para o Nagios, baseado no retorno do NFeConsultaStatus.jar.
  • log4j.properties -> Arquivo de propriedades do log4j (Caso queira ver os logs no shell altere a linha log4j.rootCategory=OFF, S , para, log4j.rootCategory=INFO, S)
  • NFeConsultaStatus.jar -> O aplicativo que construímos.

Após os certificados gerados, o Java instalado na máquina, vamos testar o aplicativo. Dentro do shell script "check_status_nfe" há uma linha que chama o java para executar o aplicativo, assim:

/usr/java/jre1.6.0_24/bin/java -jar /usr/local/nagios/libexec/nfeStatus/NFeConsultaStatus.jar $CODIGO_ESTADO

Troque o "$CODIGO_ESTADO" pelo código cadastrado no BD, lembrando que utilizei os códigos oficiais do IBGE (pode ser encontradas na net com facilidade).

Logo, execute no shell informando um dos códigos que tenha no BD, com o certificados. Exemplo para São Paulo seria:

# /usr/java/jre1.6.0_24/bin/java -jar /usr/local/nagios/libexec/nfeStatus/NFeConsultaStatus.jar 35
Serviço em Operação - Tempo medio: 1

Note a resposta: "Serviço em Operação - Tempo medio: 1", isso nos diz que esta tudo OK com os certificados, links e, por consequência, o BD está OK também. (confronte o resultado com os semáforos do site da Sefaz versão 2.00).

Detalhe: Devido a falta de padrão na resposta (Operação, operacao), o shell script tem a linhas que tratam a resposta, são as condições if.

O script trata a resposta do aplicativo que criamos e retorna os estados para o Nagios, logo, não esqueça de alterar o script caso mude os retornos do aplicativo no Java.

Se for utilizar os links de homologação é preciso alterar o tipo de ambiente no código Java na linha 67 aproximadamente (<tpAmb>1</tpAmb>), reconstrua o aplicativo.

Altere de:

xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>").append(" <consStatServ versao=\"2.00\" xmlns=\"http://www.portalfiscal.inf.br/nfe\">").append(" <tpAmb>1</tpAmb>").append("<cUF>").append(codigoDoEstado).append("</cUF>") .append(" <xServ>STATUS</xServ>").append("</consStatServ>");

Para:

xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>").append(" <consStatServ versao=\"2.00\" xmlns=\"http://www.portalfiscal.inf.br/nfe\">").append(" <tpAmb>2</tpAmb>").append("<cUF>").append(codigoDoEstado).append("</cUF>") .append(" <xServ>STATUS</xServ>").append("</consStatServ>");


Agora vamos configurar o Nagios. Adicione no nagios.cfg:

# Sefaz
cfg_file=/usr/local/nagios/etc/objects/sefazgroups.cfg
cfg_file=/usr/local/nagios/etc/objects/linksSefaz.cfg

Crie linksSefaz.cfg.

#Defina um host
define host{
   use         linux- server               ;    
   host_name   Links SEFAZ
   alias       Links SEFAZ
   address     127.0.0.1    
}


# SP - https://nfe.fazenda.sp.gov.br/nfeweb/services/nfestatusservico2.asmx
define service{
   use              &n bsp;    generic-nfe
   host_name             Links SEFAZ
   service_description   NFe 35 - SP
   check_command         check_nfe_status!35
   contact_groups        admins,programadores
   servicegroups         links_sefaz
}

Crie sefazgroups.cfg:

define servicegroup{
   servicegroup_name   links_sefaz
   alias              & nbsp;  Servicos SEFAZ
}

No commands.cfg:

# 'check_nfe_status' command definition
define command{
   command_name   check_nfe_status
   command_line   /usr/local/nagios/libexec/nfeStatus/check_status_nfe $ARG1$
   }

No templates.cfg:

define service{
        name                       ;       generic-nfe
        active_checks_enabled   &nb sp;       1
        passive_checks_enabled   &n bsp;      1
        parallelize_check    &n bsp;          1
        obsess_over_service     ;         1
        check_freshness    &n bsp;            0
        notifications_enabled     ;       1
        event_handler_enabled   &nb sp;       1
        flap_detection_enabled   &nb sp;      1
        failure_prediction_enabled       1
        process_perf_data    & nbsp;          1
        retain_status_information   & nbsp;   1
        retain_nonstatus_information  &nbs p; 1
        is_volatile     &n bsp;               0
        check_period                      ;24x7
        max_check_attempts   &nbs p;          5
        normal_check_interval   &nb sp;       5
        retry_check_interval     ;        2
        contact_groups    &nbs p;             admins
        notification_options             w,u,c,r
        notification_interval            8
        notification_period    & nbsp;        24x7
        register     &nbs p;              &nb sp;   0
}

Neste ponto devemos estar com tudo funcionando.
Linux: Plugin NFe 2.00 Nagios
Reinicie o Nagios e aguarde a tarefa de checagem ser executada. Lembre-se: sempre verifique as permissões dos arquivos. Caso queira ver as mensagens que suprimi (Exceções), altere as linhas 104 e 105:

( System.out.println("Time out");

para:

System.out.println(ex));

Assumi que qualquer coisa diferente de OK, é problema para nós, então suprimi as mensagens de erro.

Os arquivos:
  • NFe_Consulta Status.zip -> Projeto Netbeans completo, com fonte e já construido (Dir. dist), aplicativo que verifica o status do serviço.
  • nfeStatus.zip -> Projeto já construido com estrutura de diretório pronta para adicionar ao Nagios aplicativo que verifica o status do serviço.
  • NFeBuildCacerts.z ip -> Projeto Netbeans completo, com fonte e já construido (Dir. dist), aplicativo que gera o certificados.

Não retiro o mérito dos autores, que toda base para projeto foi conseguida através da comunidade:
Apenas ajustei e adicionei algumas funções.

Sintam-se a vontade para opinar, alterar, sugerir e distribuir o conteúdo desta dica.

Espero que seja útil. Qualquer dúvida, sugestão... Só comentar, que na medida do tempo disponível vou respondendo.

Outras dicas deste autor

Resolvendo problema de Nagios + NPC

Limpando lixeira centralizada do Samba

Bloqueando tráfego via MAC com iptables

Perfis com uma pitada de tunning

Acertando permissão do nagios.cmd

Leitura recomendada

Slackware e BIND - Corrigindo erro em chroot após upgrade

Ouvindo música da rádio UOL no Ubuntu

Lendo resumos RSS no Mozilla Thunderbird

Corrigindo erro "dispositivo não gerenciado" do NetworkManager na hora de conectar-se à internet via conexão cabeada

MellowPlayer - Ouça Spotify, Deezer, Google Play, Tune In dentre outros

  

Comentários
[1] Comentário enviado por tomassoni em 10/06/2011 - 15:54h

Caso ocorra o erro Transport error: 403 Error: Forbidden, esse erro é causado pelo certificado.
Acontece com os estados 42 Santa Catarina e 33 Rio de Janeiro.
Para corrigir importe a chave em um navegador IE, e depois de importado, exporte ele usando as opções:
Sim,exportar a chave particular e
Incluir todos os certificados no caminho de certificação, se possivel.
A chave de ficar com aproximadamente 8k.

[2] Comentário enviado por diogenes_si em 28/09/2012 - 11:07h

Bom dia,

Estou com duvidas quanto ao banco de dados, preciso criar uma banco de dados? estou executando o hsqldb mais não sei como proceder agora para adicionar a linha que vc citou "NSERT INTO WEBSERVICE VALUES(35,'https://nfe.fazenda.sp.gov.br/nfeweb/services/nfestatusservico2.asmx','/usr/local/nagios/li bexec/nfeStatus/certsPFX/meu.pfx','senha_pfx','/usr/local/nagios/libexec/nfeStatus/cacerts/nfe- cacerts-sp')
"

poderia me ajudar?

[3] Comentário enviado por nobatente em 10/04/2013 - 11:35h

Olá Rogério tudo bom? ótimo post parabéns,

Uma pergunta, sobre o HSQLDB, é necessário estar instalado no seu SO aonde está o Nágios correto?
Qual o comando para executar o Scritp de criação do banco?

Obrigado
Leandro S.

[4] Comentário enviado por junior_duda em 24/08/2015 - 14:31h


Excelente, estou usando com a versão Version 4.1.0rc1 do Nagios, e funcionou perfeito.

Obrigado por compartilhar Rogério.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts