Olá colegas, hoje quero falar de uma necessidade que surgiu do nada aqui na empresa, que foi criar a arvore de SLA do Zabbix.
Quando chegou o pedido ele foi dessa forma, precisamos disso para amanhã, então respirei fundo e pensei como posso fazer isso rápido, eu tenho mais de mil itens monitorados na ferramenta.
A solução foi usar o nosso amigo Python e um pouco de criatividade com os códigos rsrs.
Então sem demoras vamos a melhor parte que é fazer isso funcionar.
OBS. Neste código vou postar como remover a arvore antiga e criar uma nova se o seu caso for como o meu em que não existe a arvore de SLA mantenha comentado o trecho do “def” que remove a mesma ok, outro ponto recomendo fortemente que teste e ajuste o fonte se necessário usando alguma ferramenta que não esteja em produção. E deixo claro que qualquer erro, ou problema é exclusivamente de sua responsabilidade.
Primeiramente vamos conectar no Zabbix.
import urllib.request as urllib2
from zabbix_api import ZabbixAPI
zapi = ZabbixAPI(server=”http://192.168.120.193/zabbix”)
zapi.login(“Admin”, “senha do usuario”)
Agora criar as def para Grupos, Hosts, Triggers e Itens
def obterGrupos():
hostgroups = zapi.hostgroup.get({ “output”: “extend”, “real_hosts”: True })
listaGrupos = []
for x in hostgroups: listaGrupos += [x[‘name’]]
return listaGrupos
def obterGrupoId(nomeGrupo):
groupId = zapi.hostgroup.get({ “output”: “extend”, “filter”: { “name”: nomeGrupo } })[0][‘groupid’]
return groupId
def obterHosts(nomeGrupo):
hosts_grupo = zapi.host.get({ “groupids”: obterGrupoId(nomeGrupo), “output”: [ “host” ] })
listaHosts = []
for x in hosts_grupo: listaHosts += [x[‘host’]]
return listaHosts
def obterHostId(nomeHost):
hostId = zapi.host.get({ “output”: “hostid”, “filter”: { “host”: nomeHost } })[0][‘hostid’]
return hostId
def obterTriggersHosts(nomeHost):
triggers = zapi.trigger.get({ “hostids”: obterHostId(nomeHost), “expandDescription”: “true”, “expandComment”: “true”, “expandExpression”: “true” })
for x in triggers: print (x[‘description’])
def obterItens(nomeHost):
itens = zapi.item.get({ “hostids”: obterHostId(nomeHost), “with_triggers”: True, “selectTriggers”: “extend” })
listaItens = []
for x in itens: listaItens += [x[‘name’]]
return listaItens
def obterItemTriggerId(nomeHost,nomeItem):
triggerId = zapi.item.get({ “output”: “triggers”,”hostids”: obterHostId(nomeHost), “with_triggers”: True, “selectTriggers”: “triggerid”, “filter”: { “name”: nomeItem } })[0][‘triggers’][0][‘triggerid’]
return triggerId
E a partir desse ponto vamos começar as def para criar a
arvore de SLA
def criarServicosPai(nomeGrupo):
zapi.service.create({ “name”: nomeGrupo, “algorithm”: “1”,”showsla”: “1”, “goodsla”: “99.99”, “sortorder”: “1” })
def obterServicosPai(nomeGrupo):
parentId = zapi.service.get({ “selectParent”: “extend”, “selectTrigger”: “extend”, “expandExpression”: “true”, “filter”: { “name”: nomeGrupo }})[0][‘serviceid’]
return parentId
def criarServicosFilho(nomeHost,nomeGrupo):
zapi.service.create({ “name”: nomeHost, “algorithm”: “1”, “showsla”: “1”, “goodsla”: “99.99”, “sortorder”: “1”, “parentid”: obterServicosPai(nomeGrupo)})
def obterServicosFilho(nomeHost):
parentIdChild = zapi.service.get({ “selectParent”: “extend”, “selectTrigger”: “extend”, “expandExpression”: “true”, “filter”: { “name”: nomeHost } })[0][‘serviceid’]
return parentIdChild
def criarItensServicos(nomeHost,nomeItem):
zapi.service.create({ “name”: nomeItem, “algorithm”: “1”, “showsla”: “1”, “goodsla”: “99.99”, “sortorder”: “1”, “parentid”: obterServicosFilho(nomeHost), “triggerid”: obterItemTriggerId(nomeHost,nomeItem)})
def obterServicos():
itServices = zapi.service.get({ “selectParent”: “extend”, “selectTrigger”: “extend” })
listaServicos = []
for x in itServices: listaServicos += [x[‘serviceid’]]
return listaServicos
Neste ponto vou criar um def que remove a arvore de SLA
antiga.
def removerArvoreServicos():
for x in obterServicos():
zapi.service.deletedependencies([x])
zapi.service.delete([x])
Por fim criamos a nossa nova arvore de SLA com nossos itens
e triggers
def criarArvoreServicos():
# removerArvoreServicos()
for nomeGrupo in obterGrupos():
criarServicosPai(nomeGrupo)
for nomeHost in obterHosts(nomeGrupo):
criarServicosFilho(nomeHost, nomeGrupo)
for nomeItem in obterItens(nomeHost):
criarItensServicos(nomeHost, nomeItem)
criarArvoreServicos()
Observem que assim como mencionei acima, deixei a função responsável por deletar a arvore antiga comentada. (Tomem cuidado com essa opção)
No fim vocês terão um resultado semelhante a este:
Por hora é isso pessoal, espero que todos tenham gostado e caso queiram dar uma força, curtam lá no linkedin.
Abraços.
2 Responses
Conteúdo de primeira. Só precisa colocar imagem com uma qualidade superior. Valeu
Obrigado Renato, já estou fazendo estes ajustes com as imagens porém preciso encontrar uma forma de manter uma boa qualidade no App Portal Filgs que utiliza o conteúdo da página, mas agradeço o feedback e logo mais não teremos mais esse problema.