たごもりすメモ

コードとかその他の話とか。

Fluentdでparser用の正規表現を書く・試す

こんなエントリを目にしたので、なんか書こうかなと思った。

fluentdのformat(正規表現)の作り方について試行錯誤中 #fluentd - Glide Note - グライドノート

Fluentd の in_tail や拙作 fluent-plugin-parser ではログのparse用の正規表現を指定することになるが、確かにこれを設定してログを流して試して直して、というのはいささか効率が悪い。ので、簡単に試す方法を書いてみる。

なお irb を使う手順。ruby 1.9系がインストールされていればたぶん入っているけれど td-agent だとちょっとどうだっけ。適当にがんばっていただきたい。

とりあえず以下のようなログをparseしたいとする。

Jul 16 00:45:47 BJA login[58879]: USER_PROCESS: 58879 ttys002

irbを起動するが、td-agent の場合はまずLOAD_PATHにfluentdのライブラリを加える必要がある。rvm(やrubiesなど)で gem install fluentd している場合は最初の LOAD_PATH の手当ては不要。

事前にlibのパスを確認する必要がある。 /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.XX/lib あたりにあるはず。

$ irb
:001 > $LOAD_PATH.push /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/fluentd-0.10.xx/lib

そしたら以下のようにして確認する。

require 'fluent/config'
require 'fluent/parser'
require 'fluent/engine'

log = 'Jul 16 00:45:47 BJA login[58879]: USER_PROCESS: 58879 ttys002'

regexp = /^(?<date>\w{3} \d\d (\d{2}:){2}\d{2}) (?<host>\w+) (?<role>\w+)\[(?<pid>\d+)\]: (?<event>\w+): (?<info>\d+) (?<tty>.+)$/

parser = Fluent::TextParser::RegexpParser.new(regexp)

parser.call(log)
# => [1342367563, {"date"=>"Jul 16 00:45:47", "host"=>"BJA", "role"=>"login", "pid"=>"58879",
#  "event"=>"USER_PROCESS", "info"=>"58879", "ttyname"=>"ttys002"}] 

うまくいかなければ regexp を直して parser にセットしなおして parser.call(log) しなおす、というのを繰り返せばいい。

なお in_tail などの日時parseも試したければ以下のようにする。日時としてparseするフィールドを 'time' にしておくのがポイント。

require 'fluent/config'
require 'fluent/parser'
require 'fluent/engine'

require 'time'

log = 'Jul 16 00:45:47 BJA login[58879]: USER_PROCESS: 58879 ttys002'

regexp = /^(?<time>\w{3} \d\d (\d{2}:){2}\d{2}) (?<host>\w+) (?<role>\w+)\[(?<pid>\d+)\]: (?<event>\w+): (?<info>\d+) (?<tty>.+)$/

parser = Fluent::TextParser::RegexpParser.new(regexp)

parser.time_format = '%b %d %T'

parser.call(log)
# => [1342367147, {"host"=>"BJA", "role"=>"login", "pid"=>"58879", "event"=>"USER_PROCESS", "info"=>"58879", "ttyname"=>"ttys002"}] 

Time.at(1342367147)
# => '2012-07-16 00:45:47 +0900'

まあこんな感じじゃないすかね。

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy