@
iian 简单写了个,测试了下可以用,但只能读本地文件确实没直接实时读 redis 方便。
```
input {
file {
path => "D:/logstash-test/input.txt"
}
}
filter {
ruby {
init => '
# 引入 json ,方便操作
require "json"
# 从本地文件中读取,解析后初始化一个 hash ,key 为 userId ,value 为部门 id
@@userDepMap = Hash.new
File.open("D:/logstash-test/filter.txt", "r").each_line do |line|
userDepArray = line.split(",")
@@userDepMap[userDepArray[0]] = userDepArray[1]
end
'
code => '
# 从 message 中拿到消息本身,转 json
msg = event.get("message")
msgJson = JSON.parse(msg)
# 从消息中拿到 userId ,从 hash 中找到对应的部门
user = msgJson["user"].to_s
dep = @@userDepMap[user]
# 将部门保存到消息 json 中
msgJson["dep"] = dep
# 将最新的 json 转字符串,重新设置回 event 中
event.set("message", JSON.generate(msgJson))
'
}
}
output {
stdout {
}
file {
path => "D:/logstash-test/output.txt"
}
}
```