logstash中怎么删除redis中过期数据?

Feng_Yu 发布于 2015/01/20 21:27
阅读 1K+
收藏 2

想请教一下搭建过logstash朋友们。最近在学习logstash,参考了《logstash book》这本书和网上别人的文档,发现绝大多数使用的是input file -> redis -> output elasticsearch这样的一种架构,redis和elasticsearch在中央日志服务器中。因此我也是这么搭建的。

目前我有两个问题想请教:

问题1: 如何清理redis中过期数据?output redis的配置段中,指定一个key,类型list,最终会将所有的日志推送至redis中一个key,这样的话无法直接用TTL功能清理掉过期的数据啊。怎么才能清理掉过期的日志数据呢?

问题2: 中央日志服务器和产品服务器不在一个局域网中,而redis的认证功能又比较弱,为了防止redis直接暴露在互联网上,我的做法是让redis直接监听127.0.0.1,产品服务器通过ssh tunnel(ssh tunnel@logstash -L 127.0.0.1:6379:127.0.0.1:6379 -f)的方式连接至日志服务器的。但总感觉这种方式批量部署并不方便,最主要的似乎觉得有点笨,想请教下有没有更好的方案?

加载中
0
Feng_Yu
Feng_Yu
自己顶一下
0
Feng_Yu
Feng_Yu
再顶一下,真心求解
0
Feng_Yu
Feng_Yu

http://www.nightbluefruit.com/blog/2014/03/managing-logstash-with-the-redis-client/

google到一个不错的方案,按照日期做key的关键字,然后应该可以加上TTL了

0
红叔
红叔

tcp方式传输:

input {
    tcp {
        port => 8888
        mode => "server"
        ssl_enable => false
    }
}



Feng_Yu
Feng_Yu
回复 @Feng_Yu : 好吧,果然关键时刻还得靠google: https://github.com/elasticsearch/logstash/issues/1650 搜到了这个issue,设置codec之后,it works
Feng_Yu
Feng_Yu
回复 @铂金小金 : 奇怪的是我的output设置tcp之后,在input tcp这里得不到event。我尝试curl 127.0.0.1:8888是有消息的,而且netstat看到的127.0.0.1:8888也是establish,但是就是没有消息推上来
红叔
红叔
回复 @Feng_Yu : 即使是用的redis方案,redis也不是用于存储的,在这里redis是被当做消息服务器使用的被服务端取走后redis里面就没了。
Feng_Yu
Feng_Yu
哦,好主意,把数据直接发送到tcp端口上,这样应该可以不存储了
0
红叔
红叔
中央日志服务器和产品服务器不在一个局域网中:我觉得最好是将网络打通,只需要端口打通就行了
Feng_Yu
Feng_Yu
所以我目前的方案只是做了ssh隧道,将中央服务器的redis端口映射到本地。不过这样的话部署不方便,所以看看有没有其他更好的方案
返回顶部
顶部