SlideShare uma empresa Scribd logo
Zabbix - Gerenciando
relatórios personalizados
com JasperReports
Através da API do Zabbix
Por Thiago Murilo Diniz (LinkedIn)
fev/2018
1
Índice
● Introdução (slide 3)
● Criando o projeto no Jaspersoft Studio (slide 6)
● Criando o relatório no Jaspersoft Studio (slide 10)
● Scriptlets (slide 27)
● Publicando o relatório no JasperReports Server (slide 44)
● Subreports (slide 63)
● Conclusão (slide 85)
2
Introdução
O presente documento tem como objetivo descrever uma maneira de criar e
gerenciar relatórios personalizados para o Zabbix, acessando as informações
através da API JSON-RPC disponibilizada pelo mesmo.
O Jaspersoft Studio é utilizado para criação dos relatórios. Uma vez prontos, os
relatórios podem ser publicados e gerenciados no JasperReports Server.
3
Versões utilizadas na criação deste documento
Zabbix 3.4
Download: https://www.zabbix.com/download
JasperReports Server 6.4.2
Download: https://community.jaspersoft.com/project/jasperreports-server/releases
Manual de instalação disponível na área de downloads.
Jaspersoft Studio 6.4.3
Download: https://community.jaspersoft.com/project/jaspersoft-studio/releases
4
Importante!
Para que o Jaspersoft Studio e o JasperReports Server possam consumir os
dados do Zabbix através da API JSON-RPC é necessário habilitar o “Web
Service Data Source”:
Download: https://community.jaspersoft.com/project/web-service-data-source/releases
Instalação: https://community.jaspersoft.com/wiki/installing-webservice-datasource
5
Criando o projeto no Jaspersoft Studio
6
7
8
Projeto criado!
9
Criando o relatório no Jaspersoft Studio
10
11
12
Vamos configurar um novo Data Source,
ou seja, a origem dos dados que serão
utilizados no relatório.
13
Web Service Data Source
14
Endereço do Zabbix
15
Requisição JSON que será feita à API
Zabbix.
Uso do método host.get da API Zabbix.
Como solicitar à API Zabbix um token de autenticação via CURL:
curl -i -X POST -H 'Content-type:application/json' -d
'{"jsonrpc":"2.0","method":"user.login","params":{
"user":"Admin","password":"zabbix"},"auth":null,"id":0}'
http://192.168.100.1/api_jsonrpc.php
Uso do método user.login.
16
Clique neste botão para que o
Jaspersoft Studio receba o retorno da
API do Zabbix, permitindo assim o
mapeamento dos campos disponíveis
para uso no relatório.
17
Clique com o botão direito no
nó “result” e o adicione como
root path.
18
Clique com o botão direito nos
nós que deseja utilizar no relatório
e os adicione como campo.
19
Esta tela de mapeamento do
campo aparece quando se clica
em “Add node as field”.
20
21
Arraste para a caixa da direita os
campos que deverão estar
disponíveis para uso no relatório.
22
Relatório criado e com os campos
disponíveis para uso!
23
Adição do título no relatório
24
Arraste um elemento “Static Text”
para a seção “Title” do relatório.
Arraste os campos para a seção “Detail”.
Automaticamente será criado o cabeçalho da
coluna para o respectivo campo.
A seção “Detail” faz o loop nos resultados
retornados pela API do Zabbix, exibindo uma
linha por Host encontrado.
25
Clicando em “Preview” o relatório será
executado e exibido. No caso foram
listados os dois hosts existentes na
minha instalação do Zabbix.
26
Melhorando as coisas...
Durante a configuração do Data Source (slide 16), para fazer a requisição JSON à API do Zabbix, o token
de autenticação foi adquirido utilizando o comando CURL. Mas seria muito chato ter que autenticar
manualmente na API do Zabbix toda vez que for executar o relatório.
Para resolver esta questão e fazer com que o relatório faça automaticamente o login e o logout na API do
Zabbix foi utilizado o recurso “Scriptlets” do Jaspersoft Studio. Os Scriptlets são basicamente uma
interface entre o relatório e um código Java, provendo muita flexibilidade por permitir o uso de funções
criadas pelo usuário.
Sobre Scriptlets:
https://community.jaspersoft.com/blog/all-you-want-know-about-scriptlets
https://community.jaspersoft.com/blog/scriptlet-example-jaspersoft-6x-begineers-hello-world-sample-example
27
Scriptlets
Criei um código Java para ser utilizado como Scriptlet e que permite fazer login e
logout na API do Zabbix. Tanto o arquivo “.jar” quanto o código fonte estão no
GitHub:
https://github.com/thiagomdiniz/zabbix
28
Vamos adicionar o arquivo “.jar” nas
bibliotecas no projeto.
Clique com o botão direito no projeto -> Build
Path -> Configure Build Path...
29
30
Selecione o arquivo “.jar” disponibilizado no
GitHub.
31
Com a biblioteca configurada, clique com o
botão direito em Scriptlets -> Create Scriptlet.
32
Dê um nome ao Scriptlet e clique neste botão
para selecionarmos a classe Java.
33
34
Com o Scriptlet criado vamos criar um parâmetro que usará o
Scriptlet e armazenará o token de autenticação. Clique com o
botão direito em Parameters -> Create Parameter.
35
Dê um nome ao parâmetro e clique neste
botão para definirmos a expressão de valor
padrão do parâmetro.
36
$P{ZabbixAuth_SCRIPTLET}.getAuthToken("http://192.168.
100.1/api_jsonrpc.php","Admin","zabbix")
Este parâmetro com sufixo “_SCRIPTLET” é criado
automaticamente pelo Jaspersoft Studio quando se cria um
Scriptlet e é utilizado para chamar os métodos da classe
Java. No caso chamamos o método “getAuthToken” e
passamos como parâmetros a URL da API Zabbix, o
usuário e a senha de acesso. Com isso o método retornará
o token de autenticação que ficará armazenado no
parâmetro “$P{auth}” e poderá ser utilizado em outros
locais do relatório.
37
Clique neste botão para editar o DataSet do relatório.
38
Agora, no lugar do token que havíamos colocado na
requisição JSON, vamos colocar o parâmetro “$P{auth}”.
No momento em que o relatório for executado este
parâmetro será substituído pelo token de autenticação
pego através da classe Java (Scriptlet).
39
Mas...
Conforme recomendado na documentação da API Zabbix, também é necessário realizar o logout para
prevenir a geração de um grande número de sessões de usuário abertas.
Mediante esta informação vamos configurar também o logout.
40
Clique neste botão para editarmos a expressão que
executará o logout do token de autenticação.
A seção “Summary” é a última a ser executada no
relatório. Por isso colocaremos a ação de logout nela.
Arraste um campo de texto para a seção “Summary”.
41
$P{ZabbixAuth_SCRIPTLET}.tokenLogout("http://192.168.10
0.1/api_jsonrpc.php",$P{auth})
No caso chamamos o método “tokenLogout” e passamos
como parâmetros a URL da API Zabbix e o parâmetro que
contém o token de autenticação. Com isso o token de
autenticação terá o logout efetuado.
42
Seção “Summary” com a ação de logout configurada.
43
Publicando o relatório no JasperReports Server
No Repository Explorer, clique com o botão direito em
“Servers -> Create JasperReports Server Connection”
para criarmos uma conexão com nosso servidor
JasperReports. Isso permitirá publicarmos o relatório
diretamente do Jaspersoft Studio.
44
Credenciais de acesso ao JasperReports Server.
Endereço do JasperReports Server.
45
Clique com o botão direito na
conexão criada, “New -> Folder” e
crie um diretório de nome “Zabbix”.
Enviaremos nossos relatórios para
esse diretório no JasperReports
Server.
46
Antes de prosseguir é necessário
criar o Data Source também no
JasperReports Server.
Acesse o JasperReports Server,
clique com o botão direito no
diretório Zabbix (criado
anteriormente) -> Adicionar recurso
-> Fonte de dados. 47
Preencha com os mesmos
dados utilizados na criação do
Data Source no Jaspersoft
Studio.
48
49
Agora podemos prosseguir com a
publicação do relatório.
Voltando ao Jaspersoft Studio, clique
neste botão para iniciar o processo de
publicação do relatório no JasperReports
Server.
*caso o botão esteja desabilitado, selecione o projeto do relatório no Project Explorer. 50
Selecione o diretório no qual o relatório
será publicado no JasperReports Server.
51
Vamos selecionar o Data Source criado
no JasperReports Server...
52
53
Após selecionar o Data Source, clique
em Finish para concluir a publicação:
54
Para concluir resta apenas enviar o
arquivo “.jar”, utilizado pelo Scriptlet de
login/logout, como recurso para o
relatório publicado.
Para isso clique com o botão direito no
relatório -> New.
55
56
57
Selecione o arquivo “.jar”.
58
Agora no JasperReports Server podemos
abrir/executar o relatório publicado...
59
...e o relatório será executado!
Assim os relatórios criados ficam acessíveis através de uma
interface web com vários recursos de controle/gerenciamento à
disposição! 60
O JasperReports
Server permite
exportar o relatório
para diversos
formatos.
61
Além disso também é possível
agendar a execução do relatório
(clique com botão direito).
O relatório executado poderá ser
salvo em local determinado ou
até enviado por e-mail.
Sobre envio de relatórios por e-mail:
https://community.jaspersoft.com/wiki/configuring-report-scheduler#Setting_Up_the_Connection_to_your_Outbound_Email_Server
https://community.jaspersoft.com/wiki/how-configure-jasperreports-server-send-e-mails-gmail-mail-account 62
Indo mais além - Subreports
Para aumentar as possibilidades e criar relatórios mais complexos podemos
utilizar subreports (sub-relatórios).
Criamos até aqui um relatório que lista os hosts existentes em nosso Zabbix.
Agora demonstrarei como adicionar um subreport que listará os itens monitorados
para cada host listado no relatório principal.
63
64
Aumente o tamanho da seção
“Detail” e arraste um elemento
“Subreport” para dentro da seção.
65
66
67
Subreport criado!
68
No subreport clique neste botão
para configurarmos o DataSet, pois
a requisição do relatório principal
busca por hosts e a requisição do
subreport buscará por itens.
69
Para a configuração e validação
inicial do DataSet fiz igual ao
processo do slide 16, informando
um token de autenticação e desta
vez informando também o ID do
host “Zabbix server” para consulta
dos itens.
Requisição JSON que será feita à API
Zabbix.
Uso do método item.get da API Zabbix.
70
Aqui é feito o mesmo processo
descrito nos slides 17 ao 21, mas
após escolher os nós a serem
utilizados como campos no
subreport é necessário clicar em
“Read Fields” para mapeamento
dos campos. No meu caso deixei
todos os campos como String.
71
No subreport deixei ativas apenas
as seções “Column Header” e
“Detail” e arrastei os campos para a
seção Detail.
72
Ao clicar em “Preview” o subreport é
executado e deverá listar os itens
monitorados do host informado no
DataSet.
Comunicação entre relatório principal e subreport
Como o subreport foi adicionado na seção “Detail” do relatório principal, ele será
executado no loop para cada host listado.
Agora iremos informar ao subreport o token de autenticação gerado pelo Scriptlet,
para que também possa consumir a API do Zabbix, e o ID do host no qual os
itens deverão ser listados.
73
74
No relatório principal, selecione o
subreport e clique em “Edit
Parameters”.
75
Adicione dois parâmetros: um será o
token de autenticação e o outro será
o campo hostid de cada linha do
relatório principal.
76
Os parâmetros repassados pelo
relatório principal ao subreport
devem existir no subreport para que
possamos utilizá-los.
No subreport, clique com o botão
direito em Parameters -> Create
Parameter.
77
Parâmetros criados no subreport.
78
No Jasper Reports o único tipo de
Data Adapter que permite
compartilhar a conexão de um
relatório principal com outros
subreports é o JDBC. Como no
nosso caso o Data Adapter utilizado
é do tipo Web Service, o subreport
fará uma nova requisição à API do
Zabbix e não terá como reutilizar a
requisição feita no relatório principal
(mais detalhes aqui).
Por isso, para não gerar erros no
relatório com subreport,
exportaremos o Data Adapter criado
(ZabbixAPI) para um arquivo...
79
80
Nas propriedades do subreport
defina como “Default Data Adapter” o
arquivo exportado.
81
Edite o DataSet do subreport e
substitua o host ID e o token de
autenticação pelos parâmetros que
serão repassados pelo relatório
principal.
82
Publique novamente o relatório no
JasperReports Server, mas com
outro nome. O processo será
idêntico à publicação anterior,
porém agora deverão ser exibidos
os arquivos adicionados ao projeto.
(não esqueça de enviar também o
arquivo “.jar”)
83
Dica: caso algum comportamento estranho ou
inesperado ocorra com o relatório, tente fazer o build
do projeto para que os fontes sejam compilados.
84
Host...
Itens do host
(subreport).
Executando o relatório
com subreport no
JasperReports
Server...
Conclusão
A maioria dos casos de uso que encontrei para criação de relatórios do Zabbix com Jasper Reports
consultavam os dados do Zabbix diretamente do banco de dados. A vantagem de consumir os dados
através da API do Zabbix é que se abstrai a modelagem do banco de dados, utilizando o recurso ideal
para integração entre aplicações (API).
O Jasper Reports possui muitos recursos não citados neste documento, como gráficos e autenticação de
usuários em base externa (LDAP)
Espero que o exemplo demonstrado tenha agregado algum conhecimento ao leitor e que possa ser
adaptado para atender possíveis necessidades.
85

Mais conteúdo relacionado

PPTX
10 Project Proposal Writing
DOC
Plano de aula informática avançada marta magda
PDF
대용량 데이터레이크 마이그레이션 사례 공유 [카카오게임즈 - 레벨 200] - 조은희, 팀장, 카카오게임즈 ::: Games on AWS ...
PDF
Introducao a informatica
PDF
IDC 서버 몽땅 AWS로 이전하기 위한 5가지 방법 - 윤석찬 (AWS 테크에반젤리스트)
PDF
Zabbix para iniciantes
PPT
Writing Successful Project Proposal
PPTX
VMware Vsphere Graduation Project Presentation
10 Project Proposal Writing
Plano de aula informática avançada marta magda
대용량 데이터레이크 마이그레이션 사례 공유 [카카오게임즈 - 레벨 200] - 조은희, 팀장, 카카오게임즈 ::: Games on AWS ...
Introducao a informatica
IDC 서버 몽땅 AWS로 이전하기 위한 5가지 방법 - 윤석찬 (AWS 테크에반젤리스트)
Zabbix para iniciantes
Writing Successful Project Proposal
VMware Vsphere Graduation Project Presentation

Mais procurados (20)

PDF
Reporting Large Environment Zabbix Database
PDF
Spring Security
PDF
The never-ending REST API design debate
PDF
Spring Framework - Spring Security
PPTX
Java Spring framework, Dependency Injection, DI, IoC, Inversion of Control
PDF
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
PDF
REST APIs with Spring
PPTX
Introduction to spring boot
PPTX
Monitoramento de Aplicações Web Modernas com Zabbix
PDF
Spring Framework - MVC
PPTX
Spring Framework
PPTX
Spring boot
PPTX
Infrastructure as Code on Azure: Show your Bicep!
PDF
Developing RESTful Web APIs with Python, Flask and MongoDB
PPTX
Springboot Microservices
PPTX
Spring Security 5
PDF
PUC SE Day 2019 - SpringBoot
PDF
Deep Dive Java 17 Devoxx UK
PDF
Getting started with Spring Security
PPTX
Microservices Platform with Spring Boot, Spring Cloud Config, Spring Cloud Ne...
Reporting Large Environment Zabbix Database
Spring Security
The never-ending REST API design debate
Spring Framework - Spring Security
Java Spring framework, Dependency Injection, DI, IoC, Inversion of Control
Amazon Cognito使って認証したい?それならSpring Security使いましょう!
REST APIs with Spring
Introduction to spring boot
Monitoramento de Aplicações Web Modernas com Zabbix
Spring Framework - MVC
Spring Framework
Spring boot
Infrastructure as Code on Azure: Show your Bicep!
Developing RESTful Web APIs with Python, Flask and MongoDB
Springboot Microservices
Spring Security 5
PUC SE Day 2019 - SpringBoot
Deep Dive Java 17 Devoxx UK
Getting started with Spring Security
Microservices Platform with Spring Boot, Spring Cloud Config, Spring Cloud Ne...
Anúncio

Semelhante a Zabbix - Gerenciando relatórios personalizados com Jasper Reports (20)

PDF
JasperReports Tecnicas de geracao_de_relatorios1
PDF
Manual dsg tools_3.2
PDF
Gerência de redes utilizando o cacti
PPTX
Treze ferramentas/frameworks para desenvolvimento Android
PPTX
Treze ferramentas/frameworks para desenvolvimento android
DOCX
Tcc anexo i
PDF
Instalando o Apache no Windows
PDF
Proposta de solução ferramentas-processos
PPTX
Grails
PPTX
Desenvolvimento Ágil com Grails.
PPTX
2016/08/19 - Uma visão geral da AWS para desenvolvedores
PDF
Relatório analytics de mula tempo de execução usando splunk
PDF
Relatório
PDF
Documentação CakePHP - Português Br
PDF
Jira Software - Guia Rápido para ferramenta de gestão de projetos.
PDF
Ruby On Rails Regis
PDF
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
PDF
IReport.pdf
JasperReports Tecnicas de geracao_de_relatorios1
Manual dsg tools_3.2
Gerência de redes utilizando o cacti
Treze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento android
Tcc anexo i
Instalando o Apache no Windows
Proposta de solução ferramentas-processos
Grails
Desenvolvimento Ágil com Grails.
2016/08/19 - Uma visão geral da AWS para desenvolvedores
Relatório analytics de mula tempo de execução usando splunk
Relatório
Documentação CakePHP - Português Br
Jira Software - Guia Rápido para ferramenta de gestão de projetos.
Ruby On Rails Regis
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
IReport.pdf
Anúncio

Mais de Zabbix BR (20)

PPTX
Mapas e triggers na identificação de problemas - Felipe Belo (Assembleia Legi...
PPTX
Zabbix - Sou Dev, o que eu tenho a ver com isso? - André Déo (Comunidade Zabb...
PPTX
Zabbix para IoT - André Déo (Comunidade Zabbix Brasil)
PPTX
Zabbix - Onde buscar conhecimento - André Déo (Comunidade Zabbix Brasil)
PPTX
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
PPTX
1º Meetup Zabbix Meetup do Recife: Djarde Gonçalves - Integrando o Zabbix com...
PPTX
1º Meetup Zabbix Meetup do Recife: Matheus Cabral - Monitoramento de Data Cen...
PDF
1º Meetup Zabbix Meetup do Recife: Aécio Pires - Gerenciando Zabbix com o Sal...
PPTX
1º Meetup Zabbix Meetup do Recife: André Marques - Utilizando Telegram para f...
PPTX
1º Meetup Zabbix Meetup do Recife: Danilo Barros - Zabbix dicas e truques par...
PDF
1º Meetup Zabbix Meetup do Recife: Hernandes Martins - Gerando relatórios via...
PPTX
1º Meetup Zabbix Meetup do Recife: Edilmar Junior - Para cima e avante do bás...
PDF
1º Meetup Zabbix Meetup do Recife: Werneck Costa - UserParameters
PPTX
1º Meetup Zabbix Meetup do Recife - André Déo: Zabbix - Onde buscar conhecimento
PPTX
Abertura 1º Meetup Zabbix Meetup do Recife
PDF
Zabbix Proxy com Raspberry Pi - 3º Zabbix Meetup do Interior
PPTX
Os Desafios do Zabbix com Alta Disponibilidade - 3º Zabbix Meetup do Interior
PPTX
Geração de Relatório Sobre Utilização de Internet com Zabbix - 3º Zabbix Meet...
PPSX
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
PPSX
Primeiros passos com a API do Zabbix - 3º Zabbix Meetup do Interior
Mapas e triggers na identificação de problemas - Felipe Belo (Assembleia Legi...
Zabbix - Sou Dev, o que eu tenho a ver com isso? - André Déo (Comunidade Zabb...
Zabbix para IoT - André Déo (Comunidade Zabbix Brasil)
Zabbix - Onde buscar conhecimento - André Déo (Comunidade Zabbix Brasil)
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
1º Meetup Zabbix Meetup do Recife: Djarde Gonçalves - Integrando o Zabbix com...
1º Meetup Zabbix Meetup do Recife: Matheus Cabral - Monitoramento de Data Cen...
1º Meetup Zabbix Meetup do Recife: Aécio Pires - Gerenciando Zabbix com o Sal...
1º Meetup Zabbix Meetup do Recife: André Marques - Utilizando Telegram para f...
1º Meetup Zabbix Meetup do Recife: Danilo Barros - Zabbix dicas e truques par...
1º Meetup Zabbix Meetup do Recife: Hernandes Martins - Gerando relatórios via...
1º Meetup Zabbix Meetup do Recife: Edilmar Junior - Para cima e avante do bás...
1º Meetup Zabbix Meetup do Recife: Werneck Costa - UserParameters
1º Meetup Zabbix Meetup do Recife - André Déo: Zabbix - Onde buscar conhecimento
Abertura 1º Meetup Zabbix Meetup do Recife
Zabbix Proxy com Raspberry Pi - 3º Zabbix Meetup do Interior
Os Desafios do Zabbix com Alta Disponibilidade - 3º Zabbix Meetup do Interior
Geração de Relatório Sobre Utilização de Internet com Zabbix - 3º Zabbix Meet...
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
Primeiros passos com a API do Zabbix - 3º Zabbix Meetup do Interior

Último (19)

PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
Apple Pippin Uma breve introdução. - David Glotz
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
Processos na gestão de transportes, TM100 Col18
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
Aula 18 - Manipulacao De Arquivos python
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Custos e liquidação no SAP Transportation Management, TM130 Col18
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Apple Pippin Uma breve introdução. - David Glotz
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Processos na gestão de transportes, TM100 Col18
COBITxITIL-Entenda as diferença em uso governança TI
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Aula 18 - Manipulacao De Arquivos python
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Aula04-Academia Heri- Tecnologia Geral 2025
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx

Zabbix - Gerenciando relatórios personalizados com Jasper Reports

  • 1. Zabbix - Gerenciando relatórios personalizados com JasperReports Através da API do Zabbix Por Thiago Murilo Diniz (LinkedIn) fev/2018 1
  • 2. Índice ● Introdução (slide 3) ● Criando o projeto no Jaspersoft Studio (slide 6) ● Criando o relatório no Jaspersoft Studio (slide 10) ● Scriptlets (slide 27) ● Publicando o relatório no JasperReports Server (slide 44) ● Subreports (slide 63) ● Conclusão (slide 85) 2
  • 3. Introdução O presente documento tem como objetivo descrever uma maneira de criar e gerenciar relatórios personalizados para o Zabbix, acessando as informações através da API JSON-RPC disponibilizada pelo mesmo. O Jaspersoft Studio é utilizado para criação dos relatórios. Uma vez prontos, os relatórios podem ser publicados e gerenciados no JasperReports Server. 3
  • 4. Versões utilizadas na criação deste documento Zabbix 3.4 Download: https://www.zabbix.com/download JasperReports Server 6.4.2 Download: https://community.jaspersoft.com/project/jasperreports-server/releases Manual de instalação disponível na área de downloads. Jaspersoft Studio 6.4.3 Download: https://community.jaspersoft.com/project/jaspersoft-studio/releases 4
  • 5. Importante! Para que o Jaspersoft Studio e o JasperReports Server possam consumir os dados do Zabbix através da API JSON-RPC é necessário habilitar o “Web Service Data Source”: Download: https://community.jaspersoft.com/project/web-service-data-source/releases Instalação: https://community.jaspersoft.com/wiki/installing-webservice-datasource 5
  • 6. Criando o projeto no Jaspersoft Studio 6
  • 7. 7
  • 8. 8
  • 10. Criando o relatório no Jaspersoft Studio 10
  • 11. 11
  • 12. 12
  • 13. Vamos configurar um novo Data Source, ou seja, a origem dos dados que serão utilizados no relatório. 13
  • 14. Web Service Data Source 14
  • 16. Requisição JSON que será feita à API Zabbix. Uso do método host.get da API Zabbix. Como solicitar à API Zabbix um token de autenticação via CURL: curl -i -X POST -H 'Content-type:application/json' -d '{"jsonrpc":"2.0","method":"user.login","params":{ "user":"Admin","password":"zabbix"},"auth":null,"id":0}' http://192.168.100.1/api_jsonrpc.php Uso do método user.login. 16
  • 17. Clique neste botão para que o Jaspersoft Studio receba o retorno da API do Zabbix, permitindo assim o mapeamento dos campos disponíveis para uso no relatório. 17
  • 18. Clique com o botão direito no nó “result” e o adicione como root path. 18
  • 19. Clique com o botão direito nos nós que deseja utilizar no relatório e os adicione como campo. 19
  • 20. Esta tela de mapeamento do campo aparece quando se clica em “Add node as field”. 20
  • 21. 21
  • 22. Arraste para a caixa da direita os campos que deverão estar disponíveis para uso no relatório. 22
  • 23. Relatório criado e com os campos disponíveis para uso! 23
  • 24. Adição do título no relatório 24 Arraste um elemento “Static Text” para a seção “Title” do relatório.
  • 25. Arraste os campos para a seção “Detail”. Automaticamente será criado o cabeçalho da coluna para o respectivo campo. A seção “Detail” faz o loop nos resultados retornados pela API do Zabbix, exibindo uma linha por Host encontrado. 25
  • 26. Clicando em “Preview” o relatório será executado e exibido. No caso foram listados os dois hosts existentes na minha instalação do Zabbix. 26
  • 27. Melhorando as coisas... Durante a configuração do Data Source (slide 16), para fazer a requisição JSON à API do Zabbix, o token de autenticação foi adquirido utilizando o comando CURL. Mas seria muito chato ter que autenticar manualmente na API do Zabbix toda vez que for executar o relatório. Para resolver esta questão e fazer com que o relatório faça automaticamente o login e o logout na API do Zabbix foi utilizado o recurso “Scriptlets” do Jaspersoft Studio. Os Scriptlets são basicamente uma interface entre o relatório e um código Java, provendo muita flexibilidade por permitir o uso de funções criadas pelo usuário. Sobre Scriptlets: https://community.jaspersoft.com/blog/all-you-want-know-about-scriptlets https://community.jaspersoft.com/blog/scriptlet-example-jaspersoft-6x-begineers-hello-world-sample-example 27
  • 28. Scriptlets Criei um código Java para ser utilizado como Scriptlet e que permite fazer login e logout na API do Zabbix. Tanto o arquivo “.jar” quanto o código fonte estão no GitHub: https://github.com/thiagomdiniz/zabbix 28
  • 29. Vamos adicionar o arquivo “.jar” nas bibliotecas no projeto. Clique com o botão direito no projeto -> Build Path -> Configure Build Path... 29
  • 30. 30
  • 31. Selecione o arquivo “.jar” disponibilizado no GitHub. 31
  • 32. Com a biblioteca configurada, clique com o botão direito em Scriptlets -> Create Scriptlet. 32
  • 33. Dê um nome ao Scriptlet e clique neste botão para selecionarmos a classe Java. 33
  • 34. 34
  • 35. Com o Scriptlet criado vamos criar um parâmetro que usará o Scriptlet e armazenará o token de autenticação. Clique com o botão direito em Parameters -> Create Parameter. 35
  • 36. Dê um nome ao parâmetro e clique neste botão para definirmos a expressão de valor padrão do parâmetro. 36
  • 37. $P{ZabbixAuth_SCRIPTLET}.getAuthToken("http://192.168. 100.1/api_jsonrpc.php","Admin","zabbix") Este parâmetro com sufixo “_SCRIPTLET” é criado automaticamente pelo Jaspersoft Studio quando se cria um Scriptlet e é utilizado para chamar os métodos da classe Java. No caso chamamos o método “getAuthToken” e passamos como parâmetros a URL da API Zabbix, o usuário e a senha de acesso. Com isso o método retornará o token de autenticação que ficará armazenado no parâmetro “$P{auth}” e poderá ser utilizado em outros locais do relatório. 37
  • 38. Clique neste botão para editar o DataSet do relatório. 38
  • 39. Agora, no lugar do token que havíamos colocado na requisição JSON, vamos colocar o parâmetro “$P{auth}”. No momento em que o relatório for executado este parâmetro será substituído pelo token de autenticação pego através da classe Java (Scriptlet). 39
  • 40. Mas... Conforme recomendado na documentação da API Zabbix, também é necessário realizar o logout para prevenir a geração de um grande número de sessões de usuário abertas. Mediante esta informação vamos configurar também o logout. 40
  • 41. Clique neste botão para editarmos a expressão que executará o logout do token de autenticação. A seção “Summary” é a última a ser executada no relatório. Por isso colocaremos a ação de logout nela. Arraste um campo de texto para a seção “Summary”. 41
  • 42. $P{ZabbixAuth_SCRIPTLET}.tokenLogout("http://192.168.10 0.1/api_jsonrpc.php",$P{auth}) No caso chamamos o método “tokenLogout” e passamos como parâmetros a URL da API Zabbix e o parâmetro que contém o token de autenticação. Com isso o token de autenticação terá o logout efetuado. 42
  • 43. Seção “Summary” com a ação de logout configurada. 43
  • 44. Publicando o relatório no JasperReports Server No Repository Explorer, clique com o botão direito em “Servers -> Create JasperReports Server Connection” para criarmos uma conexão com nosso servidor JasperReports. Isso permitirá publicarmos o relatório diretamente do Jaspersoft Studio. 44
  • 45. Credenciais de acesso ao JasperReports Server. Endereço do JasperReports Server. 45
  • 46. Clique com o botão direito na conexão criada, “New -> Folder” e crie um diretório de nome “Zabbix”. Enviaremos nossos relatórios para esse diretório no JasperReports Server. 46
  • 47. Antes de prosseguir é necessário criar o Data Source também no JasperReports Server. Acesse o JasperReports Server, clique com o botão direito no diretório Zabbix (criado anteriormente) -> Adicionar recurso -> Fonte de dados. 47
  • 48. Preencha com os mesmos dados utilizados na criação do Data Source no Jaspersoft Studio. 48
  • 49. 49
  • 50. Agora podemos prosseguir com a publicação do relatório. Voltando ao Jaspersoft Studio, clique neste botão para iniciar o processo de publicação do relatório no JasperReports Server. *caso o botão esteja desabilitado, selecione o projeto do relatório no Project Explorer. 50
  • 51. Selecione o diretório no qual o relatório será publicado no JasperReports Server. 51
  • 52. Vamos selecionar o Data Source criado no JasperReports Server... 52
  • 53. 53
  • 54. Após selecionar o Data Source, clique em Finish para concluir a publicação: 54
  • 55. Para concluir resta apenas enviar o arquivo “.jar”, utilizado pelo Scriptlet de login/logout, como recurso para o relatório publicado. Para isso clique com o botão direito no relatório -> New. 55
  • 56. 56
  • 57. 57
  • 58. Selecione o arquivo “.jar”. 58
  • 59. Agora no JasperReports Server podemos abrir/executar o relatório publicado... 59
  • 60. ...e o relatório será executado! Assim os relatórios criados ficam acessíveis através de uma interface web com vários recursos de controle/gerenciamento à disposição! 60
  • 61. O JasperReports Server permite exportar o relatório para diversos formatos. 61
  • 62. Além disso também é possível agendar a execução do relatório (clique com botão direito). O relatório executado poderá ser salvo em local determinado ou até enviado por e-mail. Sobre envio de relatórios por e-mail: https://community.jaspersoft.com/wiki/configuring-report-scheduler#Setting_Up_the_Connection_to_your_Outbound_Email_Server https://community.jaspersoft.com/wiki/how-configure-jasperreports-server-send-e-mails-gmail-mail-account 62
  • 63. Indo mais além - Subreports Para aumentar as possibilidades e criar relatórios mais complexos podemos utilizar subreports (sub-relatórios). Criamos até aqui um relatório que lista os hosts existentes em nosso Zabbix. Agora demonstrarei como adicionar um subreport que listará os itens monitorados para cada host listado no relatório principal. 63
  • 64. 64 Aumente o tamanho da seção “Detail” e arraste um elemento “Subreport” para dentro da seção.
  • 65. 65
  • 66. 66
  • 68. 68 No subreport clique neste botão para configurarmos o DataSet, pois a requisição do relatório principal busca por hosts e a requisição do subreport buscará por itens.
  • 69. 69 Para a configuração e validação inicial do DataSet fiz igual ao processo do slide 16, informando um token de autenticação e desta vez informando também o ID do host “Zabbix server” para consulta dos itens. Requisição JSON que será feita à API Zabbix. Uso do método item.get da API Zabbix.
  • 70. 70 Aqui é feito o mesmo processo descrito nos slides 17 ao 21, mas após escolher os nós a serem utilizados como campos no subreport é necessário clicar em “Read Fields” para mapeamento dos campos. No meu caso deixei todos os campos como String.
  • 71. 71 No subreport deixei ativas apenas as seções “Column Header” e “Detail” e arrastei os campos para a seção Detail.
  • 72. 72 Ao clicar em “Preview” o subreport é executado e deverá listar os itens monitorados do host informado no DataSet.
  • 73. Comunicação entre relatório principal e subreport Como o subreport foi adicionado na seção “Detail” do relatório principal, ele será executado no loop para cada host listado. Agora iremos informar ao subreport o token de autenticação gerado pelo Scriptlet, para que também possa consumir a API do Zabbix, e o ID do host no qual os itens deverão ser listados. 73
  • 74. 74 No relatório principal, selecione o subreport e clique em “Edit Parameters”.
  • 75. 75 Adicione dois parâmetros: um será o token de autenticação e o outro será o campo hostid de cada linha do relatório principal.
  • 76. 76 Os parâmetros repassados pelo relatório principal ao subreport devem existir no subreport para que possamos utilizá-los. No subreport, clique com o botão direito em Parameters -> Create Parameter.
  • 78. 78 No Jasper Reports o único tipo de Data Adapter que permite compartilhar a conexão de um relatório principal com outros subreports é o JDBC. Como no nosso caso o Data Adapter utilizado é do tipo Web Service, o subreport fará uma nova requisição à API do Zabbix e não terá como reutilizar a requisição feita no relatório principal (mais detalhes aqui). Por isso, para não gerar erros no relatório com subreport, exportaremos o Data Adapter criado (ZabbixAPI) para um arquivo...
  • 79. 79
  • 80. 80 Nas propriedades do subreport defina como “Default Data Adapter” o arquivo exportado.
  • 81. 81 Edite o DataSet do subreport e substitua o host ID e o token de autenticação pelos parâmetros que serão repassados pelo relatório principal.
  • 82. 82 Publique novamente o relatório no JasperReports Server, mas com outro nome. O processo será idêntico à publicação anterior, porém agora deverão ser exibidos os arquivos adicionados ao projeto. (não esqueça de enviar também o arquivo “.jar”)
  • 83. 83 Dica: caso algum comportamento estranho ou inesperado ocorra com o relatório, tente fazer o build do projeto para que os fontes sejam compilados.
  • 84. 84 Host... Itens do host (subreport). Executando o relatório com subreport no JasperReports Server...
  • 85. Conclusão A maioria dos casos de uso que encontrei para criação de relatórios do Zabbix com Jasper Reports consultavam os dados do Zabbix diretamente do banco de dados. A vantagem de consumir os dados através da API do Zabbix é que se abstrai a modelagem do banco de dados, utilizando o recurso ideal para integração entre aplicações (API). O Jasper Reports possui muitos recursos não citados neste documento, como gráficos e autenticação de usuários em base externa (LDAP) Espero que o exemplo demonstrado tenha agregado algum conhecimento ao leitor e que possa ser adaptado para atender possíveis necessidades. 85