tailプラグインのformatを書く上で最低限知っておきたいこと
tailプラグインを使う場合に、apacheやsyslogといった既存のフォーマットを使うのではなく、自分でカスタムしたフォーマットを使う際には、最低限知っておきたいと思ったのは以下の2点です。
- エスケープ処理
- 後方参照を伴わないグループ化
エスケープ処理
参考にさせていただいたページはこちらです。
パターンの中のエスケープ処理
http://www.rubylife.jp/regexp/ini/index5.html
以下の記号を使う場合には、エスケープ処理が必要となります。
\ * + . ? { } ( ) [ ] ^ $ - | /
fluentdの公式ページのドキュメントにあるapacheのフォーマットはこちらになります。
ところどころでエスケープ処理をしているのが分かります。
format /^(?
[^ ]*) [^ ]* (? [^ ]*) \[(?
「"」(ダブルクォーテーション)は、上記のエスケープ処理が必要となる記号の中に含まれていませんが、 [^\"] のように書いても問題ないようです。
エディタによっては、"に囲まれた部分の色を変えてくれたりするので、こうしておくと見やすくなります。
"(?
[^\"]*)"
後方参照を伴わないグループ化
自分は正規表現について詳しくなく、これを知らなかったのでかなり混乱しました。
(?: 〜 )
参考にさせていただいたページはこちらです。
正規表現
http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fregexp.html
後方参照を伴わないグループ化の説明は上記のページにある通りですが、要はただ括っているだけです。それだけです。
この エスケープ処理 と 後方参照を伴わないグループ化 の2つがわかると、公式ページにあるapacheとsyslogのフォーマットがわかるようになるかも?