A versão 6.0 do Zabbix conta com um widget para geolocalização dos hosts, exibindo-os em um Dashboard, conforme filtros que podemos aplicar. Acontece que, apesar de parecer simples (e é!), versões anteriores precisavam de integrações e alterações em código para alcançar este resultado. 

Vamos ver, neste post, algumas dicas de como aproveitar essa nova funcionalidade!

O inventário do host 

Para começar, é preciso entender por onde começamos a trabalhar com a geolocalização.  

Bom, não é mágica! Mas então, como sabemos a localização de um determinado host, geograficamente falando? A resposta existe no “Inventário” do host. Com a versão 6.0, surgiram dois campos para isso:

Ao cadastrar um host, podemos inserir manualmente (isso é opcional, claro) sua localização, tendo como parâmetros sua “latitude” e “longitude”. Afinal, por convenção, é assim que localizamos algo ou alguém no globo! O resultado esperado será algo como: 

Automatizando o campo Inventário 

Para começar, é importante notar que só faz sentido trabalhar com geolocalização se o host possuir um endereço na Internet, ou caso queiramos exibi-lo num mapa de acordo com a localização de algum Data Center no qual está hospedado. Por exemplo: Se tenho hosts espalhados ao redor do Brasil ou do mundo, talvez seja interessante saber onde ele está. Caso contrário, não é interessante (e não é esse o propósito), saber onde ele está localizado fisicamente dentro de minha empresa. Então, ao cadastrar um host, no campo de inventário visto logo acima, podemos preencher sua posição por latitude e longitude. Para até um certo número de hosts, essa é uma tarefa fácil de se realizar:

1- Entre no Google Maps, por exemplo, e digite a localização de um Data Center; abaixo, inseri o endereço da Unirede em Porto Alegre/RS;

Nos campos de inventário do host, basta digitar os números acima e pronto. A primeira etapa está pronta. 

 Mas e se tivermos algo como 1000 hosts, um pouco menos, um pouco mais?

A Automatização (ou Automação)

Quando nos deparamos com a problemática de automatizar o preenchimento do inventário de vários hosts, temos algumas saídas. Uma delas será apresentada aqui, para os campos “Location latitude” e “Location longitude”. 

 Existem diversos provedores de geolocalização. Abaixo, um link para que você possa pesquisar alguns deles e descobrir novos meios de obter o resultado deste post (e compartilhar com todos, hehe): https://whatismyipaddress.com/geolocation-providers 

 A solução proposta neste post, para fins de estudo (e por que não para produção?) será a seguinte: 

 O cadastro de um web site de uma empresa (normalmente, hospedada em cloud computing).

Um Item criado com HTTP Agent, utilizando a URL https://json.geoiplookup.io/ e tendo parte de sua URL a Macro built-in {HOST.CONN}, a qual representa a interface de conexão com o host cadastrado, sendo IP ou DNS. No nosso caso, o DNS. 

O resultado do Item será retornado em JSON, algo como abaixo: 

{
“ip”: “169.51.42.165”,
“isp”: “SoftLayer”,
“org”: “ON SECURITY”,
“hostname”: “a5.2a.33a9.ip4.static.sl-reverse.com”,
“latitude”: 52.3667,
“longitude”: 4.89454,
“postal_code”: “1012”, 

“city”: “Amsterdam”, 

“country_code”: “NL”, 

“country_name”: “Netherlands”, 

“continent_code”: “EU”, 

“continent_name”: “Europe”, 

“region”: “North Holland”, 

“district”: “Gemeente Amsterdam”, 

“timezone_name”: “Europe\\\\/Amsterdam”, 

“connection_type”: “Corporate”, 

“asn_number”: 36351, 

“asn_org”: “SoftLayer Technologies Inc.”, 

“asn”: “AS36351 – SoftLayer Technologies Inc.”, 

“currency_code”: “EUR”, 

“currency_name”: “Euro”, 

“success”: true, 

“premium”: false 

} 

Em destaque, de laranja temos latitude e de rosa, longitude. 

Note que este Item será coletado de acordo com a periodicidade que você determinar e, pode ou não ter o mesmo conteúdo. Mas meu host pode mudar de lugar de tempos em tempos? E por que não? Se o host estiver hospedado em um ambiente de Cloud Computing, e na contratação houver alguma cláusula de alta disponibilidade ou contingência, o host poderia ser movido para outro Data Center, ou ainda ter uma réplica que seria inicializada no caso da primeira estar indisponível. Logo, o host poderia estar em outra localidade física, além de lógica. 

Imagine agora os problemas relacionados à jurisdição, leis de proteção de dados, etc…  

É bom saber “por onde anda nossos hosts”!!! 

O resultado do Item será retornado em JSON, algo como abaixo: 

{
“ip”: “169.51.42.165”,
“isp”: “SoftLayer”,
“org”: “ON SECURITY”,
“hostname”: “a5.2a.33a9.ip4.static.sl-reverse.com”,
“latitude”: 52.3667,
“longitude”: 4.89454,
“postal_code”: “1012”, 

“city”: “Amsterdam”, 

“country_code”: “NL”, 

“country_name”: “Netherlands”, 

“continent_code”: “EU”, 

“continent_name”: “Europe”, 

“region”: “North Holland”, 

“district”: “Gemeente Amsterdam”, 

“timezone_name”: “Europe\\\\/Amsterdam”, 

“connection_type”: “Corporate”, 

“asn_number”: 36351, 

“asn_org”: “SoftLayer Technologies Inc.”, 

“asn”: “AS36351 – SoftLayer Technologies Inc.”, 

“currency_code”: “EUR”, 

“currency_name”: “Euro”, 

“success”: true, 

“premium”: false 

} 

