V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pedward
V2EX  ›  Elasticsearch

logstash 使用 redis input 插件时,要如何支持 redis cluster?

  •  
  •   pedward · 2023-03-20 16:59:51 +08:00 · 1647 次点击
    这是一个创建于 647 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看 redis input 插件的文档: 配置 host 的类型是 string,不支持 list 的。 各位有什么好的解决方案

    11 条回复    2023-03-28 15:28:12 +08:00
    ZhaoUncle
        1
    ZhaoUncle  
       2023-03-20 17:54:39 +08:00
    list 类型不是已经支持了么?
    pedward
        3
    pedward  
    OP
       2023-03-20 19:40:09 +08:00
    @ZhaoUncle 但是我看到 host 类型是 string 的,难道还有其他设置?
    pedward
        4
    pedward  
    OP
       2023-03-20 19:42:47 +08:00
    主要是我想 host 可以配置多个 redis 节点
    ZhaoUncle
        5
    ZhaoUncle  
       2023-03-21 09:03:04 +08:00
    貌似无解,官方没有支持。估计需要自己去改 redis.rb 的插件代码,将 string 改成 arrary 了
    coolloves
        6
    coolloves  
       2023-03-21 09:43:17 +08:00
    input 写多个 redis 呢?感觉也是可以满足的吧
    pedward
        7
    pedward  
    OP
       2023-03-21 10:06:06 +08:00
    1.虽然 input 写多个 redis 节点 ,可以拿到 redis 集群中数据,但 log 有许多 MOVED ERROR 错误。
    2.因为 logstash 的 input redis 插件是没有具备当一个节点返回一个 MOVED ERROR 通知时,自动去找对应的节点里的槽的能力,所以就有好多 MOVED ERROR 。
    3.我现在是写了多个 redis 节点。但我是想有没有一个好的做法(没有个 MOVED ERROR 错误并能支持 redis cluster )@coolloves
    coolloves
        8
    coolloves  
       2023-03-21 10:58:26 +08:00
    感觉遥遥无期了,已经好几年了,实在需要集群的,就考虑别的队列吧,比如 kafka.
    https://github.com/logstash-plugins/logstash-input-redis/issues/10
    julyclyde
        9
    julyclyde  
       2023-03-26 19:43:23 +08:00
    你需要一个 proxy
    pedward
        10
    pedward  
    OP
       2023-03-27 09:27:47 +08:00
    有什么具体的方案
    @julyclyde
    pedward
        11
    pedward  
    OP
       2023-03-28 15:28:12 +08:00
    研究许多天,总结了几个解决方式:
    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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1396 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 17:28 · PVG 01:28 · LAX 09:28 · JFK 12:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.