Primeiros passos com a API do Zabbix

janssenreis 2,573 views 44 slides Oct 05, 2017
Slide 1
Slide 1 of 44
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44

About This Presentation

Slides da apresentação no Zabbix on the road realizado em 29 de setembro de 2017 no Rio de Janeiro.


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.

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

[email protected]

Telegram: @JanssenLima, @ZabbixBrasil
Fórum Zabbix : https://forum.zabbixoverflow.com


Onde me encontrar?