2017-03-24 8 views
1

データをredisからelasticsearchに移動するためにlogstashインデクサを使用しようとしています。RedisキーをElasticsearchインデックス名として使用する

redisへの入力の最後に、logstash出力から1組のログに 'キー'を与えます。

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で使用しようとしています。すなわち

aruba-2017.24.10。そのようなものですが、出力は常にlogstashに行きます。 %{時間 - 私は も

elasticsearch 
{ 
    index => "%{key}-%{time}" 
} 

とelasticsearch {インデックス=>「%{redis.key}を試みた....

if[redis.key] == "xyz" 
{ 
    elasticsearch {index => "xyz-%{time}"} 
} 

場合、または[キー] == "XYZ" を試み}」}

他どれも動作していないようです。

答えて

1

@ sysadmin1138は、ネストされたフィールドへのアクセスあなたの問題は、あなたのログにないデータにアクセスしようとしているということです[field][subfield]ではなく[field.subfield]を介して行われていることを書きですがイベント。

レディスでは、ログイベントには関連するキーがありますが、これはイベント自体には含まれず、単にレディスのイベントにアクセスするために使用されます。 LogstashがRedisからイベントをフェッチするとき、その「キー」を使用してどのイベントが必要かを指定しますが、キーでは弾力を持たせません。 これを自分で確認するには、logstashをstdout{codec => "rubydebug"}と出力プラグインとして実行してみてください。これにより、ログイベント全体を事前に確認して、どのデータが含まれているかを確認することができます。

あなたのレスキューには、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]が働いて、あなたのコードを残して使用するように条件を変更します。

(回答するには乾杯)

+0

それは働いた。ありがとう! – ScipioAfricanus

1

これは、条件付きの名前の定義が誤っている可能性があります。

if [redis.key] == "xyz" { 
    elasticsearch {index => "xyz-%{time}"} 
} 

は次のようになります。

if [redis][key] == "xyz" { 
    elasticsearch {index => "xyz-%{time}"} 
} 
+0

ウィルバーンウェルとあなたの答えはうまくいきました! – ScipioAfricanus

関連する問題