之前發過
一篇有關如何在graylog利用ip在地圖上顯示的方法
本來是有使用
但自從上次nas 掛二個HD GG後
graylog重裝 這個功能就沒有再加上去了
直到最近有人提到說想看類似的圖
才想說再起起來
沒想到由於目前收的log筆數太多
功能起起來後 因為會去解析所有進到graylog的ip
系統資源無法負荷
所以只好關掉再想別的辦法
剛好最近玩的grafana有個
worldmap pannel 的plugin
想說來試看看
這個plugin支援滿多的datasource
Graphite
InfluxDB
OpenTSDB
Prometheus
MySQL
Postgres
MSSQL
Elasticsearch
想說就拿influxDB來用
首先每五分鐘到graylog取回這段時間被block的ip
取回後
再利用 geoiplookup 來把ip的地理位置取出來
在centos 7 上安裝
yum install GeoIP
裝好後就可以使用了
語法是
geoiplookup 8.8.8.8
GeoIP Country Edition: US, United States
我只想用國家來畫 所以以上資的資料就夠了
有二個原因
因為worldmap panel 直接支援用國碼來畫圖
再來就是如果要用座標來畫 一天的資料可能就會把HD撐爆了
接下來就是把以上取得的資料塞進influxdb
以下是程式碼
/bin/curl -u username:passwd 'http://10.10.10.10:9000/api/search/universal/keyword/export?query=source%3A10.10.10.20&keyword=last%205%20mins&batch_size=500&fields=message' > /tmp/5min_ipp
cat /tmp/5min_ipp |grep '\[' |awk '{print $2}'|cut -d ']' -f 1|cut -d '[' -f 2 > /tmp/5min_ip
rm /tmp/country
for i in `cat /tmp/5min_ip`
do
country=`/bin/geoiplookup $i|awk '{print $4}'|cut -c 1-2`
echo $country >> /tmp/country
done
cat /tmp/country|sort|uniq -c > /tmp/attack_data
while read line
do
# echo $line
/bin/influx -database "attacker" -execute "insert attack,name=`echo $line|awk '{print $2}'` value=`echo $line|awk '{print $1}'`"
done < /tmp/attack_data
attack 這個 Measurement只放了二個資料
國碼 這五分鐘的攻擊次數
如下
1558574202593759971 SG 9
1558574203886084275 SK 1
1558574205156245342 TH 3
1558574206520742362 TR 4
最後就是畫圖了 這也是搞最久的地方
設定influxdb 的datasource
在dashbord上加上world map panel
再來設定相關資料
紅色框一定要依据定義的field設對 不然圖就是出不來
location data 選擇country 以符合上面說明資料
如果設定正常 就會看到以下的圖了
以上的程式在每五分鐘執行時會使用大量的cpu資源
請特別注意
另外可能要依据需求定時去清理influxdb的資料 以免占用太多HD空間
https://blog.csdn.net/Py_Wang/article/details/79186634