logstashのcodecプラグイン


Logstashは、input|filter|outputのデータストリームではなく、input|decode|filter|encode|outputのデータストリームです.codecはdecode,encodeイベントに使用されます.だからcodecはinputとoutputでよく使われています
よく使われるcodecプラグインにはplain,json,multilineなどがあります
 
plainプラグイン:
主にイベント間で区切られていない純粋なテキストに使用されます.
次の操作を行います.
input {
    stdin {
        codec => plain {}
    }
}
 
例:
logstashイベントoutputからkafkaまでのデフォルトのcodecはjsonです.codecをplainに設定すると、messageデータのほかにホスト名とタイムスタンプのフィールドが生成されます.messageフィールドのみが必要な場合は、次のように構成されます.
output {
    kafka {
       codec => plain {
            format => "%{message}"
        }
    }
}
 
jsonプラグイン:
データがjson形式の場合、このプラグインを直接使用することでfilter/grokの構成を省き、フィルタのcpu消費を低減できます.
次の操作を行います.
input {
    stdin {
        codec => json
    }
}
 
Multilineプラグイン:
複数行データのマージに使用
アプリケーションデバッグログには、イベントに多くのローが印刷される豊富なコンテンツが含まれている場合があります.このログは通常、コマンドライン解析で分析するのは難しい.Multilineプラグインは、このような問題を解決するために使用されます.
例:
tomcatのログcatalina.outにはデバッグのログがたくさんあり、ログはタイムスタンプ形式の「20-Apr-2016 11:29:28.535」で始まるので、以下のように構成できます.
input {
    file {
        path => "/path/to/catalina.out"
        start_position => "beginning"
        type => "tomcat_log"
        codec => multiline {
            pattern => "^%{MONTHDAY}[./-]%{MONTH}[./-]%{YEAR}"
            auto_flush_interval => 10
            negate => true
            what => "previous"
        }
    }
}
patternが正規表現マッチング
negateはブール型であり、trueは否定正規表現を表し、すなわち正規表現に一致しない.falseは正規表現に一致します.デフォルトはfalse
whatは、正則が一致するかどうかで、イベントが前のイベントまたは次のイベントに属することを示します.オプションprevious(前)またはnext(次)の2つの値があります.
auto_flush_intervalは、新しいデータがどのくらいないかを示し、蓄積された複数行のデータがイベントに変換されます.ここの10は10秒を表します
以上の構成は、patternタイムスタンプフォーマットの先頭に一致しない行データが、次の一致するタイムスタンプが現れる前のすべての行の出力が同じイベントに属し、複数行をマージする目的を達成するとともに、10秒待って新しいデータが生成されないことを説明することができる.最後のタイムスタンプフォーマット後のすべてのロー・データが最後のイベントです.