apacheのaccess_logをjson化しtd-agentで集約サーバへ収集する
apacheのaccess_logを構築した集約サーバへ収集する必要があり、そのついでに解析しやすいようjson化設定したのでメモ。
apacheログをjson化する要件が発生した場合汎用性がありそうなので、調査・対応を下記へ記載しておく。
apacheのconfファイルにjsonフォーマット指定追加
# vi http.conf // フォーマット指定 LogFormat "{\"timestamp\":\"%{%Y-%m-%dT%H:%M:%S}t.%{msec_frac}t%{%z}t\", \"remote_ip\":\"%a\", \"port\":%{local}p, \"local_ip\":\"%A\", \"httpHost\":\"%v\", \"reqTime\":\"%T\", \"reqStatus\":%>s, \"protocol\":\"%H\", \"bytes_sent\":%O, \"bytes_received\":%I, \"reqTime\":%D, \"file_path\":\"%f\", \"query\":\"%q\", \"method\":\"%m\", \"reqURL\":\"%U\", \"request\":\"%r\", \"ua\":\"%{User-Agent}i\", \"referrer\":\"%{Referer}i\"}" json //カスタムログにてログ出力 CustomLog /usr/local/apache2/logs/test.com_ssl_access.443.json.log json
以下td-agent2環境fluentd v0.12以降のバージョン
向けの設定例
# vi apache.access.conf <source> @id in_apache_http_com_json @type config_expander <config> @type tail path /usr/local/apache2/logs/test.com_ssl_access.443.json.log pos_file /var/log/td-agent/in.apache.com.access.443.json.pos read_from_head true keep_time_key true refresh_interval 1s format json time_key time time_format %Y-%m-%dT%H:%M:%S keep_time_key true tag test.apache.access @label @testserver </config> </source>
後は、上記ファイルをtd-agent.confで@includeし、送信設定(forward)すれば送信される。
※必要に応じてローテート設定行う
# vi /etc/logrotate.d/apache /usr/local/apache2/logs/*.log { daily rotate 30 compress missingok notifempty sharedscripts postrotate /usr/local/apache2/bin/apachectl graceful > /dev/null 2>/dev/null || true endscript }
ref)