【问题标题】:Logstash getting values for key from redisLogstash 从 redis 获取键值
【发布时间】:2020-09-24 14:59:33
【问题描述】:

是否可以在过滤器部分使用 logstash 从 redis 获取键的值

例如

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

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

是否可以使用logstash 连接redis 并在logstash 的filter 部分获取用户的关联角色。因为根据角色我必须做其他转换

基本上我想从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{

}

我希望我的问题很清楚。

谢谢

【问题讨论】:

  • 你能发布一个你想要的例子吗?
  • @SufiyanGhori :我添加了一个示例 logstash 配置。如果您需要更多详细信息,请告诉我
  • 嗨@ShivkumarMallesappa,我们能够在旧的logstash 1.4版中使用logstash-filter-redis插件(redis v2.8)做到这一点。但是,升级到 logstash 7.4(redis 5.0)后,我们无法安装 logstash-filter-redis。你能解决你的问题吗?如果是,请分享以提供帮助:-)

标签: logstash logstash-configuration


【解决方案1】:

虽然已经两年了,但写下我的答案,因为它可能对其他人有所帮助。这是在 logstash 1.x 中使用 logstash-filter-redis 实现的,但可能在 logstash 4.x 之后停止了 我有同样的要求,我使用了 ruby​​ 过滤器来完成它。


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
      "
   }
}

【讨论】:

    猜你喜欢
    • 2012-04-26
    • 2015-08-24
    • 1970-01-01
    • 2013-02-05
    • 2020-02-23
    • 2018-05-31
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    相关资源
    最近更新 更多