看 redis input 插件的文档: 配置 host 的类型是 string,不支持 list 的。 各位有什么好的解决方案
1
ZhaoUncle 2023-03-20 17:54:39 +08:00
list 类型不是已经支持了么?
|
2
ZhaoUncle 2023-03-20 17:55:17 +08:00
|
4
pedward OP 主要是我想 host 可以配置多个 redis 节点
|
5
ZhaoUncle 2023-03-21 09:03:04 +08:00
貌似无解,官方没有支持。估计需要自己去改 redis.rb 的插件代码,将 string 改成 arrary 了
|
6
coolloves 2023-03-21 09:43:17 +08:00
input 写多个 redis 呢?感觉也是可以满足的吧
|
7
pedward OP 1.虽然 input 写多个 redis 节点 ,可以拿到 redis 集群中数据,但 log 有许多 MOVED ERROR 错误。
2.因为 logstash 的 input redis 插件是没有具备当一个节点返回一个 MOVED ERROR 通知时,自动去找对应的节点里的槽的能力,所以就有好多 MOVED ERROR 。 3.我现在是写了多个 redis 节点。但我是想有没有一个好的做法(没有个 MOVED ERROR 错误并能支持 redis cluster )@coolloves |
8
coolloves 2023-03-21 10:58:26 +08:00
感觉遥遥无期了,已经好几年了,实在需要集群的,就考虑别的队列吧,比如 kafka.
https://github.com/logstash-plugins/logstash-input-redis/issues/10 |
9
julyclyde 2023-03-26 19:43:23 +08:00
你需要一个 proxy
|
11
pedward OP 研究许多天,总结了几个解决方式:
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/predixy 3.在 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 |