-
Notifications
You must be signed in to change notification settings - Fork 181
geoip 解析失败 #24
Comments
http://dev.maxmind.com/geoip/geoip2/geolite2/ 你用的哪个版本? 完全的配置和报错发我一下吧. |
使用 maxmind 的 City 库就正常,但是使用 Country 库就失败。 hangout 版本:hangout-0.1.8.2-ES2.3.5 相关配置如下:
Debug 日志如下:
|
@childe 你好,我想询问一下关于这个 issue 现在的状况 |
@keefeleen 抱歉没注意到. 是我之前不知道对于country级别的数据库, 还有专门的country级别的API. 修复后的我已经上传到master上面了. 但当前是支持5.0ES的版本了. 你可能需要自己把master分支的filter/Geoip2.java代码考到你需要的版本下, 然后自己打包了. 如果你不知道怎么弄, 或者有什么问题, 联系我, 我打包好发你吧. |
@childe 编译之后,country 级别数据库目前没有问题,但是用我们公司自己编译的数据库就有问题。 附件中是一个编译好用于测试的数据库(其中的 IP 列表比较少)。但是测试时 logstash 无报错(只不过因为数据问题解析出来字段 location 字段为空),如果使用 hangout 则仍然出现 geofail 的错误。 麻烦再看一下这个问题。谢谢! |
@keefeleen logstash应该是一个第三方的插件吧,里面用到的读取mmdb库的ruby代码也是mmdb外的第三方作者写的, 根据IP定位到数据之后, 返回一个hash, 没有问题. 我这里用的是mmdb官方提供的库, https://github.com/maxmind/GeoIP2-java 调用的CountryResponse country(InetAddress ipAddress)和CityResponse city(InetAddress ipAddress) 这两个方法, 他们会先判断mmdb数据库中的metadata里面的database_type(具体说明参见https://maxmind.github.io/MaxMind-DB/, 你们应该也是按这个文档来制作的吧?)是不是包含 Country 或者 City. 看起来你们制作的库不包含, 所以报错了. 就把这个字符串改一下好了. 比如叫 "keefeleen Country db" |
注释掉了 GeoIP2-java 中对应进行判断的代码,重新编译后目前看来没有问题。感觉这一个判断流程比较鸡肋。 感谢你的热心回复! |
source: client_ip
target: geoip
city_name: false
database: '/home/zcola/GeoLite2-Country.mmdb'
#database: '/home/elk/running/logstash/vendor/nxxxe.mmdb'
DEBUG com.ctrip.ops.sysdev.filters.GeoIP2 pool-2-thread-2 java.lang.UnsupportedOperationException: Invalid attempt to open a GeoLite2-Country database using the city method
使用自编的 mmdb 和免费的GeoLite2-Country.mmdb 都不行,logstash 自己写geoip2的插件可以
The text was updated successfully, but these errors were encountered: