Slides da apresentação no Zabbix on the road realizado em 29 de setembro de 2017 no Rio de Janeiro.
Size: 1.65 MB
Language: pt
Added: Oct 05, 2017
Slides: 44 pages
Slide Content
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.
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
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
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
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
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
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.