研究许多天,总结了几个解决方式:
1.还是写多个 redis input 的节点,将 MOVED 的日志过滤,要改动 log4j2.properties 。好处:改动最少,缺点:真正的问题没有解决
log4j2.properties 的具体配置
appender.rolling.filter.threshold.type = ThresholdFilter
appender.rolling.filter.threshold.level = warn
appender.rolling.filter.moved.type = RegexFilter
appender.rolling.filter.moved.regex = .*MOVED.*
appender.rolling.filter.moved.onMatch = DENY
appender.rolling.filter.moved.onMismatch = ACCEPT
2.加一个 redis 代理,我是用 predixy 。在 input 只写 redis 代理的地址,logstash 可以正常获取数据,但是我对 predixy 还是有保留,主要当其中一个 redis 节点挂了,代理会有问题,有部分数据拿不到。predixy 地址:
https://github.com/joyieldInc/predixy3.在 logstash 和 redis cluster 之间加多一个程序,其实主要作用跟 redis 代理差不多。logstash 通过 http input 从程序拿 redis cluster 的数据,缺点:就是太麻烦了,会做多工作
4.自己写一个 logstash 的插件,支持 redis cluster,但前提需要会 ruby ,这个是难度最高的。官网地址:
https://www.elastic.co/guide/en/logstash/current/input-new-plugin.html