Logstash从redis获取密钥的值

时间:2018-05-16 16:56:16

标签: logstash logstash-configuration

是否可以使用过滤器部分中的logstash从redis获取密钥的值

例如

我有一个包含用户名的日志文件。在logstash的过滤器部分,我能够解析我的日志事件并从中提取用户名

现在我还有一个redis服务器,它以密钥值格式保存用户角色,其中我的用户名是密钥,角色是值

是否可以使用logstash连接到redis并在logstash的过滤器部分中获取用户的关联角色。由于在角色的基础上我必须做其他的转换

基本上我想从logstash中为redis发起get命令。

示例配置:

input {
  file {
    path => "/var/log/http.log"
  }
}
filter {
  grok {
    match => { "message" => "%{IP:client} %{WORD:username} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
  }

  //REDIS GET

  redis{

    //here I want to fire get redis command
    //Example :

    get => username
    target =>user_role
  }
}

output{

}

我希望我的查询清楚。

由于

1 个答案:

答案 0 :(得分:1)

虽然已经两年了,但是写我的答案可能会帮助别人。这是通过在logstash 1.x中使用logstash-filter-redis实现的,但可能在logstash 4.x之后停止了 我有相同的要求,我用红宝石过滤器来完成它。


filter {

 ruby {
     init =>
      "
       require 'redis'
       require 'json'
      "

     code =>
      "
       pidvalue = (event.get('pid'))
       if pidvalue
          redis = Redis.new(url: 'redis://@myredisdb.com:6379') 
          result = redis.get(pidvalue)
       redis.quit
       if result
         resultParsd = JSON.parse(result)
         event.set('esvar1', resultParsd['redisvar1'])
         event.set('esvar2', resultParsd['redisvar2'])
         event.set('esvar3', resultParsd['redisvar3'])   
      end
      end
      "
   }
}