elastic stack 使用redis作为日志缓冲


直接上步骤:

1、首先建立一个配置文件,将output的数据写到redis中,而不是ES了。配置文件示例:

input {
    stdin { }
}
output {
    redis {
        host => "192.168.1.100"  #redis服务器地址
        port => "6379"  #redis服务端口
        db => "5"  #使用redis第五个库,用其他库也可以
        data_type => "list"  #用list类型
        key => "demo"  #存储的key名,可自定义自己喜欢的
    }
}

 

2、指定配置文件然后运行Logstash,然后我们在标准输入中随便写点什么东西,这个时候输入的数据都会提交到redis中。登录redis后使用info命令可以查看keyspace相关信息,可以看到db5的keys数量有了变化,我们切换到db5再来看看

select 5
keys *

 

3、通过keys *命令可以看到有了一个key叫做demo,这个就是配置文件里设置的key名,使用LLEN demo可以看到该key的长度,input如果输入了100行,那么这个key就应该有100行

4、再次建立一个配置文件,这次input是从第一步里的redis里读取数据,然后output到ES中

input {
    redis {
        host => "192.168.1.100"  
        port => "6379"  
        db => "5"  
        data_type => "list"
        key => "demo" 
    }
}
output {
    elasticsearch {
        hosts => ["192.168.0.100:9200"]
        index => "redis-demo-%{+YYYY.MM.dd}"
    }
}

 

5、运行该配置文件后去redis看看,之前的队列因为被output到了ES中,所以队列会消失掉或者是迅速减少长度

下面是一个改造后的配置文件,更符合实际需求

input {
    file {
        path => "/var/log/messages"
        type => "system"
}
output {
    if [type] == "system" {
        redis {
          host => "192.168.1.100"
          port => "6379"
          db => "5" 
          data_type => "list" 
          key => "system"
    }
}