使用Redis密钥作为Elasticsearch索引名称

时间:2017-03-24 18:53:21

标签: elasticsearch redis logstash

我正在尝试使用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} - %{时间}”}

等。似乎没有任何效果。

2 个答案:

答案 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筹码)