
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… いつものように、おもしろいと思っていただければ幸いです!