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
で。
Comments