Como programar a API do Zabbix?
Hangout – 06/10/2015
conectsys.com.br
Apresentação do instrutor
Janssen dos Reis Lima • Bacharel em Sistemas de Informação pela FeMASS/UFF • Especialista em Administração em Redes Linux pela UFLA • Mestrando em Sistemas Computacionais pela UFF • Atualmente ocupa o cargo de Analista de Sistemas no Grupo de
Inferência de Reservatório, no LENEP/UENF • Sócio da Conectsys Soluções Corporativas • 16 anos de experiência na área de TI • Trabalha com projetos de implementação de Zabbix desde 2010 • Autor do Livro “Monitoramento de Redes com Zabbix” • Desenvolvedor de integrações de Zabbix com outros sistemas
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?
• Exemplos de relatórios
• 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
Programar 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
serem consumidos por uma dashboard.
GitHub do OctoZab
https://github.com/Quadrata-it/octo-zab
Vamos apimentar (ou adocicar!) a discussão?
Operação de rede - Necessita de visualização do
ambiente monitorado - Verificar uma falha que está
acontecendo
Gerência e supervisão - Precisam tomar decisões - Raramente visualizam os dados
em tempo real - Necessitam de relatórios
gerenciais e operacionais
Visão geral da API
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 a documentação?
• https://www.zabbix.com/documentation/2.4/manual/api
Execução de requisições
• Só precisa 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 -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":"1d8fa00b50f7c0be93938c98a9d4d713 ","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 -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":"10107"},{"hostid":"10106"},{"hostid":"10109"},{"hostid":"10142"},{"hostid":"10159"},{"hostid":"10160"}],"id":1}
Ferramenta pra testar JSON
• 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?
• Para não precisar reinventar a roda
• As bibliotecas já implementam os métodos da API do Zabbix e facilita o seu uso
• Qual a melhor biblioteca? – Depende da linguagem
– Eu recomento a zabbix-api (escrita em Python)
– https://github.com/gescheit/scripts/tree/master/zabbix
E onde entra a programação?
• 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
• 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.0": 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
Exemplo de integração
ZABBIX + GLPI
• http://blog.janssenlima.com/2013/11/integracao-zabbix-glpi.html
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
Projetos que usam a API do Zabbix
Automação • Zabbix-gnomes - https://github.com/q1x/zabbix-gnomes • IT services tree - https://github.com/janssenlima/api-zabbix Dashboards • Grafana - https://github.com/alexanderzobnin/grafana-zabbix/ • OctoZab - https://github.com/Quadrata-it/octo-zab • Zabbix-Dashboard - https://github.com/incama/Zabbix-Dashboard • zabbixweb - https://github.com/velinath/zabbixweb • Phyramid Network - https://www.phyramid.com/blog/monitoring-
servers-at-phyramid/
Sobre o curso de API da Conectsys
• Por que você deve fazer o curso? – Utilizar todo o potencial que o Zabbix oferece
– Criar novas ferramentas, relatórios etc.
– Automatizar tarefas repetitivas
– Pensar mais no core business da empresa, não somente em TI.
• E por que fazer com a Conectsys? – Único curso de API do Zabbix no mercado
– Experiência do instrutor com projetos de integração
– Você vai se surpreender com o que pode fazer com a API
Como é o curso?
• Você vai aprender a estrutura da API
• Como relacionar as requisições fazendo uso dos métodos corretos
• Conhecer e trabalhar com o formato JSON
• Fazer seus próprios códigos utilizando a API na linguagem que você mais se adapta, não somente na linguagem ensinada no curso
• Conhecer as bibliotecas a utilizar para plotar gráficos, gerar relatórios em PDF, HTML etc.
Formato do Curso
• Atualmente disponível somente ao vivo
– Aulas não são gravadas (aluno terá acesso ao curso gravado)
– Fórum para tirar dúvidas no ambiente EAD
• Em breve o curso será disponível em vídeo aula
– Com fórum exclusivo para tirar dúvidas e trocar conhecimento entre os alunos
– Encontros mensais para discutir ideias do uso da API
– Direito a consultoria exclusiva para projetos com a API
Dúvidas?
www.conectsys.com.br
www.conectsys.com.br/servicos/cursos/
programacao-com-api-do-zabbix/
Top Related