Bom galera,
Faz tempo que não posto nada sobre Zabbix. Então, quis presentear vocês com um conteúdo mais avançado. Espero que ao menos 1 vez por mês coloco mais assuntos como esse no blog.
Vou mostrar para vocês como utilizar a API do Zabbix.
Antes vou explicar de forma básica o que API para os que não sabem do que se trata. Programadores tem a obrigação de saber. :P
- API - Application Programming Interface - é um conjunto de rotinas e padrões estabelecidos por um software. Isso permite que aplicações de terceiros utilizem as funcionalidades oferecidas pelo software.
A API do Zabbix permite recuperar e modificar a configuração do Zabbix via programação e fornece acesso a dados históricos. É amplamente utilizado para:
Obs.: Não é o meu objetivo detalhar como funciona a estrutura da API do Zabbix. Isso é assunto para quem deseja desenvolver uma biblioteca para trabalhar com a API do Zabbix. Para uma explicação mais detalhada, sugiro a leitura do próprio manual do Zabbix que aborda esse conteúdo. https://www.zabbix.com/documentation/2.4/manual/api]https://www.zabbix.com/documentation/2.4/manual/api
Esse conteúdo aqui está focado em quem deseja ter o mínimo de esforço para utilizar uma biblioteca já pronta e usufruir dos métodos disponibilizados pela API do Zabbix.
A própria documentação do Zabbix sugera que você use bibliotecas que trabalham com a API do Zabbix para desenvolvimento de Aplicações. Este é o meu caso e vou demonstrar para vocês como utilizar a API do Zabbix com uma biblioteca escrita em Python. Para outras linguagens, acesse http://zabbix.org/wiki/Docs/api/libraries]http://zabbix.org/wiki/Docs/api/libraries
Vamos começar.
Instale o pacote python-pip
Debian e derivados
ou
Red Hat e derivados
Instale a biblioteca zabbix-api (mesmo comando para qualquer distribuição)
O código abaixo vai montar a parte do código essencial para você se conectar a interface Web do Zabbix, que é o canal por onde a API do Zabbix disponibiliza as informações.
Obs. 1: Essa é a vantagem do uso da API, pois não precisamos fazer scripts mirabolantes para pegar a informação diretamente na base de dados (o que também não é muito seguro :-X).
Obs. 2: Experimente retirar o parâmetro log_level=6, removendo também a ',' antes do mesmo. O retorno será apenas dos valores que serão consultados, e não no formato JSON.
Agora vamos incrementar o código para uma consulta simples da versão da API do Zabbix. Copie o código abaixo e salve como consulta_api_zabbix.py (use o nome que quiser ;))
Para finalizar, vou demonstrar como pegar a lista dos hosts cadastrados no Zabbix informando a disponibilidade do Zabbix Agent, o ID do host e seu nome. Adicione o seguinte código ao arquivo criado:
Para executar o script executa no Shell do Linux:
O Resultado da execução do script será o seguinte:
É isso aí galerinha do Zabbix. Aproveitem a imaginação para que possam tirar todo o proveito que a API do Zabbix disponibiliza. Na próxima semana vou mostrar para vocês como damos um ACK em um evento do Zabbix através do uso da API.
Faz tempo que não posto nada sobre Zabbix. Então, quis presentear vocês com um conteúdo mais avançado. Espero que ao menos 1 vez por mês coloco mais assuntos como esse no blog.
Vou mostrar para vocês como utilizar a API do Zabbix.
Antes vou explicar de forma básica o que API para os que não sabem do que se trata. Programadores tem a obrigação de saber. :P
- API - Application Programming Interface - é um conjunto de rotinas e padrões estabelecidos por um software. Isso permite que aplicações de terceiros utilizem as funcionalidades oferecidas pelo software.
A API do Zabbix permite recuperar e modificar a configuração do Zabbix via programação e fornece acesso a dados históricos. É amplamente utilizado para:
- Criar novas aplicações para trabalhar com Zabbix
- Integrar Zabbix com softwar de terceiros
- Automatizar tarefas de rotina
Obs.: Não é o meu objetivo detalhar como funciona a estrutura da API do Zabbix. Isso é assunto para quem deseja desenvolver uma biblioteca para trabalhar com a API do Zabbix. Para uma explicação mais detalhada, sugiro a leitura do próprio manual do Zabbix que aborda esse conteúdo. https://www.zabbix.com/documentation/2.4/manual/api]https://www.zabbix.com/documentation/2.4/manual/api
Esse conteúdo aqui está focado em quem deseja ter o mínimo de esforço para utilizar uma biblioteca já pronta e usufruir dos métodos disponibilizados pela API do Zabbix.
A própria documentação do Zabbix sugera que você use bibliotecas que trabalham com a API do Zabbix para desenvolvimento de Aplicações. Este é o meu caso e vou demonstrar para vocês como utilizar a API do Zabbix com uma biblioteca escrita em Python. Para outras linguagens, acesse http://zabbix.org/wiki/Docs/api/libraries]http://zabbix.org/wiki/Docs/api/libraries
Vamos começar.
Instale o pacote python-pip
Debian e derivados
apt-get install python-pip
ou
Red Hat e derivados
yum install python-pip
Instale a biblioteca zabbix-api (mesmo comando para qualquer distribuição)
pip install zabbix-api
O código abaixo vai montar a parte do código essencial para você se conectar a interface Web do Zabbix, que é o canal por onde a API do Zabbix disponibiliza as informações.
# -*- coding: utf-8 -*- """ Created on Fri Mar 27 12:50:18 2015 @author: Janssen dos Reis Lima """ from zabbix_api import ZabbixAPI zabbix_server = "http://xxx.xxx.xxx.xxx/zabbix" #Endereço ou IP ou FQDN do servidor do Zabbix. username = "admin" #Informe usuário para acessar. Usuário com perfil de administrador do Zabbix, não necessáriamente o 'admin' padrão. password = "zabbix" #Senha #Instanciando a API conexao = ZabbixAPI(server = zabbix_server, log_level=6) conexao.login(username, password)
Obs. 1: Essa é a vantagem do uso da API, pois não precisamos fazer scripts mirabolantes para pegar a informação diretamente na base de dados (o que também não é muito seguro :-X).
Obs. 2: Experimente retirar o parâmetro log_level=6, removendo também a ',' antes do mesmo. O retorno será apenas dos valores que serão consultados, e não no formato JSON.
Agora vamos incrementar o código para uma consulta simples da versão da API do Zabbix. Copie o código abaixo e salve como consulta_api_zabbix.py (use o nome que quiser ;))
versao = conexao.api_version() print "Versão do Zabbix Server: ", versao
Para finalizar, vou demonstrar como pegar a lista dos hosts cadastrados no Zabbix informando a disponibilidade do Zabbix Agent, o ID do host e seu nome. Adicione o seguinte código ao arquivo criado:
hosts = conexao.host.get({"output": "extend", "sortfield": "name"}) for x in hosts: print x['available'], "-", x['hostid'], "-", x['name']
Para executar o script executa no Shell do Linux:
python consulta_api_zabbix.py
O Resultado da execução do script será o seguinte:
Versão do Zabbix Server: 2.4.1 0 - 10112 - JBoss 1 - 10105 - AmaxonEC2 0 - 10113 - Tomcat 2 - 10108 - Windows 1 - 10084 - Zabbix server
É isso aí galerinha do Zabbix. Aproveitem a imaginação para que possam tirar todo o proveito que a API do Zabbix disponibiliza. Na próxima semana vou mostrar para vocês como damos um ACK em um evento do Zabbix através do uso da API.
Janssen, estou com problemas para instalar o pacote "zabbix-api" usando o pip. O comando retorna um erro que copio abaixo.
ResponderExcluir"Cannot fetch index base URL https://pypi.python.org/pypi/
Could not find any downloads that satisfy the requirement zabbix-api
Cleaning up...
No distributions at all found for zabbix-api"
Já viu algo parecido?
Qual distribuição e versão do Python instaladas?
ExcluirJanssen, existe alguma diferença na programação para a versão 3 do Zabbix ?
ResponderExcluirFiz o teste como no tutorial e apareceu algumas mensagens de json.
Em geral não. Alguns métodos que foram adicionados. Mostra as mensagens que retornaram.
ExcluirVi aqui que é por causa do log_level, qual o caminho do arquivo para fazer a alteração que vc propõe ?
ExcluirEstou com o seguinte erro ao instalar api do zabbix:
ResponderExcluir[root@ap-zabbix-des tmp]# pip install zabbix-api
Collecting zabbix-api
Could not fetch URL https://pypi.python.org/simple/zabbix-api/: There was a problem confirming the ssl certificate: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:765) - skipping
Could not find a version that satisfies the requirement zabbix-api (from versions: )
No matching distribution found for zabbix-api
Versão do python:
[root@ap-zabbix-des tmp]# python --version
Python 2.7.5
Versão do zabbix:
[root@ap-zabbix-des tmp]# zabbix_server --version
zabbix_server (Zabbix) 3.2.1
Revision 62890 30 September 2016, compilation time: Oct 3 2016 04:57:19
Copyright (C) 2016 Zabbix SIA
License GPLv2+: GNU GPL version 2 or later .
This is free software: you are free to change and redistribute it according to
the license. There is NO WARRANTY, to the extent permitted by law.
Janssen, esse erro parece que é corriqueiro né,
ResponderExcluirCannot fetch index base URL https://pypi.python.org/simple/
Could not find any downloads that satisfy the requirement zabbix-api
Cleaning up...
No distributions at all found for zabbix-api
Storing debug log for failure in /root/.pip/pip.log
dados: pip 1.5.6 from /usr/lib/python2.7/dist-packages (python 2.7)
boa tarde, Janssen
ResponderExcluirTem algum passo para criar configurar código para conectar a interface Web do Zabbix?
Boa tarde. Quando executo retorna o seguinte erro:
ResponderExcluir[root@localhost ~]# python consulta_api_zabbix.py
Traceback (most recent call last):
File "consulta_api_zabbix.py", line 18, in
versao = conexao.api_verson()
TypeError: 'ZabbixAPISubClass' object is not callable
Pode ajudar? Obrigado.
Esse é o Jansen, o cara do Zabbix, já comprei seu livro. Força e Honra!
ResponderExcluirJanssen, utilizo a API para criar algumas tarefas, como criar webcenários e testes. Isso está funcionando ok.
ResponderExcluirPorém, estou tentando utilizar o Python para criar Hosts. Mas não está funcionando...
Abaixo o código:
# -- coding: utf-8 --
import sys, logging, json
from pyzabbix import ZabbixAPI
stream = logging.StreamHandler(sys.stdout)
stream.setLevel(logging.DEBUG)
log = logging.getLogger('pyzabbix')
log.addHandler(stream)
log.setLevel(logging.DEBUG)
print 'Logando...'
zapi = ZabbixAPI("ServidorZabbix")
zapi.login("user", "senha")
print 'Logado com sucesso! #############'
#----------------------------------------
# Criar servidor
#----------------------------------------
zapi.host.create({"host": "teste",
"interfaces": [ {"type": "1",
"main": "1",
"useip": "1",
"ip": "endereçoipvalido",
"dns": "",
"port": "10052"}],
"groups": [{ "groupid": "0"}],
"templates": [{ "templateid": "10930"}]
})
/////////// A saída com o erro é essa:
Logando...
JSON-RPC Server Endpoint: Servidorzabbix/api_jsonrpc.php
Sending: {
"params": {
"password": "senha",
"user": "usuario"
},
"jsonrpc": "2.0",
"method": "user.login",
"id": 0
}
Response Code: 200
Response Body: {
"jsonrpc": "2.0",
"result": "c8572580a3fa014eda8f4123ba8e2b18",
"id": 0
}
Logado com sucesso! #############
Sending: {
"params": [
{
"templates": [
{
"templateid": "10930"
}
],
"host": "teste",
"interfaces": [
{
"ip": "endereçoipvalido",
"useip": "1",
"dns": "",
"main": "1",
"type": "1",
"port": "10052"
}
],
"groups": [
{
"groupid": "0"
}
]
}
],
"jsonrpc": "2.0",
"method": "host.create",
"auth": "c8572580a3fa014eda8f4123ba8e2b18",
"id": 1
}
Response Code: 200
Response Body: {
"jsonrpc": "2.0",
"id": 1,
"error": {
"message": "Application error.",
"code": -32500,
"data": "No permissions to referred object or it does not exist!"
}
}
Traceback (most recent call last):
File "criaservidor.py", line 37, in
"templates": [{ "templateid": "10930"}]
File "/usr/lib/python2.7/site-packages/pyzabbix/__init__.py", line 157, in fn
args or kwargs
File "/usr/lib/python2.7/site-packages/pyzabbix/__init__.py", line 134, in do_request
raise ZabbixAPIException(msg, response_json['error']['code'])
pyzabbix.ZabbixAPIException: (u'Error -32500: Application error., No permissions to referred object or it does not exist!', -32500)
Alguma dica?
Obrigado!!!