
Visualiser les adresses IP sur une carte du monde avec Grafana
Puits, Ce document est quelque chose de particulier, puisqu’il avait une série d’adresses IP publiques dans une table MySQL, que j’aimerais le visualiser dans Grafana. En gros, je parle des visites sur le blog 🙂, j’ai un WordPress et je n’ai pas la base de données en ma possession puisqu’elle est sur un hébergement externe… Je vous laisse les étapes que j’ai suivies pour y parvenir, J’espère que cela pourra être utile pour d’autres idées.
Ce que j’ai dit, J’ai une table dans une base de données où j’ai des adresses IP publiques, quel est le WordPress de ce blog ?, mais bon, je n’ai pas d’accès direct à la DB puisqu’elle est sur un hébergement, Non? J’avais plusieurs options, J’imagine que WordPress a une API que je peux attaquer directement ou le faire de manière plus manuelle mais qui peut être utile pour d’autres tables que j’ai là-bas.
Ce qui m’intéresse, c’est seulement un tableau qui a les IP des visiteurs du blog, celui dans WordPress est stocké si dans wp_statistics_visitor si nous avons le plugin 'WP Statistics' installé dans WordPress. La seule façon à laquelle je pouvais penser pour exporter ces données, Était… de l’hébergement lui-même (a SSH activé), Créez un script et laissez-le dans une tâche planifiée (via cron) qui circule tous les jours (sur le 23:30). Ce script, comme vous pouvez le voir, part dans un fichier txt (séparés par des virgules) l’adresse IP publique et la date. Je vous laisse saca_visitantes.sh:
ÉCHO "SÉLECTIONNEZ IP, LAST_COUNTER DE wp_statistics_visitor où LAST_COUNTER = CURDATE( );" | mysql -uUSERNAME -pPASSWORD NOMBRE_BD | sed 's/\t/,/g' &ÈRE;Gt; web/bujarra.com/public_html/temp/direcciones_ip.txt
Une minute plus tard, sur une autre machine, ce que je fais est de récupérer ce fichier texte et de l’importer dans une base de données MySQL locale, Où puis-je jouer avec ces données ?. Qu’est-ce que j’entends par jouer? Eh bien, grâce à ipstack, nous pouvons obtenir l’emplacement des adresses IP publiques, ipstack nous donne une CLÉ API gratuite de jusqu’à 10.000 Consultations mensuelles, Il nous est donc utile, Ou comme c’est mon cas, on peut générer autant de comptes dans ipstack pour répondre à votre demande 😉
Donc, avec le script suivant (Ce qui, je l’admets, peut être mieux fait, Mais c’est ce que je sais…) nous pouvons ajouter deux colonnes supplémentaires à l’IP, les champs de latitude et de longitude. Donc, d’après ce que nous pouvons interpréter dans le script, Tout d’abord, nous téléchargeons le fichier txt, puis nous l’importons dans MySQL; et au final ce que nous allons faire, c’est grâce à cette API modifier chaque ligne importée et ajouter les champs Latitude & Longitude. Au cas où cela vous aiderait, Je vous laisse importa_direcciones_ip.sh:
#!/bin/bash /usr/bin/curl 'http://www.bujarra.com/temp/direcciones_ip.txt' &ÈRE;Gt; /Accueil/Hector/bujarra_direcciones_ip.txt mysqlimport --ignore-lines=1 --fields-terminated-by=, --verbeux --local -uUSER -pPASSWORD -h SERVIDOR_MYSQL NOMBRE_BD bujarra_direcciones_ip.txt TOT_LINEAS='echo "SÉLECTIONNEZ COMPTER(*) DE bujarra_ips OÙ date = CURDATE();" | mysql -h SERVIDOR_MYSQL -uUSER -pPASSWORD NOMBRE_BD' TOT_LINEAS=${TOT_LINEAS:8} TOT_LINEAS=$(( $TOT_LINEAS - 1 )) pendant que [ $TOT_LINEAS -gt -1 ] do IP='echo "SELECT ip FROM bujarra_ips WHERE date = CURDATE() order BY IP desc LIMIT $TOT_LINES,1;" | mysql -h SERVIDOR_MYSQL -uUSER -pPASSWORD NOMBRE_BD' IP=${IP:3} ÉCHO "IP: $IP" friser "HTTP://api.ipstack.com/$IP?access_key=NUESTRO_TOKEN&ÈRE;AMPÈRE;%20fields=latitude,Longitude&ÈRE;AMPÈRE;format=2" &ÈRE;Gt; direcciones_ip.txt LATITUDE='cat direcciones_ip.txt | grep -o -P '(?&ÈRE;Lt;=latitude":).*(?=,"Longitude)'` LONGITUD=`cat direcciones_ip.txt | grep -o -P '(?&ÈRE;Lt;=longueur":).*(?=})'` echo "METTRE À JOUR bujarra_ips DÉFINIR 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 )) Fait
Puits, Au cas où quelqu’un se demanderait quel format a la table de destination… C’est très simple, A 5 Champs, IP, date, latitude, Longueur et horodatage, Si vous avez besoin du code pour créer la table, je vous laisse ce code de création:
CRÉER LA TABLE 'bujarra_ips' (
CARACTÈRE 'IP'(20) NON NUL,
CHAR 'date'(20) NON NUL,
CHAR 'latitude'(20) NON NUL,
'longueur' CHAR(20) NON NUL,
'timestamp' TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP LORS DE LA MISE À JOUR CURRENT_TIMESTAMP
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;
Maintenant que nous avons les données près de notre Grafana, nous les avons aspirées, Non? Nous aurons déjà un connecteur ou une source de données créée contre la base de données MySQL et nous devons également avoir le Panneau Carte du monde, qui, comme nous le voyons dans l’onglet Installation, nous l’installons avec une simple commande. Après ces prémisses, nous pourrons créer un Panel au sein d’un Dashboard, nous choisirons de faire une requête ou une requête sur la DataSource qui se connecte à la base de données MySQL où nous stockons les adresses IP avec leur latitude et longitude. Cette requête peut nous être utile:
SÉLECTIONNEZ UNIX_TIMESTAMP(« Horodatage ») Alors time_sec, 'latitude' comme latitude, 'longitude' comme longitude, COMPTER('IP') Valeur AS, 'ip' comme nom DE bujarra_ips OÙ $__timeFilter(« Horodatage ») GROUP BY 'ip' ORDER BY 'timestamp' ASC
Dans les options d’affichage, nous indiquerons que le “Données de localisation” est table et ci-dessous, nous devons indiquer les champs qui fourniront les données de latitude et de longitude, qui, dans ce tableau, sont des latitudes & Longitude. Nous prendrons la colonne de valeur comme champ de métrique, que dans la requête si vous regardez, est la somme des fois où l’adresse IP apparaît dans le tableau. Si nous voulons, Nous pouvons définir la taille du cercle, ou en “Options de seuil” Indiquez de quelle couleur vous allez peindre en fonction des visites que vous nous avez effectuées.
Si tout s’est bien passé pour vous, il aura peint sur une carte la position de chaque IP publique que vous avez dans le tableau, Vous pouvez maintenant jouer avec les dates pour visualiser plus ou moins de données. Je comprends qu’il s’agit d’un post comme je vous l’ai dit avant quelque chose de particulier, mais au moins c’est pour vous donner des idées sur la façon d’exploiter les IP publiques que nous avons stockées dans les tables d’un service de base de données tel que SQL, MySQL, MariaDB… Comme toujours, j’espère que vous l’avez trouvé intéressant!