我正在尝试使用logstash索引器将数据从redis移动到elasticsearch。
在redis端的输入上,我从logstash输出中为一组日志提供了一个“密钥”。
redis
{
host => "server
port => "7379"
data_type => "list"
key => "aruba"
}
在输入端,我读取输入中的每个键。
input
{
redis
{
host => "localhost"
port => "6379"
data_type => "list"
type => "redis-input"
key => "logstash"
codec => "json"
threads => 32
batch_count => 1000
#timeout => 10
}
redis
{
host => "localhost"
port => "6379"
data_type => "list"
type => "redis-input"
key => "aruba"
codec => "json"
threads => 32
batch_count => 1000
#timeout => 10
}
}
我试图使用logstash中的密钥写入索引。即。
阿鲁巴-2017.24.10。类似的东西,但输出总是进入logstash。我试过了
if[redis.key] == "xyz"
{
elasticsearch {index => "xyz-%{time}"}
}
或者如果[key] ==“xyz”.... 也尝试了
elasticsearch
{
index => "%{key}-%{time}"
}
和elasticsearch {index => “%{redis.key} - %{时间}”}
等。似乎没有任何效果。
答案 0 :(得分:1)
这可能是由于条件中名称的定义不正确。
if [redis.key] == "xyz" {
elasticsearch {index => "xyz-%{time}"}
}
应该是:
if [redis][key] == "xyz" {
elasticsearch {index => "xyz-%{time}"}
}
答案 1 :(得分:1)
虽然@ sysadmin1138写入了访问嵌套字段是通过[field][subfield]
而非[field.subfield]
完成的,但问题是您正在尝试访问不在日志事件中的数据。
在Redis中,您的日志事件具有与之关联的密钥,但这不是事件本身的一部分,仅用于从Redis访问事件。当Logstash从Redis获取事件时,它使用" key"指定它想要的事件,但键不能使它具有弹性。
要自己查看此内容,请尝试使用stdout{codec => "rubydebug"}
作为输出插件运行logstash,它将显示整个日志事件,以便您查看包含的数据。
为了解决问题,每个logstash插件都存在add_field
参数。您可以添加到您的输入:
redis
{
host => "localhost"
port => "6379"
data_type => "list"
type => "redis-input"
key => "aruba"
codec => "json"
threads => 32
batch_count => 1000
add_field => {
"[redis][key]" => "aruba"
}
}
然后更改条件以使用[redis][key]
将使代码正常工作。
(欢呼到RELK筹码)