1 – 6 de 6
Anônimo Nelson Henrique de Oliveira Ju disse...

Amigo. Estou me baseando nas suas orientações para testar o acesso a API do Zabbix com Python. Até consegui acessar. Mas estou penando com falta de exemplos. Como eu faria uma consulta para retornar um HOSTNAME baseado no ENDEREÇO IP. Imagine que temos o IP e queremos descobrir o Hostname. Pode ajudar? Obrigado.

7 de outubro de 2013 às 17:48

Anônimo Rafael Santos disse...

Boa noite Nelson,

Como "hostname" você quer dizer o nome do host cadastrado no zabbix ou o hostname do sistema operacional do host?

Caso queira obter o nome cadastrado no zabbix, primeiramente você deverá utilizar o método hostinterface.get para localizar o host pelo ip assim obtendo o 'hostid' desse host e com o método host.get obter o nome cadastrado no zabbix.

Caso queira o hostname do sistema operacional, terá que utilizar o hostinterface.get também para obter o 'hostid' através do ip, e depois utilizar o método item.get para obter o item 'system.hostname' e assim pegar o hostname.

Segue o código abaixo que fiz como exemplo para obter o nome cadastrado no zabbix e o hostname do sistema. Espero que te ajude.



from zabbix_api import ZabbixAPI

# Dados de acesso, do servidor do zabbix e o ip do host.
SERVER = "http://localhost/zabbix"
USER = "admin"
PASSWD = "zabbix"
HOST = "127.0.0.1"

# Instância da api do zabbix
zapi = ZabbixAPI(SERVER)
zapi.login(USER, PASSWD)

# Obter a interface do host pelo ip, para pegar o hostid
host_interface = zapi.hostinterface.get({"output": ["hostid", "ip"],
"filter": {"ip": HOST}})

try:
# Pegar o nome cadastrado no zabbix
zabbix_name = zapi.host.get({"output": ["name", "hostid"],
"hostids": host_interface[0]["hostid"]})

# Pegar o hostname do sistema operacional
hostname = zapi.item.get({"output": ["lastvalue", "hostid"],
"hostids": host_interface[0]["hostid"],
"filter": {"key_": "system.hostname"}})
except IndexError:
print("Host: %s não foi encontrado!" % HOST)

print zabbix_name
print hostname

8 de outubro de 2013 às 20:11

Anônimo Nelson Henrique de Oliveira Ju disse...

Muito legal a sua dica.

Eu havia descobrido uma parte do que vc explicou. Fiz uma consulta que traz uma lista de Hosts. Segue o código:

#!/usr/bin/python
# -*- coding: utf-8 -*-

from zabbix_api import ZabbixAPI

server = "http://monitor.ciasc.gov.br" #Endereço ou Ip do servidor do zabbix
username = "username" #Usuário
password = "senha" # Senha

#Instanciando a API
zapi = ZabbixAPI(server = server, path="", log_level=6)
zapi.login(username, password)

# Obtendo lista de hosts
hosts = zapi.host.get({"output": ["hostid","name"], "sortfield": "hostid"})

# Obtendo lista de endeços IP
ip_hosts = zapi.hostinterface.get ({"output": ["hostid","ip"], "sortfield": "ip"})

for x in hosts:
item_number = x['hostid']
for ip_vetor_item in ip_hosts:
if ip_vetor_item["hostid"] == x['hostid']:
ip_host = ip_vetor_item["ip"]
print x['hostid'],x['name'],ip_host


print "Total de Hosts no Zabbix.:",len(hosts)




Vou testar sua sugestão de código. Outra hora eu critico. Obrigado pela ajuda por enquanto.


Att.

9 de outubro de 2013 às 16:26

Anônimo George Souza Farias disse...

Amigo, estou tentando montar um relatórios personalizado com as informações coletadas via API, minha dificuldade está sendo a manipulações dos dados após os Gets. Não estou conseguindo fazer a decodificação usando o método json.loads(). Alguma dica?

26 de maio de 2015 às 18:32

Anônimo Rafael Santos disse...

Olá George, o retorno do get geralmente é uma lista, com os objetos já no formato do dicionário do python, a própria lib em python já converte o json quando usamos o get, basta acessar os dados passando a chave para a lista ex: variavel_lista['d'], lembrando que você pode verificar as chaves disponíveis assim: variavel_lista.keys()

31 de maio de 2015 às 19:31

Anônimo George Souza Farias disse...

Valeu amigo, deu certo. Muito obrigado.

1 de junho de 2015 às 14:32

Você pode usar algumas tags HTML, como <b>, <i>, <a>

Depois de enviar seu comentário, será necessário fazer login.
Prove que você não é um robô