SlideShare uma empresa Scribd logo
Primeiros passos com a API do Zabbix
Compreendendo o próximo nível
conectsys.com.br
Quem sou eu?
Janssen dos Reis Lima
• Bacharel em Sistemas de Informação pela FeMASS/UFF
• Especialista em Administração em Redes Linux pela
UFLA
• Engenheiro de Sistemas (SRE/DevOps) na Conectsys
• 20 anos de experiência na área de TI
• Autor dos livros “Monitoramento de Redes com
Zabbix” e “Consumindo a API do Zabbix com Python”
• Membro ativo da comunidade
• Áreas de interesse: Automação, monitoramento, HPC,
API’s, Python
Agenda
• Apresentação da API do Zabbix
• Estrutura da API do Zabbix
• Classes e métodos da API do Zabbix
• O que é possível fazer?
• Integração entre sistemas
• Alguns projetos que utilizam a API do Zabbix
Visão geral da API
A API do Zabbix permite recuperar e modificar
configurações via programação, além de
fornecer acesso a dados históricos.
Visão geral da API
É amplamente utilizada para:
• Criar novas aplicações para trabalhar com
Zabbix;
• Fazer integração com software de terceiros;
• Automatizar tarefas rotineiras.
Visão geral da API
Consigo fazer isso com API?
Você sabe a diferença entre
back-end e front-end?
Você sabe a diferença entre
back-end e front-end?
server-side | client-side
Agora você já tem embasamento
para responder a essa pergunta:
A API do Zabbix faz dashboards?
Agora você já tem embasamento
para responder a essa pergunta:
A API do Zabbix faz dashboards?
NÃO
Utilizar a API do Zabbix não faz de você um
desenvolvedor web apto a desenvolver dashboards.
Mas sim, entregar os dados coletados via API para um
dashboard.
ZabiRepo
Octo-Zab
Zabbix-Dashboard
Grafana com plugin Zabbix
A API do Zabbix é uma API baseada na web e é
fornecida como parte da própria interface web
do Zabbix. Ela utiliza o protocolo JSON-RPC 2.0:
– Consiste de um conjunto de métodos;
– Requisições e respostas entre os clientes e a API
são codificados usando o formato JSON.
Requisição JSON
{
"jsonrpc": "2.0",
"method": "user.login",
"params": { "user": "Admin",
"password": "zabbix“
},
"id": 1,
"auth": null
}
Resposta JSON
{
"jsonrpc": "2.0",
"result": "0424bd59b807674191e7d77572075f33",
"id": 1
}
Antes da API
Antes da implementação da API do Zabbix, não
existia nenhuma ferramenta para controlar o
Zabbix fora da interface Web, exceto executar
consultas diretamente na base de dados, o que
não é muito seguro.
Onde encontrar documentação?
• https://www.zabbix.com/documentation/3.4/
manual/api
Requisições
• Enviar requisição HTTP POST para o arquivo
api_jsonrpc.php
Exemplo para chamar o método apiinfo.version:
POST http://localhost/zabbix/api_jsonrpc.php HTTP/1.1
Content-Type: application/json-rpc
{"jsonrpc":"2.0","method":"apiinfo.version","id":1,"auth"
:null,"params":{}}
Como fazer uma requisição?
• Interface web deve estar disponível
• Ter um cliente HTTP ou uma ferramenta JSON-
RPC
• Ter uma biblioteca com a API implementada
Usando o comando curl
# curl -s -X POST -H 'Content-Type: application/json' -d
'{"params": {"password": "zabbix", "user": "Admin"},
"jsonrpc": "2.0", "method": "user.login", "auth": null, "id": 1}'
http://localhost/zabbix/api_jsonrpc.php
Explicando:
• params: parâmetros que serão passados para o método da
API
• jsonrpc: versão do protocolo utilizado pela API
• mehtod: o método da API que será chamado
• id: identificador arbitrário do pedido
• auth: um token de autenticação para o usuário
Resposta da requisição
{"jsonrpc":"2.0","result":"1d8fa00b50f7c0be93938c
98a9d4d713 ","id":1}
• O resultado é o token para autenticação
• Apto para fazer as demais requisições
Obs.: para formatar a saída no formato JSON, insira
no final do comando: | python -mjson.tool
Continuando com as requisições
• Consulta
curl –s -X POST -H 'Content-Type: application/json' -d
'{"params": {"output": "shorten"}, "jsonrpc": "2.0",
"method": "host.get", "auth":
"1d8fa00b50f7c0be93938c98a9d4d713", "id": 1}'
http://localhost/zabbix/api_jsonrpc.php
• Resposta
{"jsonrpc":"2.0","result":[{"hostid":"10084"},{"hostid":"1
0107"},{"hostid":"10106"},{"hostid":"10109"},{"hostid":"1
0142"},{"hostid":"10159"},{"hostid":"10160"}],"id":1}
Ferramenta pra testar requisições
• Zapix - https://bitbucket.org/Vedmak/zapix
• Simples de usar
• Ideal para praticar o
formato de requisições
JSON com os métodos
da API do Zabbix
Por que eu preciso de uma biblioteca?
• As bibliotecas já implementam os métodos da API do
Zabbix e facilita o seu uso
• Qual a melhor biblioteca?
– Depende do seu conhecimento em programação
– Eu recomento a zabbix-api e pyzabbix (ambas escritas em
Python)
– https://github.com/gescheit/scripts/tree/master/zabbix
– https://github.com/lukecyca/pyzabbix
– https://www.zabbix.org/wiki/Docs/api/libraries (listagem
de todas as bibliotecas disponíveis)
Formatar a saída das requisições
• Ao invés de você consumir isso
[{u'host': u'Cable Modem', u'hostid': u'10106'}, {u'host':
u'TesteJanssen', u'hostid': u'10109'}, {u'host': u'Zabbix server',
u'hostid': u'10084'}, {u'host': u'Cliente', u'hostid': u'10107'},
{u'host': u'Nmap', u'hostid': u'10110'}]
• Você consumirá isto
10106 - Cable Modem
10109 – TesteJanssen
10084 – Zabbix server
10107 – Cliente
10110 - Nmap
Primeiros passos com Python
• Definir o cabeçalho do arquivo .py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from zabbix_api import ZabbixAPI
zapi = ZabbixAPI(server="http://<ip-ou-hostname>/zabbix")
zapi.login("<user>", "<password>")
Exemplo
• Consultar a versão da API do Zabbix instalada
print "Versão da API do Zabbix: ", zapi.api_version()
Exemplo com estrutura de controle
• Imprimir apenas o ID e nome do host
hosts = zapi.host.get({"output":["hostid","host"]})
for x in hosts:
print x["hostid"], "- ", x["host"]
Listar todos os hosts de acordo com o grupo de
host de acordo com o nome do grupo
id_grupo = zapi.hostgroup.get({"search":{"name":"Linux servers"},
"output":["groupid","name"]
})
nomes_grupo = zapi.host.get({"groupids":id_grupo[0]['groupid'],
"output":["host"]
})
print "Relação dos hosts associados ao grupo: ", id_grupo[0]['name']
print
"====================================================="
for x in nomes_grupo:
print x['hostid'], "-", x['host']
Listar a versão do agente dos hosts por grupo
grupo_hosts = zapi.item.get({"groupids":"17",
"filter":{"key_":"agent.version"},
"output":["lastvalue","hostid"]
})
print "Relação dos hosts com Zabbix Agent desatualizado."
print "-------------------------------------------------"
for x in grupo_hosts:
if x['lastvalue'] != "3.4":
host = zapi.host.get({"hostids":x['hostid'],
"output":["name"]})
print x['hostid'], "-", host[0]['name'], "-", x['lastvalue']
Relatórios
• Listagem básica de hosts e id’s.
Relatórios
• Número de vezes em que as triggers
foram acionadas em um determinado
período separado por host e
classificação de severidade.
Integração com outros sistemas
- Sistemas de pagamento
- Redes sociais
Zabbix + Google Analytics
ZABBIX + GLPI
• https://github.com/janssenlima/zabbix-glpi
Trigger PROBLEM
Executa uma ação
Reconhece evento
informando número do ticket
Trigger OK
Abre ticket informando número do evento
Fecha ticket informando número do evento
ZABBIX + GLPI + Telegram
• http://verdanatech.com/integrando-zabbix-
glpi-e-telegram/
Projetos que usam a API do Zabbix
Back-end
• Serviços de TI - https://github.com/janssenlima/api-zabbix
• Scripts diversos - https://github.com/janssenlima/api-zabbix
• Zabbix CLI Tools - https://www.zabbix.org/wiki/Zabbix_CLI_Tools
• ZabbixTuner - https://github.com/janssenlima/ZabbixTuner
Dashboards
• Grafana - https://github.com/alexanderzobnin/grafana-zabbix/
• ZabiRepo - https://github.com/usiusi360/zabirepo
• OctoZab - https://github.com/Quadrata-it/octo-zab
• Zabbix-Dashboard - https://github.com/incama/Zabbix-Dashboard
ZabbixTuner
Automação com Ansible
Módulos de monitoramento (Zabbix)
disponíveis no Ansible
• http://docs.ansible.com/ansible/latest/zabbix_host_module.html
• http://docs.ansible.com/ansible/latest/zabbix_group_module.html
• http://docs.ansible.com/ansible/latest/zabbix_hostmacro_module.html
• http://docs.ansible.com/ansible/latest/zabbix_maintenance_module.html
• http://docs.ansible.com/ansible/latest/zabbix_screen_module.html
Fácil utilização, não precisa programar nem saber
como fazer as requisições a API do Zabbix.
DÚVIDAS ?
www.conectsys.com.br
janssen@conectsys.com.br
Telegram: @JanssenLima, @ZabbixBrasil
Fórum Zabbix : https://forum.zabbixoverflow.com
Onde me encontrar?

Mais conteúdo relacionado

Mais procurados

Monitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com ZabbixMonitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com Zabbix
André Déo
 
Apresentacao zabbix
Apresentacao zabbixApresentacao zabbix
Apresentacao zabbix
Daniel Peres
 
Reporting Large Environment Zabbix Database
Reporting Large Environment Zabbix DatabaseReporting Large Environment Zabbix Database
Reporting Large Environment Zabbix Database
Alain Ganuchaud
 
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do InteriorDeploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
Zabbix BR
 
UserParameter vs Zabbix Sender - 2º ZABBIX MEETUP DO INTERIOR-SP
UserParameter vs Zabbix Sender - 2º ZABBIX MEETUP DO INTERIOR-SPUserParameter vs Zabbix Sender - 2º ZABBIX MEETUP DO INTERIOR-SP
UserParameter vs Zabbix Sender - 2º ZABBIX MEETUP DO INTERIOR-SP
Zabbix BR
 
Google Cloud Platform monitoring with Zabbix
Google Cloud Platform monitoring with ZabbixGoogle Cloud Platform monitoring with Zabbix
Google Cloud Platform monitoring with Zabbix
Max Kuzkin
 
Fluentd with MySQL
Fluentd with MySQLFluentd with MySQL
Fluentd with MySQL
I Goo Lee
 
MongoDB .local Toronto 2019: Tips and Tricks for Effective Indexing
MongoDB .local Toronto 2019: Tips and Tricks for Effective IndexingMongoDB .local Toronto 2019: Tips and Tricks for Effective Indexing
MongoDB .local Toronto 2019: Tips and Tricks for Effective Indexing
MongoDB
 
WebAssembly Overview
WebAssembly OverviewWebAssembly Overview
WebAssembly Overview
Alexandr Skachkov
 
Monitoring Oracle Database Instances with Zabbix
Monitoring Oracle Database Instances with ZabbixMonitoring Oracle Database Instances with Zabbix
Monitoring Oracle Database Instances with Zabbix
Gerger
 
Os Desafios do Zabbix com Alta Disponibilidade - 3º Zabbix Meetup do Interior
Os Desafios do Zabbix com Alta Disponibilidade - 3º Zabbix Meetup do InteriorOs Desafios do Zabbix com Alta Disponibilidade - 3º Zabbix Meetup do Interior
Os Desafios do Zabbix com Alta Disponibilidade - 3º Zabbix Meetup do Interior
Zabbix BR
 
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
Brian Hong
 
MongoDB Performance Tuning
MongoDB Performance TuningMongoDB Performance Tuning
MongoDB Performance Tuning
MongoDB
 
Monitoramento de Vulnerabilidades com Zabbix, RHEL e Yum Security Plugin
Monitoramento de Vulnerabilidades com Zabbix, RHEL e Yum Security PluginMonitoramento de Vulnerabilidades com Zabbix, RHEL e Yum Security Plugin
Monitoramento de Vulnerabilidades com Zabbix, RHEL e Yum Security Plugin
Alessandro Silva
 
Oracle epm 11_1_2_1_tuning_guide_v4
Oracle epm 11_1_2_1_tuning_guide_v4Oracle epm 11_1_2_1_tuning_guide_v4
Oracle epm 11_1_2_1_tuning_guide_v4
asifanw911
 
Primeiros Passos na API do Zabbix com Python - 2º ZABBIX MEETUP DO INTERIOR-SP
Primeiros Passos na API do Zabbix com Python - 2º ZABBIX MEETUP DO INTERIOR-SPPrimeiros Passos na API do Zabbix com Python - 2º ZABBIX MEETUP DO INTERIOR-SP
Primeiros Passos na API do Zabbix com Python - 2º ZABBIX MEETUP DO INTERIOR-SP
Zabbix BR
 
NGINX Back to Basic 2 Part 2 (Japanese Webinar)
NGINX Back to Basic 2 Part 2 (Japanese Webinar)NGINX Back to Basic 2 Part 2 (Japanese Webinar)
NGINX Back to Basic 2 Part 2 (Japanese Webinar)
NGINX, Inc.
 
ProxySQL High Availability (Clustering)
ProxySQL High Availability (Clustering)ProxySQL High Availability (Clustering)
ProxySQL High Availability (Clustering)
Mydbops
 
MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용
I Goo Lee
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기
우영 주
 

Mais procurados (20)

Monitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com ZabbixMonitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com Zabbix
 
Apresentacao zabbix
Apresentacao zabbixApresentacao zabbix
Apresentacao zabbix
 
Reporting Large Environment Zabbix Database
Reporting Large Environment Zabbix DatabaseReporting Large Environment Zabbix Database
Reporting Large Environment Zabbix Database
 
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do InteriorDeploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
Deploy MySQL e Performance Tuning - 3º Zabbix Meetup do Interior
 
UserParameter vs Zabbix Sender - 2º ZABBIX MEETUP DO INTERIOR-SP
UserParameter vs Zabbix Sender - 2º ZABBIX MEETUP DO INTERIOR-SPUserParameter vs Zabbix Sender - 2º ZABBIX MEETUP DO INTERIOR-SP
UserParameter vs Zabbix Sender - 2º ZABBIX MEETUP DO INTERIOR-SP
 
Google Cloud Platform monitoring with Zabbix
Google Cloud Platform monitoring with ZabbixGoogle Cloud Platform monitoring with Zabbix
Google Cloud Platform monitoring with Zabbix
 
Fluentd with MySQL
Fluentd with MySQLFluentd with MySQL
Fluentd with MySQL
 
MongoDB .local Toronto 2019: Tips and Tricks for Effective Indexing
MongoDB .local Toronto 2019: Tips and Tricks for Effective IndexingMongoDB .local Toronto 2019: Tips and Tricks for Effective Indexing
MongoDB .local Toronto 2019: Tips and Tricks for Effective Indexing
 
WebAssembly Overview
WebAssembly OverviewWebAssembly Overview
WebAssembly Overview
 
Monitoring Oracle Database Instances with Zabbix
Monitoring Oracle Database Instances with ZabbixMonitoring Oracle Database Instances with Zabbix
Monitoring Oracle Database Instances with Zabbix
 
Os Desafios do Zabbix com Alta Disponibilidade - 3º Zabbix Meetup do Interior
Os Desafios do Zabbix com Alta Disponibilidade - 3º Zabbix Meetup do InteriorOs Desafios do Zabbix com Alta Disponibilidade - 3º Zabbix Meetup do Interior
Os Desafios do Zabbix com Alta Disponibilidade - 3º Zabbix Meetup do Interior
 
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
 
MongoDB Performance Tuning
MongoDB Performance TuningMongoDB Performance Tuning
MongoDB Performance Tuning
 
Monitoramento de Vulnerabilidades com Zabbix, RHEL e Yum Security Plugin
Monitoramento de Vulnerabilidades com Zabbix, RHEL e Yum Security PluginMonitoramento de Vulnerabilidades com Zabbix, RHEL e Yum Security Plugin
Monitoramento de Vulnerabilidades com Zabbix, RHEL e Yum Security Plugin
 
Oracle epm 11_1_2_1_tuning_guide_v4
Oracle epm 11_1_2_1_tuning_guide_v4Oracle epm 11_1_2_1_tuning_guide_v4
Oracle epm 11_1_2_1_tuning_guide_v4
 
Primeiros Passos na API do Zabbix com Python - 2º ZABBIX MEETUP DO INTERIOR-SP
Primeiros Passos na API do Zabbix com Python - 2º ZABBIX MEETUP DO INTERIOR-SPPrimeiros Passos na API do Zabbix com Python - 2º ZABBIX MEETUP DO INTERIOR-SP
Primeiros Passos na API do Zabbix com Python - 2º ZABBIX MEETUP DO INTERIOR-SP
 
NGINX Back to Basic 2 Part 2 (Japanese Webinar)
NGINX Back to Basic 2 Part 2 (Japanese Webinar)NGINX Back to Basic 2 Part 2 (Japanese Webinar)
NGINX Back to Basic 2 Part 2 (Japanese Webinar)
 
ProxySQL High Availability (Clustering)
ProxySQL High Availability (Clustering)ProxySQL High Availability (Clustering)
ProxySQL High Availability (Clustering)
 
MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기
 

Semelhante a Primeiros passos com a API do Zabbix

Zabbix e KACE, uma boa ideia, e porque não!
Zabbix e KACE, uma boa ideia, e porque não!Zabbix e KACE, uma boa ideia, e porque não!
Zabbix e KACE, uma boa ideia, e porque não!
Fabio Vieira Mello
 
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividade
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividadeZabbix Conference LatAm 2019 - Automação: Ganhando produtividade
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividade
Igor Nicoli
 
Primeiros Passos com a API do Zabbix - 3 Meetup do Interior
Primeiros Passos com a API do Zabbix - 3 Meetup do InteriorPrimeiros Passos com a API do Zabbix - 3 Meetup do Interior
Primeiros Passos com a API do Zabbix - 3 Meetup do Interior
Robert Silva
 
Python 08
Python 08Python 08
Python 08
Bruno Catão
 
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Gabriel Machado
 
Introdução aos aplicativos tipo canvas
Introdução aos aplicativos tipo canvasIntrodução aos aplicativos tipo canvas
Introdução aos aplicativos tipo canvas
Guilherme
 
Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1
Luiz Henrique Zambom Santana
 
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
João Moura
 
Desenvolvimento Mobile com Ruby
Desenvolvimento Mobile com RubyDesenvolvimento Mobile com Ruby
Desenvolvimento Mobile com Ruby
Rodrigo Martins
 
PyData - Consumindo e publicando web APIs com Python
PyData - Consumindo e publicando web APIs com PythonPyData - Consumindo e publicando web APIs com Python
PyData - Consumindo e publicando web APIs com Python
Bruno Rocha
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
Ari Stopassola Junior
 
Integração de sistemas legados com Plone
Integração de sistemas legados com PloneIntegração de sistemas legados com Plone
Integração de sistemas legados com Plone
Fabiano Weimar
 
Node.js: serious business
Node.js: serious businessNode.js: serious business
Node.js: serious business
Pedro Franceschi
 
Tornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JSTornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JS
Matheus Donizete
 
Treze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento AndroidTreze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento Android
Adriano Rocha
 
Treze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento androidTreze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento android
Ricardo Longa
 
Arquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQLArquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQL
Raul Oliveira
 
Explorando a API Rest Jira Cloud
Explorando a API Rest Jira CloudExplorando a API Rest Jira Cloud
Explorando a API Rest Jira Cloud
Joao Galdino Mello de Souza
 
De A a Zabbix - I Congresso de Ciências Exatas e Tecnológicas
De A a Zabbix - I Congresso de Ciências Exatas e TecnológicasDe A a Zabbix - I Congresso de Ciências Exatas e Tecnológicas
De A a Zabbix - I Congresso de Ciências Exatas e Tecnológicas
André Déo
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
Ari Stopassola Junior
 

Semelhante a Primeiros passos com a API do Zabbix (20)

Zabbix e KACE, uma boa ideia, e porque não!
Zabbix e KACE, uma boa ideia, e porque não!Zabbix e KACE, uma boa ideia, e porque não!
Zabbix e KACE, uma boa ideia, e porque não!
 
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividade
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividadeZabbix Conference LatAm 2019 - Automação: Ganhando produtividade
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividade
 
Primeiros Passos com a API do Zabbix - 3 Meetup do Interior
Primeiros Passos com a API do Zabbix - 3 Meetup do InteriorPrimeiros Passos com a API do Zabbix - 3 Meetup do Interior
Primeiros Passos com a API do Zabbix - 3 Meetup do Interior
 
Python 08
Python 08Python 08
Python 08
 
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
 
Introdução aos aplicativos tipo canvas
Introdução aos aplicativos tipo canvasIntrodução aos aplicativos tipo canvas
Introdução aos aplicativos tipo canvas
 
Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1
 
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
 
Desenvolvimento Mobile com Ruby
Desenvolvimento Mobile com RubyDesenvolvimento Mobile com Ruby
Desenvolvimento Mobile com Ruby
 
PyData - Consumindo e publicando web APIs com Python
PyData - Consumindo e publicando web APIs com PythonPyData - Consumindo e publicando web APIs com Python
PyData - Consumindo e publicando web APIs com Python
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Integração de sistemas legados com Plone
Integração de sistemas legados com PloneIntegração de sistemas legados com Plone
Integração de sistemas legados com Plone
 
Node.js: serious business
Node.js: serious businessNode.js: serious business
Node.js: serious business
 
Tornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JSTornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JS
 
Treze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento AndroidTreze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento Android
 
Treze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento androidTreze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento android
 
Arquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQLArquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQL
 
Explorando a API Rest Jira Cloud
Explorando a API Rest Jira CloudExplorando a API Rest Jira Cloud
Explorando a API Rest Jira Cloud
 
De A a Zabbix - I Congresso de Ciências Exatas e Tecnológicas
De A a Zabbix - I Congresso de Ciências Exatas e TecnológicasDe A a Zabbix - I Congresso de Ciências Exatas e Tecnológicas
De A a Zabbix - I Congresso de Ciências Exatas e Tecnológicas
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 

Primeiros passos com a API do Zabbix

  • 1. Primeiros passos com a API do Zabbix Compreendendo o próximo nível conectsys.com.br
  • 2. Quem sou eu? Janssen dos Reis Lima • Bacharel em Sistemas de Informação pela FeMASS/UFF • Especialista em Administração em Redes Linux pela UFLA • Engenheiro de Sistemas (SRE/DevOps) na Conectsys • 20 anos de experiência na área de TI • Autor dos livros “Monitoramento de Redes com Zabbix” e “Consumindo a API do Zabbix com Python” • Membro ativo da comunidade • Áreas de interesse: Automação, monitoramento, HPC, API’s, Python
  • 3. Agenda • Apresentação da API do Zabbix • Estrutura da API do Zabbix • Classes e métodos da API do Zabbix • O que é possível fazer? • Integração entre sistemas • Alguns projetos que utilizam a API do Zabbix
  • 4. Visão geral da API A API do Zabbix permite recuperar e modificar configurações via programação, além de fornecer acesso a dados históricos.
  • 5. Visão geral da API É amplamente utilizada para: • Criar novas aplicações para trabalhar com Zabbix; • Fazer integração com software de terceiros; • Automatizar tarefas rotineiras.
  • 6. Visão geral da API Consigo fazer isso com API?
  • 7. Você sabe a diferença entre back-end e front-end?
  • 8. Você sabe a diferença entre back-end e front-end?
  • 10. Agora você já tem embasamento para responder a essa pergunta: A API do Zabbix faz dashboards?
  • 11. Agora você já tem embasamento para responder a essa pergunta: A API do Zabbix faz dashboards? NÃO Utilizar a API do Zabbix não faz de você um desenvolvedor web apto a desenvolver dashboards. Mas sim, entregar os dados coletados via API para um dashboard.
  • 16. A API do Zabbix é uma API baseada na web e é fornecida como parte da própria interface web do Zabbix. Ela utiliza o protocolo JSON-RPC 2.0: – Consiste de um conjunto de métodos; – Requisições e respostas entre os clientes e a API são codificados usando o formato JSON.
  • 17. Requisição JSON { "jsonrpc": "2.0", "method": "user.login", "params": { "user": "Admin", "password": "zabbix“ }, "id": 1, "auth": null }
  • 18. Resposta JSON { "jsonrpc": "2.0", "result": "0424bd59b807674191e7d77572075f33", "id": 1 }
  • 19. Antes da API Antes da implementação da API do Zabbix, não existia nenhuma ferramenta para controlar o Zabbix fora da interface Web, exceto executar consultas diretamente na base de dados, o que não é muito seguro.
  • 20. Onde encontrar documentação? • https://www.zabbix.com/documentation/3.4/ manual/api
  • 21. Requisições • Enviar requisição HTTP POST para o arquivo api_jsonrpc.php Exemplo para chamar o método apiinfo.version: POST http://localhost/zabbix/api_jsonrpc.php HTTP/1.1 Content-Type: application/json-rpc {"jsonrpc":"2.0","method":"apiinfo.version","id":1,"auth" :null,"params":{}}
  • 22. Como fazer uma requisição? • Interface web deve estar disponível • Ter um cliente HTTP ou uma ferramenta JSON- RPC • Ter uma biblioteca com a API implementada
  • 23. Usando o comando curl # curl -s -X POST -H 'Content-Type: application/json' -d '{"params": {"password": "zabbix", "user": "Admin"}, "jsonrpc": "2.0", "method": "user.login", "auth": null, "id": 1}' http://localhost/zabbix/api_jsonrpc.php Explicando: • params: parâmetros que serão passados para o método da API • jsonrpc: versão do protocolo utilizado pela API • mehtod: o método da API que será chamado • id: identificador arbitrário do pedido • auth: um token de autenticação para o usuário
  • 24. Resposta da requisição {"jsonrpc":"2.0","result":"1d8fa00b50f7c0be93938c 98a9d4d713 ","id":1} • O resultado é o token para autenticação • Apto para fazer as demais requisições Obs.: para formatar a saída no formato JSON, insira no final do comando: | python -mjson.tool
  • 25. Continuando com as requisições • Consulta curl –s -X POST -H 'Content-Type: application/json' -d '{"params": {"output": "shorten"}, "jsonrpc": "2.0", "method": "host.get", "auth": "1d8fa00b50f7c0be93938c98a9d4d713", "id": 1}' http://localhost/zabbix/api_jsonrpc.php • Resposta {"jsonrpc":"2.0","result":[{"hostid":"10084"},{"hostid":"1 0107"},{"hostid":"10106"},{"hostid":"10109"},{"hostid":"1 0142"},{"hostid":"10159"},{"hostid":"10160"}],"id":1}
  • 26. Ferramenta pra testar requisições • Zapix - https://bitbucket.org/Vedmak/zapix • Simples de usar • Ideal para praticar o formato de requisições JSON com os métodos da API do Zabbix
  • 27. Por que eu preciso de uma biblioteca? • As bibliotecas já implementam os métodos da API do Zabbix e facilita o seu uso • Qual a melhor biblioteca? – Depende do seu conhecimento em programação – Eu recomento a zabbix-api e pyzabbix (ambas escritas em Python) – https://github.com/gescheit/scripts/tree/master/zabbix – https://github.com/lukecyca/pyzabbix – https://www.zabbix.org/wiki/Docs/api/libraries (listagem de todas as bibliotecas disponíveis)
  • 28. Formatar a saída das requisições • Ao invés de você consumir isso [{u'host': u'Cable Modem', u'hostid': u'10106'}, {u'host': u'TesteJanssen', u'hostid': u'10109'}, {u'host': u'Zabbix server', u'hostid': u'10084'}, {u'host': u'Cliente', u'hostid': u'10107'}, {u'host': u'Nmap', u'hostid': u'10110'}] • Você consumirá isto 10106 - Cable Modem 10109 – TesteJanssen 10084 – Zabbix server 10107 – Cliente 10110 - Nmap
  • 29. Primeiros passos com Python • Definir o cabeçalho do arquivo .py #!/usr/bin/env python # -*- coding: utf-8 -*- from zabbix_api import ZabbixAPI zapi = ZabbixAPI(server="http://<ip-ou-hostname>/zabbix") zapi.login("<user>", "<password>")
  • 30. Exemplo • Consultar a versão da API do Zabbix instalada print "Versão da API do Zabbix: ", zapi.api_version()
  • 31. Exemplo com estrutura de controle • Imprimir apenas o ID e nome do host hosts = zapi.host.get({"output":["hostid","host"]}) for x in hosts: print x["hostid"], "- ", x["host"]
  • 32. Listar todos os hosts de acordo com o grupo de host de acordo com o nome do grupo id_grupo = zapi.hostgroup.get({"search":{"name":"Linux servers"}, "output":["groupid","name"] }) nomes_grupo = zapi.host.get({"groupids":id_grupo[0]['groupid'], "output":["host"] }) print "Relação dos hosts associados ao grupo: ", id_grupo[0]['name'] print "=====================================================" for x in nomes_grupo: print x['hostid'], "-", x['host']
  • 33. Listar a versão do agente dos hosts por grupo grupo_hosts = zapi.item.get({"groupids":"17", "filter":{"key_":"agent.version"}, "output":["lastvalue","hostid"] }) print "Relação dos hosts com Zabbix Agent desatualizado." print "-------------------------------------------------" for x in grupo_hosts: if x['lastvalue'] != "3.4": host = zapi.host.get({"hostids":x['hostid'], "output":["name"]}) print x['hostid'], "-", host[0]['name'], "-", x['lastvalue']
  • 34. Relatórios • Listagem básica de hosts e id’s.
  • 35. Relatórios • Número de vezes em que as triggers foram acionadas em um determinado período separado por host e classificação de severidade.
  • 36. Integração com outros sistemas - Sistemas de pagamento - Redes sociais
  • 37. Zabbix + Google Analytics
  • 38. ZABBIX + GLPI • https://github.com/janssenlima/zabbix-glpi Trigger PROBLEM Executa uma ação Reconhece evento informando número do ticket Trigger OK Abre ticket informando número do evento Fecha ticket informando número do evento
  • 39. ZABBIX + GLPI + Telegram • http://verdanatech.com/integrando-zabbix- glpi-e-telegram/
  • 40. Projetos que usam a API do Zabbix Back-end • Serviços de TI - https://github.com/janssenlima/api-zabbix • Scripts diversos - https://github.com/janssenlima/api-zabbix • Zabbix CLI Tools - https://www.zabbix.org/wiki/Zabbix_CLI_Tools • ZabbixTuner - https://github.com/janssenlima/ZabbixTuner Dashboards • Grafana - https://github.com/alexanderzobnin/grafana-zabbix/ • ZabiRepo - https://github.com/usiusi360/zabirepo • OctoZab - https://github.com/Quadrata-it/octo-zab • Zabbix-Dashboard - https://github.com/incama/Zabbix-Dashboard
  • 42. Automação com Ansible Módulos de monitoramento (Zabbix) disponíveis no Ansible • http://docs.ansible.com/ansible/latest/zabbix_host_module.html • http://docs.ansible.com/ansible/latest/zabbix_group_module.html • http://docs.ansible.com/ansible/latest/zabbix_hostmacro_module.html • http://docs.ansible.com/ansible/latest/zabbix_maintenance_module.html • http://docs.ansible.com/ansible/latest/zabbix_screen_module.html Fácil utilização, não precisa programar nem saber como fazer as requisições a API do Zabbix.
  • 44. www.conectsys.com.br janssen@conectsys.com.br Telegram: @JanssenLima, @ZabbixBrasil Fórum Zabbix : https://forum.zabbixoverflow.com Onde me encontrar?