Em destaque, de laranja temos latitude e de rosa, longitude. 

Note que este Item será coletado de acordo com a periodicidade que você determinar e, pode ou não ter o mesmo conteúdo. Mas meu host pode mudar de lugar de tempos em tempos? E por que não? Se o host estiver hospedado em um ambiente de Cloud Computing, e na contratação houver alguma cláusula de alta disponibilidade ou contingência, o host poderia ser movido para outro Data Center, ou ainda ter uma réplica que seria inicializada no caso da primeira estar indisponível. Logo, o host poderia estar em outra localidade física, além de lógica. 

Imagine agora os problemas relacionados à jurisdição, leis de proteção de dados, etc…  

É bom saber “por onde anda nossos hosts”!!! 

Dependent Item + Preprocessing  

Agora que temos os valores de Latitude e Longitude, precisamos extraí-los do texto bruto coletado pelo HTTP Agent. Mas como?  Simples! Vamos criar Dependent Items (Itens dependentes) utilizando o recurso “preprocessing” do Item, antes de inseri-lo na base de dados do Zabbix. 

Nota: Não é o intuito deste post esgotar o recurso “preprocessing”, logo, apenas faremos o necessário para alcançar nosso objetivo.  

Na visão de Items do seu host, clique nos 3 pontinhos à sua esquerda, com baixo:

Agora, “Create dependent item”. 

 Preencha o Item como na tela abaixo: 

Agora, “Create dependent item”.
Preencha o Item como na tela abaixo:

Perceba que estamos criando um Item tendo como referência (Master Item) o que criamos primeiro com HTTP Agent e, o resultado deste, vai popular o campo “Location latitude” do inventário do nosso host. Agora, vamos para a guia “Preprocessing”.

Para preencher corretamente o valor do JSONPath desejado, é recomendado que você faça testes antes de criar o Item. Isso pode ser feito pelo próprio Zabbix ou pelo site https://jsonpath.com. 

Ao criar o Item, ele será alimentado sempre que o Master Item for coletado. O resultado esperado será como ilustrado abaixo (Administration/Lastest data):

Agora, precisamos fazer o mesmo para Longitude:

Na guia “Preprocessing”: 

Ok! Vamos ver como está nossa lista de Items:

Um Master Item (coletado por HTTP Agent) e dois Dependent Items. Os campos do inventário “Location latitude” e “Location longitude” são agora preenchidos automaticamente. 

Tem um host diferente? Tem 1.000 hosts diferentes? Foram criados + 10.000 hosts? Crie então um Template com estes Items e associe-os aos hosts desejados. Bem simples! 

Vejamos o inventário de nosso host: 

Os campos foram preenchidos corretamente.

Trabalhando com o Geomap Widget no Dashboard 

Ao criar um Dashboard ou editar o seu atual, clique em qualquer espaço vazio da tela e crie um novo widget. Selecione Geomap.

Dê um nome. Selecione o intervalo de atualização conforme sua necessidade e selecione o host ou grupo de hosts os quais deseja que sejam exibidos no mapa. Clique em “Add”. 

 O resultado será algo como: 

Como em qualquer aplicativo de mapa, você terá controles para “zoom”. Exiba como preferir! 

 

Se explorar um pouco mais, verá que existem filtros que podem ser aplicados, como os de problemas a serem exibidos no Geomap. Isso ajuda a filtrar visualmente os hosts que estejam com determinada severidade de problema em ocorrência.  

Nota final (do post): 

Ao criar os Dependent Items, não utilize “Units” como “!Latitude” ou “!Longitude”. Caso use, isso fará com que o campo do inventário seja preenchido com valores não desejáveis e o Geomap não exibirá a informação. 

Esperamos que este pequeno tutorial seja útil! Deixe seu comentário!
Bons estudos! 

 

Paulo R.  Deolindo Jr.

Paulo R. Deolindo Jr.

Zabbix Trainer

Graduado em Tecnologia da Informação, Pós-graduado em Produção e Sistemas IFF – Instituto Federal de Educação, Ciência e Tecnologia Fluminense e pós-graduado pela Unisul (PR) no curso de Gestão de Projetos de Tecnologia da Informação. Atua confeccionando e ministrando treinamentos com foco em tecnologias Open Source, como Zabbix, Zimbra, Bacula, Gestão e Segurança em Servidores Linux, dentre outras.

 

  • [2017] – Linux Professional Institude Certified
  • [2014] – Zabbix Certified Professional
  • [2014] – Zabbix Certified Specialist
  • [2013] – Zimbra Collaboration Suite

Zabbix Premium Partner

Somos a referência no monitoramento de negócios, aplicações e infraestrutura. Desde 2007 somos responsáveis por disseminar a ferramenta de monitoramento open source mais popular no mundo, o Zabbix. Somos o único Premium Partner da Zabbix SIA na América Latina e responsáveis por planejar e executar o maior evento anual sobre monitoramento e Zabbix, a Zabbix Conference LatAm. Além disso, o monitoramento é um dos alicerces dos serviços da Unirede. Quer saber mais sobre a Unirede? Leia aqui.