Visualizando endereços IP em um mapa-múndi com o Grafana

Poço, Este documento é algo particular, uma vez que tinha uma série de endereços IP públicos em uma tabela MySQL, que eu gostaria de visualizá-lo no Grafana. Basicamente, estou falando sobre as visitas ao blog 🙂, tenho um WordPress e não tenho o banco de dados em minha posse, pois está em uma hospedagem externa… Deixo-vos os passos que segui para o conseguir, Espero que possa ser útil para outras ideias.

O que eu disse, Eu tenho uma tabela em um banco de dados onde tenho alguns IPs públicos, qual é o WordPress deste blog?, mas ei, eu não tenho acesso direto ao banco de dados, pois ele está em uma hospedagem, Não? Eu tinha várias opções, Imagino que o WordPress tenha alguma API que eu possa atacar diretamente ou fazer de uma forma mais manual mas que pode ser útil para outras tabelas que tenho por aí.

O que me interessa é apenas uma tabela que tenha os IPs dos visitantes do blog, que no WordPress é armazenado se em wp_statistics_visitor se tivermos o plugin 'WP Statistics' instalado no WordPress. A única maneira que eu poderia pensar para exportar esses dados, Foi… da própria hospedagem (tem SSH habilitado), Crie um script e deixe-o em uma tarefa agendada (via cron) que funciona diariamente (no 23:30). Este script, como você pode ver, sai em um arquivo txt (separados por vírgulas) o IP público e a data. Deixo-vos saca_visitantes.sh:

ECO "SELECIONE IP, LAST_COUNTER DE wp_statistics_visitor ONDE LAST_COUNTER = CURDATE( );" | mysql -uUSERNAME -pPASSWORD NOMBRE_BD | sed 's/\t/,/g' ≫ web/bujarra.com/public_html/temp/direcciones_ip.txt


Um minuto depois, em outra máquina, o que eu faço é pegar esse arquivo de texto e importá-lo para um banco de dados MySQL local, Onde posso brincar com esses dados. O que quero dizer com jogar? Bem, graças ao ipstack podemos obter a localização de IPs públicos, ipstack nos dá uma API KEY gratuita de até 10.000 Consultas mensais, por isso é de alguma utilidade para nós, Ou, como é o meu caso, podemos gerar quantas contas no ipstack atenderem sua demanda 😉

Portanto, com o seguinte script (O que admito que pode ser feito melhor, Mas é a isso que meu conhecimento chega…) podemos adicionar duas colunas adicionais ao IP, os campos Latitude e Longitude. Então, pelo que podemos interpretar no roteiro, Primeiro baixamos o arquivo txt, então nós o importamos para o MySQL; e no final o que faremos é graças a esta API modificar cada linha importada e adicionar os campos Latitude & Longitude. Caso ajude você, Vou deixar você importa_direcciones_ip.sh:

#!/bin/bash
/usr/bin/curl 'http://www.bujarra.com/temp/direcciones_ip.txt' ≫ /Home/Hector/bujarra_direcciones_ip.txt mysqlimport --ignore-lines=1 --fields-terminated-by=, --verbose --local -uUSER -pPASSWORD -h SERVIDOR_MYSQL NOMBRE_BD bujarra_direcciones_ip.txt TOT_LINEAS='echo "SELECIONE CONTAGEM(*) DE bujarra_ips ONDE DATA = CURDATE();" | mysql -h SERVIDOR_MYSQL -uUSER -pPASSWORD NOMBRE_BD' TOT_LINEAS=${TOT_LINEAS:8}
TOT_LINEAS = $(( $TOT_LINEAS - 1 ))

enquanto [ $TOT_LINEAS -gt -1 ]
do IP='echo "SELECIONE IP DE bujarra_ips ONDE DATA = CURDATE() ordem POR IP desc LIMIT $TOT_LINES,1;" | mysql -h SERVIDOR_MYSQL -uUSER -pPASSWORD NOMBRE_BD' IP=${IP:3}
  ECO "IP: $IP"
  cacho "Referências HTTP://api.ipstack.com/$IP?access_key=NUESTRO_TOKEN&%20campos=latitude,Longitude&formato = 2" ≫ direcciones_ip.txt LATITUDE = 'gato direcciones_ip.txt | grep -o -P '(?&Tenente;=latitude":).*(?=,"Longitude)'`
  LONGITUD=`cat direcciones_ip.txt | grep -o -P '(?&Tenente;=comprimento":).*(?=})'`
  echo "ATUALIZAR bujarra_ips SET latitude=$LATITUD, longitud=$LONGITUD WHERE IP = '$IP';" | mysql -h SERVIDOR_MYSQL -uUSERNAME -pPASSWORD NOMBRE_BD echo "TOT_LINEAS: $TOT_LINEAS"
  TOT_LINEAS = $(( $TOT_LINEAS - 1 ))
Terminado

Poço, caso alguém esteja se perguntando qual é o formato da tabela de destino… É muito simples, Tem 5 Campos, IP, data, latitude, Comprimento e carimbo de data/hora, Se você precisar do código para criar a tabela, deixo este código de criação:

CRIAR TABELA 'bujarra_ips' (
  'IP' CHAR(20) NÃO NULO,
  'data' CHAR(20) NÃO NULO,
  'latitude' CHAR(20) NÃO NULO,
  'comprimento' CHAR(20) NÃO NULO,
  'timestamp' TIMESTAMP NOT NULL PADRÃO CURRENT_TIMESTAMP NA ATUALIZAÇÃO CURRENT_TIMESTAMP
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;

Agora que temos os dados perto do nosso Grafana, nós os sugamos, Não? Já teremos um conector ou fonte de dados criado no banco de dados MySQL e também devemos ter o Painel Mapa-múndi, que, como vemos na guia Instalação, instalamos com um simples comando. Após essas premissas, poderemos criar um Painel dentro de um Dashboard, selecionaremos fazer uma consulta ou consulta na fonte de dados que se conecta ao banco de dados MySQL onde armazenamos os IPs com sua latitude e longitude. Esta consulta pode ser útil para nós:

SELECIONE UNIX_TIMESTAMP('carimbo de data/hora') Então time_sec,
  'latitude' como latitude,
  'longitude' como longitude,
  CONTAR('IP') Valor AS,
  'ip' como nome FROM bujarra_ips ONDE $__timeFilter('carimbo de data/hora')
GROUP BY 'ip' ORDER BY 'timestamp' ASC

Nas opções de exibição, indicaremos que o “Dados de localização” Esta tabela e abaixo devemos indicar os campos que fornecerão os dados de Latitude e Longitude, que nesta tabela são latitude & Longitude. Tomaremos a coluna de valor como o campo de métrica, que na Consulta se você olhar, é a soma das vezes que o IP aparece na tabela. Se quisermos, Podemos definir o tamanho do círculo, ou em “Opções de limite” indique qual cor você pintará dependendo das visitas que você fez a nós.

Se tudo correu bem para você, terá pintado em um mapa a posição de cada IP público que você tem na tabela, Agora você pode brincar com as datas para visualizar mais ou menos dados. Eu entendo que é um post como eu disse antes de algo particular, mas pelo menos é para lhe dar ideias de como explorar IPs públicos que armazenamos em tabelas de um serviço de banco de dados como o SQL, O MySQL, MariaDB… Como sempre, espero que você tenha achado interessante!

Postagens recomendadas

Autor

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, Não hesite em contactar-me, Vou tentar ajudá-lo sempre que puder, Compartilhar é viver ;) . Desfrute de documentos!!!