Fluent-BitのParserでログフォーマットを識別して適切なログ出力に整形する
Parserを使用していない場合
出力されたログは適切にParseされていない。
1 | fluent-bit_1 | [0] 4fb66927922a: [1621578165.000000000, {"container_id"=>"4fb66927922a06fd696ed9ee5cc2c5c287592ab13786b9fc9e5704ac3b8077ea", "container_name"=>"/stdout_web2_1", "source"=>"stdout", "log"=>"172.24.0.1 - - [21/May/2021:06:22:45 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36" "-""}] |
既定のnginxのParserを使う
ParserでFILTERでParserを指定する方法が記載されている。
1 | [SERVICE] |
これを参考にFILTERを利用する設定を定義する。
parsers.confでは様々なParserが定義されており、今回はnginxを使用する。
1 | [PARSER] |
Parsers_File parsers.conf
を設定することで、この既定のParserが利用可能になる。
1 | [SERVICE] |
Name parserのFILTER定義を作成する。
対象となるのは現在logで出力されている部分だ。
1 | "log"=>"172.24.0.1 - - [21/May/2021:06:22:48 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36" "-"" |
Parseされたenginxアクセスログ
nginxのログ部分はParseされて出力された。
1 | web1_1 | 172.23.0.1 - - [21/May/2021:07:35:34 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36" "-" |
Parse対象以外の項目を残す
しかし,元々出力されえていたcontainer_idなどが消えてしまっている。
そこでReserve_Data On
を使用して元の項目を残す。ただし、Prase対象のlogは必要ないので、Preserve_Key Off
で残さないようにする。
1 | [SERVICE] |
結果は以下。期待通りの項目が出力されている。
1 | web1_1 | 172.23.0.1 - - [21/May/2021:07:47:03 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36" "-" |