
使用 Grafana 在世界地图上可视化 IP 地址
井, 这份文件很特别, 因为它在 MySQL 表中有一系列公有 IP 地址, 我想在 Grafana 中可视化它. 基本上,我说的是我对博客🙂的访问,我有一个 WordPress,但我没有数据库,因为它位于外部主机上… 我把我为实现它而遵循的步骤留给你, 我希望它对其他想法有用.
我说了什么, 我在数据库中有一个表,其中有一些公有 IP, 这个博客的 WordPress 是什么?, 但是,嘿,我无法直接访问数据库,因为它位于主机上, 不? 我有几个选择, 我想 WordPress 有一些 API,我可以直接攻击或以更手动的方式进行攻击,但这对我拥有的其他表格可能很有用.
我感兴趣的只是一个表格,上面有博客访问者的 IP, 如果我们在 WordPress 中安装了“WP Statistics”插件,则存储在 WordPress 中wp_statistics_visitor. 我能想到的唯一方法来导出这些数据, 是… 从托管本身 (已启用 SSH), 创建脚本并将其保留在计划任务中 (通过 cron) 每天运行 (在 23:30). 正如您在 txt 文件中看到的那样,此脚本 (用逗号分隔) 公网 IP 和日期. 我把你留saca_visitantes.sh:
回波 "选择 IP, LAST_COUNTER FROM wp_statistics_visitor 其中 LAST_COUNTER = CURDATE( );" | mysql -uUSERNAME -pPASSWORD NOMBRE_BD | sed 's/\t/,/g' &放大 器;燃气轮机; 网页/bujarra.com/public_html/临时/direcciones_ip.txt
一分钟后, 在另一台机器上,我所做的是获取该文本文件并将其导入到本地 MySQL 数据库中, 我可以在哪里使用这些数据. 我所说的玩是什么意思? 好吧,多亏了 ipstack,我们可以获取公共 IP 的位置, ipstack 为我们提供了一个免费的 API KEY 10.000 每月咨询, 所以它对我们有些用处, 或者就像我的情况一样,我们可以在 ipstack 中生成尽可能多的帐户来满足您的需求 😉
因此, 使用以下脚本 (我承认可以做得更好, 但这就是我的知识所在…) 我们可以在 IP 中添加两个额外的列, Latitude 和 Longitude 字段. 所以从我们可以在脚本中解释的内容来看, 首先我们下载 txt 文件, 然后我们将其导入 MySQL; 最后,我们要做的是借助这个 API,修改每个导入的行并添加 Latitude 字段 & 经度. 如果它对您有所帮助, 我就把你留importa_direcciones_ip.sh:
#!/bin/bash /usr/bin/curl 'http://www.bujarra.com/temp/direcciones_ip.txt' &放大 器;燃气轮机; /首页/赫克托/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 "选择计数(*) 从bujarra_ips WHERE DATE = 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='echo "从bujarra_ips中选择 IP,其中日期 = CURDATE() order BY IP 描述 LIMIT $TOT_LINES,1;" | mysql -h SERVIDOR_MYSQL -uUSER -pPASSWORD NOMBRE_BD' IP=${知识产权:3} 回波 "知识产权: $知识产权" 卷曲 "HTTP 协议://api.ipstack.com/$IP?access_key=NUESTRO_TOKEN&放大 器;放大 器;%20fields=纬度,经度&放大 器;放大 器;格式 = 2" &放大 器;燃气轮机; direcciones_ip.txt LATITUDE='cat direcciones_ip.txt | grep -o -P '(?&放大 器;中尉;=纬度":).*(?=,"经度)'` LONGITUD=`cat direcciones_ip.txt | grep -o -P '(?&放大 器;中尉;=长度":).*(?=})'` echo "更新 bujarra_ips 设置 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 )) 做
井, 如果有人想知道目标表的格式… 这很简单, 具有 5 领域, 知识产权, 日期, 纬度, 长度和时间戳, 如果您需要代码来创建表,我给您留下这个创建代码:
创建表 'bujarra_ips' (
'IP' 字符(20) 非 NULL,
'date' 字符(20) 非 NULL,
'latitude' 字符(20) 非 NULL,
'length' 字符(20) 非 NULL,
'timestamp' TIMESTAMP NOT NULL: 更新时默认CURRENT_TIMESTAMP CURRENT_TIMESTAMP
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;
现在我们在 Grafana 附近有了数据,我们把它吸了, 不? 我们已经针对 MySQL 数据库创建了一个连接器或数据源,并且我们还必须具有 “世界地图”面板, 正如我们在 Installation 选项卡中看到的那样,我们使用一个简单的命令来安装. 完成这些前提后,我们将能够在 Dashboard 中创建一个 Panel, 我们将选择对连接到 MySQL 数据库的 DataSource 进行 Query 或 Query,我们在其中存储 IP 及其纬度和经度. 此 Query 对我们可能很有用:
选择 UNIX_TIMESTAMP('时间戳') 所以time_sec, 'latitude' 作为纬度, 'longitude' 作为 longitude, 计数('IP') AS 值, 'ip' 作为名称 FROM bujarra_ips 其中 $__timeFilter('时间戳') 分组依据 'ip' 排序依据 'timestamp' ASC
在 Display options (显示选项) 中,我们将指示 “位置数据” 是表,下面我们必须指示将提供纬度和经度数据的字段, 此表中的纬度 & 经度. 我们将 value 列作为 metric 字段, 如果你看一下 Query, 是 IP 在表中出现的次数之和. 如果我们想要, 我们可以定义圆的大小, 或 “阈值选项” 根据您对我们的访问,指明您将绘制的颜色.
如果一切顺利,它将在地图上绘制您在表中每个公共 IP 的位置, 现在,您可以使用日期来可视化更多或更少的数据. 我知道这是我之前告诉你的一篇帖子, 但至少它为您提供有关如何利用我们存储在数据库服务(如 SQL)表中的公共 IP 的想法, MySQL (MySQL的, MariaDB的… 一如既往,我希望您觉得它很有趣!