Grafanaによる世界地図上でのIPアドレスの視覚化

まぁ, このドキュメントは特別なものです, MySQLテーブルに一連のパブリックIPアドレスがあったためです, それをGrafanaで視覚化したい. 基本的には、私はWordPressを持っていて、外部ホスティングにあるため、データベースを所有していないブログ🙂への訪問について話しています… それを達成するために私が従った手順をあなたに残します, 他のアイデアにもお役に立てれば幸いです.

私が言ったこと, 私はいくつかのパブリックIPを持っているデータベースにテーブルを持っています, このブログのWordPressとは何ですか?, しかしねえ、それはホスティング上にあるので、私はDBに直接アクセスすることはできません, いいえ? 私にはいくつかの選択肢がありました, WordPressには、直接攻撃したり、より手動で攻撃したりできるAPIがあると思いますが、それは私がそこに持っている他のテーブルに役立つ可能性があります.

私が興味を持っているのは、ブログの訪問者のIPを持つテーブルだけです, WordPressに「WP Statistics」プラグインがインストールされている場合は、wp_statistics_visitorの場合はWordPressに保存されます. そのデータをエクスポートする唯一の方法を思いつきました, は… ホスティング自体から (SSHが有効になっている), スクリプトを作成し、スケジュールされたタスクに残す (cron経由) 毎日運行しています (で 23:30). ご覧のとおり、このスクリプトはtxtファイルに残っています (コンマで区切ります) パブリック IP と日付. お任せしますsaca_visitantes.sh:

エコー "IPを選択, LAST_COUNTER wp_statistics_visitor から LAST_COUNTER = CURDATE( );" | mysql -uUSERNAME -pPASSWORD NOMBRE_BD | sed 's/\t/,/g' &アンプ;GTの; ウェブ/bujarra.com/public_html/テンポラリー/direcciones_ip.txt


1分後, 別のマシンでは、そのテキストファイルを取得してローカルのMySQLデータベースにインポートします, そのデータはどこで遊べますか. 遊ぶとはどういう意味ですか? さて、ipstackのおかげで、パブリックIPの位置を取得できます, ipstackは、最大で無料のAPIキーを提供します 10.000 月次相談, だから、それは私たちにとっていくらか役に立つのです, または、私の場合のように、お客様のご要望😉に応じてipstackにできるだけ多くのアカウントを生成することもできます

そこで, を次のスクリプトで置き換えます (これはもっとうまくやれると認めます, しかし、それが私の知識の行き着くところです…) IPに2つの列を追加できます, Latitude フィールドと Longitude フィールド. だから、スクリプトで解釈できるものから, まず、txtファイルをダウンロードします, 次に、それをMySQLにインポートします; そして最終的に私たちが行うことは、このAPIのおかげで、インポートされた各行を変更し、Latitudeフィールドを追加することです & 経度. それがあなたを助ける場合, おまかせておきますimporta_direcciones_ip.sh:

#!/bin/bash
/usr/bin/curl 'http://www.bujarra.com/temp/direcciones_ip.txt' &アンプ;GTの; /ホーム/ヘクター/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 "カウントを選択(*) FROM bujarra_ips WHERE 日付 = CURDATE();" | mysql -h SERVIDOR_MYSQL -uUSER -pPASSWORD NOMBRE_BD' TOT_LINEAS=${TOT_LINEAS:8}
TOT_LINEAS=$(( $TOT_LINEAS - 1 ))

つつ [ $TOT_LINEAS -GT -1 ]
do IP='エコー "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}
  エコー "IPアドレス: $IPアドレス"
  カール "HTTPの://api.ipstack.com/$IP?access_key=NUESTRO_TOKEN&アンプ;アンプ;%20fields=緯度,経度&アンプ;アンプ;フォーマット=2" &アンプ;GTの; direcciones_ip.txt LATITUDE='cat direcciones_ip.txt | grep -o -P '(?&アンプ;中尉;=緯度":).*(?=,"経度)'`
  LONGITUD=`cat direcciones_ip.txt | grep -o -P '(?&アンプ;中尉;=長さ":).*(?=})'`
  echo "更新bujarra_ips SET 緯度=$LATITUD, longitud=$LONGITUD WHERE IP = '$IP';" | mysql -h SERVIDOR_MYSQL -uUSERNAME -pPASSWORD NOMBRE_BDエコー "TOT_LINEAS: $TOT_LINEAS"
  TOT_LINEAS=$(( $TOT_LINEAS - 1 ))
完成です

まぁ, 宛先テーブルの形式が何であるか疑問に思っている人がいる場合に備えて… とてもシンプルです, は 5 田畑, IPアドレス, 日付, 緯度, 長さとタイムスタンプ, テーブルを作成するためのコードが必要な場合は、この作成コードを残します:

テーブル 'bujarra_ips' の作成 (
  「IP」チャー(20) NULL でない,
  'date' CHAR (日付)(20) NULL でない,
  'latitude' CHAR(20) NULL でない,
  'length' CHAR(20) NULL でない,
  'TIMESTAMP' NOT NULL 更新時のデフォルトのCURRENT_TIMESTAMP CURRENT_TIMESTAMP
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;

Grafanaの近くにデータがあるので、それは吸い込まれました, いいえ? MySQL DBに対してコネクタまたはデータソースがすでに作成されており、 ワールドマップパネル, [インストール]タブにあるように、簡単なコマンドでインストールします. これらの前提の後、ダッシュボード内にパネルを作成できるようになります, IPを緯度と経度とともに保存するMySQL DBに接続するデータソースに対してクエリまたはクエリを作成することを選択します. このクエリは私たちにとって有用です:

セレクトUNIX_TIMESTAMP('タイムスタンプ') とてもtime_sec,
  'latitude' は latitude です。,
  「longitude」はlongitudeです。,
  数える(「イップ」) AS 値,
  名前としての 'ip' FROM bujarra_ips WHERE $__timeFilter('タイムスタンプ')
GROUP BY 'ip' ORDER BY 'timestamp' ASC

表示オプションでは、 “位置情報” はテーブルであり、以下では、緯度と経度のデータを提供するフィールドを指定する必要があります, この表のどれが緯度ですか & 経度. 値列をメトリックフィールドとして使用します, あなたが見れば、クエリでそれ, は、IPがテーブルに表示される回数の合計です. 私たちが望むなら, 円のサイズを定義できます, またはで “しきい値オプション” あなたが私たちに行った訪問に応じて、あなたがペイントする色を示してください.

すべてがうまくいった場合、テーブルにある各パブリックIPの位置が地図上に描かれています, これで、日付を操作して、多かれ少なかれデータを視覚化できます. 何か特定のことを前にお伝えした通りの投稿だと理解しています, しかし、少なくとも、SQLなどのデータベースサービスのテーブルに保存したパブリックIPを活用する方法のアイデアを提供するものです, MySQLの, マリアDB… いつものように、おもしろいと思っていただければ幸いです!

おすすめの投稿

著者

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, 私に連絡することを躊躇しないでください, できる限りお手伝いします, シェアリングは生きていること ;) . ドキュメントを楽しむ!!!