fluent-plugin-dbi 書いた

fluentd で DB に書き込むために DBI を使って PostgreSQL でも MySQL にでも入れられるようにしてみました。PostgreSQL なら dbd-pg を、MySQL なら dbd-mysql が必要です。
https://github.com/yteraoka/fluent-plugin-dbi


  type dbi
  #dsn DBI:Pg:dbname:dbhost
  dsn DBI:Mysql:dbname:dbhost
  db_user username
  db_pass password
  keys host,time_m,method,uri,protocol,status
  query insert into access_log (host, time, method, uri, protocol, status) values (?, ?, ?, ?, ?, ?)

Query は自動生成ではないので、任意の処理を実行できます。
keys のカンマ区切りの順に「?」のプレースホルダに入れます。
time_m っていうのは Apache 2.4 だと %{msec_frac}t という LogFormat マクロでミリ秒まで出せるので、次のように指定して DB にミリ秒精度で入れられます。

time_m:%{%Y-%m-%d %H:%M:%S}t.%{msec_frac}t

%{usec_frac}t だとマイクロ秒でも出せますが、DB にマイクロ秒精度で入らないので msec で。
mod_log_config - Apache HTTP Server

fluent-gem fluent-plugin-dbi

で。