是否可以使用过滤器部分中的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{
}
我希望我的查询清楚。
由于
答案 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
"
}
}