1

logstash フィルター プラグインを使用して処理しているファイルに複数のログ メッセージがあります。次に、フィルタリングされたログがelasticsearchに送信されます。

ログ メッセージには addID というフィールドが 1 つあります。特定の addID が存在するすべてのログ メッセージを削除したいと考えています。これらの特定の addID は、ID.txt ファイルに存在します。

ログ メッセージの addID が ID.txt ファイルに存在するいずれかの addID と一致する場合、そのログ メッセージは削除する必要があります。これを実現するためにルビーフィルターを使用しています。

シナリオ: 問題は、使用しているディクショナリ ファイルが MB 単位の場合、logstash がハングし、手動でパイプラインを停止すると、Bad file descriptor エラーが発生することです。ただし、ファイルを KB 単位で使用すると、すべて正常に動作します。

LS_HEAP_SIZE を 4g に変更してみました。何もうまくいきませんでした。

誰かがこれを達成するのを手伝ってくれますか?

以下は私の設定ファイルです。

input {

    file {
    path => "/Users/jshaw/logs/access_logs.logs
    ignore_older => 0
    }
}

filter {

    grok {

        patterns_dir => ["/Users/jshaw/patterns"]
        match => ["message", "%{TIMESTAMP:Timestamp}+{IP:ClientIP}+{URI:Uri}"]

    }


    kv{
        field_split => "&?"
        include_keys => [ "addID" ]
        allow_duplicate_values => "false"
        add_field => { "IS_BAD_IP" => "false" } 
    }

    if [ClientIP] { 
         ruby{
             code => 'if File.open("/Users/jsaw/mapping/badIP.txt").lines.any?{|line|line.include?(event["ClientIP"])}
              event["IS_BAD_IP"] = "true"
         end'

         }   

         if "true" in [IS_BAD_IP]{
              drop { }
         }     

    }
    output {

         elasticsearch{
              hosts => ["localhost:9200"]

         }
    }
4

0 に答える 0