Elasticsearch(60) — GeoIP 檔案的放置位置,驗證 GeoIP 功能
有遇到客戶問說為什麼他們的 GeoIP 的解析是以前的 GeoIP,所以就去找了 Elasticsearch, Logstash 的 GeoIP 檔案的放置位置
Elasticsearch(60) — GeoIP 檔案的放置位置,驗證 GeoIP 功能

有遇到客戶問說為什麼他們的 GeoIP 的解析是以前的 GeoIP,所以就去找了 Elasticsearch, Logstash 的 GeoIP 檔案的放置位置
這篇會順便把 Logstash GeoIP 的測試檔給寫上來,也會寫一下 Logstash 的設定,但就算在 yml 中進行設定看起來也不會自動下載就是了
- Elasticsearch
首先如果 ES 有對外的話,理論上會自動下載 mmdb,使用 find 的指令查找會看到有 2 個地方有這個檔案
但在 /usr/share 下的檔案是 2018 的,所以應該不是,在 /tmp 下的才是,不過把東西載到 /tmp 也是蠻詭異的,實際確認更新日期也是當天的日期

在 ES 上用 find 查找只有 2 個地方有 mmdb

在 /tmp 下的檔案是近期更新的,會是對的檔案
然後 ES 有對外的話不用額外設定,但因為預設是會自動抓取,所以若是封閉環境的話,要記得用 API 把這個功能關掉,否則會持續噴錯
然後下方是使用 Kibana 測試 elasticsearch 的結果,直接貼 API 跟圖
# 建立 geoip pipeline,檢驗 ES 的 geolite 套件
PUT _ingest/pipeline/geoip-pipeline
{
"description": "Add geoip info based on ip field",
"processors": [
{
"geoip": {
"field": "ip",
"target_field": "geoip",
"database_file": "GeoLite2-City.mmdb"
}
}
]
}
# 建立測試 index
PUT test-index
# 建立 document,並使用該 geo pipeline
PUT test-index/_doc/1?pipeline=geoip-pipeline
{
"ip": "8.8.8.8"
}
# 取得 document 資訊
GET test-index/_doc/1
# 刪除測試用 index
DELETE test-index

在 Devtool 中,測試 API 是成功的,可以看到有對應的 Geo Location
- Logstash
如果在 Logstash 中下 find,會多在 logstash 的 module 中看到,但這個 GeoIP 檔案的更新日期很舊,所以應該不是參照它

所以就寫了一個 geoip-test.conf,想說先看看會不會直接噴錯,這個用測試的指令去跑,然後發現跑的起來,當中的訊息還有 geoip 檔案的放置位置
# geoip-test.conf
input {
stdin { }
}
filter {
mutate {
add_field => { "ip" => "%{message}" }
}
geoip {
source => "ip"
target => "geoip"
add_field => { "[debug]" => "geoip_success" }
}
}
output {
stdout { codec => rubydebug }
}
寫好之後,用以下指令進行測試
# 用 bin 下的 logstash,帶 -f 去啟動某個 .conf 檔做測試
/home/elastic/logstash/bin/logstash -f /home/elastic/logstash/config/conf.d/geoip-test.conf
在啟動時會看到有 mmdb 的檔案了,但在前面的 find 並沒有看到該路徑下的 mmdb

有寫 geoip database has been updated
然後就可以輸入 IP 進行測試了,因為有下載,所以理論上會成功

去檔案的下載路徑下看,的確有檔案存在,且是剛剛下載的

之後看了一下官網文件,在 yml 中可以寫入更新 mmdb 的網址及頻率,若是不設定則不會更新
但實際上設定之後,也沒有依時間進行更新,所以不太確定是不是設定爽的,但若是後續要用,應該會跑這個 geoip-test.conf 來進行 mmdb 的更新
# logstash.yml 中關於 geoip 的設定
# 是否啟用 geoip download
xpack.geoip.downloader.enabled: true
# 下載 geoip.mmdb 的下載點,這裡是寫 elastic 的預設參數
xpack.geoip.downloader.endpoint: "https://geoip.elastic.co/v1/database"
# 多久更新一次,預設是 24 小時,我這邊縮短成 6 小時,但也沒有用...
xpack.geoip.downloader.poll.interval: 6h
反正大致上是這樣,有空才會再研究 logstash 的 geoip 的設定是不是有寫錯的地方,不過是照著官網寫的,應該是沒有錯才對
又被客戶的問題提高了一點實力,雖然看文件真的還是頭挺痛的,而且 Elasticsearch 的官網都寫的超級鳥,設定完了可能也不作用,真的是蠻多 bug 的
參考資料:
- ChatGPT
메타데이터
- post_id
- 27dfb080e5a9
- slug
- elasticsearch-60-geoip-檔案的放置位置-驗證-geoip-功能-27dfb080e5a9
- url
- https://medium.com/@King610160/elasticsearch-60-geoip-%E6%AA%94%E6%A1%88%E7%9A%84%E6%94%BE%E7%BD%AE%E4%BD%8D%E7%BD%AE-%E9%A9%97%E8%AD%89-geoip-%E5%8A%9F%E8%83%BD-27dfb080e5a9
- canonical_url
- https://medium.com/@King610160/elasticsearch-60-geoip-%E6%AA%94%E6%A1%88%E7%9A%84%E6%94%BE%E7%BD%AE%E4%BD%8D%E7%BD%AE-%E9%A9%97%E8%AD%89-geoip-%E5%8A%9F%E8%83%BD-27dfb080e5a9
- author_url
- https://medium.com/@King610160
- status
- ok
- fetched_at
- 2026-06-25 07:00:49