概要
nginxのアクセスログを月日が分割されるようにする
結論-2014/09/25追記
http://wiki.nginx.org/LogRotation
公式にlogrotateの方法があり、これを真似てbashで月日を分割するようにした
いろいろ試したが、”time_iso8601″ variable が利用できない場合は自作が一番良さそう
その前に
root@hostname:/home/shimizu# vi /etc/nginx/sites-enabled/default ===== access_log /var/log/nginx/default/access.log; ===== root@hostname:/home/shimizu# rm /var/log/nginx/default/access.log root@hostname:/home/shimizu# /etc/init.d/nginx start # もしくは reload でaccess.log が作成される root@hostname:/home/shimizu# ls -al /var/log/nginx/default/access.log -rw-r--r-- 1 root root 385 7月 29 20:42 /var/log/nginx/default/access.log
nginx機能で実現
root@hostname:/home/shimizu# nginx -v nginx version: nginx/1.6.0 root@hostname:/home/shimizu# vi /etc/nginx/sites-enabled/default ===== if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") { set $year $1; set $month $2; set $day $3; } ===== root@hostname:/home/shimizu# ls -al /var/log/nginx/default/ 合計 20 drwxr-xr-x 2 www-data adm 4096 7月 29 20:46 . drwxr-x--- 4 www-data adm 4096 7月 29 20:45 .. -rw-r--r-- 1 www-data www-data 385 7月 29 20:46 2014-07-29-access.log # www-data権限で作成される -rw-r--r-- 1 www-data www-data 385 7月 29 20:46 2014-07-29T20:46:32+09:00-access.log -rw-r--r-- 1 root root 385 7月 29 20:42 access.log root@hostname:/home/shimizu# ps aufx | grep [n]ginx root 2988 0.0 0.3 132300 2264 ? Ss 20:46 0:00 nginx: master process /usr/sbin/nginx www-data 2992 0.0 0.5 132660 3628 ? S 20:46 0:00 \_ nginx: worker process
nginx: [emerg] unknown “time_iso8601” variable
上のエラーが出た場合は、バージョンが違う可能性があり
In the modern nginx versions variables $status (1.3.2, 1.2.2), $bytes_sent (1.3.8, 1.2.5), $connection (1.3.8, 1.2.5), $connection_requests (1.3.8, 1.2.5), $msec (1.3.9, 1.2.6), $request_time (1.3.9, 1.2.6), $pipe (1.3.12, 1.2.7), $request_length (1.3.12, 1.2.7), $time_iso8601 (1.3.12, 1.2.7), and $time_local (1.3.12, 1.2.7) are also available as common variables.
nginx() + Fluentd
Fluentdとは
インストール
td-agent をインストールする。td-agent とは Treasure Data 社が作成している Fluentd安定版の配布パッケージのこと
ruby環境を内包しているので、システムのruby環境に依存せず非破壊的に導入可能
公式サイトに debian/Ubuntu のインストール手順があるが、サポートされておらず、多くの人がはまっている模様。。
root@hostname:/home/shimizu# vi /etc/apt/sources.list # 以下を追記する ===== # fluentd(td-agent) deb http://packages.treasure-data.com/debian/ lucid contrib ===== root@hostname:/home/shimizu# aptitude update (中略) W: GPG エラー: http://packages.treasure-data.com lucid Release: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY 1093DB45A12E206F root@hostname:/home/shimizu# wget http://packages.treasure-data.com/debian/RPM-GPG-KEY-td-agent --2014-07-29 22:31:28-- http://packages.treasure-data.com/debian/RPM-GPG-KEY-td-agent packages.treasure-data.com (packages.treasure-data.com) をDNSに問いあわせています... 54.230.233.15, 54.230.234.52, 54.230.233.27, ... packages.treasure-data.com (packages.treasure-data.com)|54.230.233.15|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 934 [binary/octet-stream] `RPM-GPG-KEY-td-agent' に保存中 100%[===========================================================>] 934 --.-K/s 時間 0s 2014-07-29 22:31:29 (1740 GB/s) - `RPM-GPG-KEY-td-agent' へ保存完了 [934/934] root@hostname:/home/shimizu# apt-key add RPM-GPG-KEY-td-agent OK root@hostname:/home/shimizu# rm RPM-GPG-KEY-td-agent root@hostname:/home/shimizu# aptitude install td-agent 以下の新規パッケージがインストールされます: td-agent{b} 以下のパッケージが推奨されていますがインストールされません: ntp 更新: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。 60.9 M バイトのアーカイブを取得する必要があります。展開後に 107 M バイトのディスク領域が新たに消費されます。 以下のパッケージには満たされていない依存関係があります: td-agent : 依存: libssl0.9.8 (>= 0.9.8k-1)[仮想パッケージです] 依存: libyaml-0-2 [インストールされません] 以下のアクションでこれらの依存関係の問題は解決されます: 以下のパッケージを現在のバージョンに一時固定する: 1) td-agent [インストールされていません] この解決方法を受け入れますか? [Y/n/q/?]n *** 利用可能な解決方法がこれ以上ありません。 *** 以下のアクションでこれらの依存関係の問題は解決されます: 以下のパッケージを現在のバージョンに一時固定する: 1) td-agent [インストールされていません] この解決方法を受け入れますか? [Y/n/q/?]n t root@hostname:/home/shimizu# wget -d http://ftp.jp.debian.org/debian/pool/main/o/openssl/libssl0.9.8_0.9.8o-4squeeze14_amd64.deb DEBUG output created by Wget 1.13.4 on linux-gnu. URI encoding = `UTF-8' --2014-07-29 23:07:36-- http://ftp.jp.debian.org/debian/pool/main/o/openssl/libssl0.9.8_0.9.8o-4squeeze14_amd64.deb ftp.jp.debian.org (ftp.jp.debian.org) をDNSに問いあわせています... 133.242.8.20 Caching ftp.jp.debian.org => 133.242.8.20 ftp.jp.debian.org (ftp.jp.debian.org)|133.242.8.20|:80 に接続しています... 接続しました。 Created socket 3. Releasing 0x0000000000abc8c0 (new refcount 1). ---request begin--- GET /debian/pool/main/o/openssl/libssl0.9.8_0.9.8o-4squeeze14_amd64.deb HTTP/1.1 User-Agent: Wget/1.13.4 (linux-gnu) Accept: */* Host: ftp.jp.debian.org Connection: Keep-Alive ---request end--- HTTP による接続要求を送信しました、応答を待っています... ---response begin--- HTTP/1.1 200 OK Date: Tue, 29 Jul 2014 14:07:36 GMT Server: Apache/2.2.22 (Debian) Last-Modified: Wed, 13 Feb 2013 20:15:13 GMT ETag: "20856c5-f49ce-4d5a0ccb8f640" Accept-Ranges: bytes Content-Length: 1001934 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: application/x-debian-package ---response end--- 200 OK Registered socket 3 for persistent reuse. 長さ: 1001934 (978K) [application/x-debian-package] `libssl0.9.8_0.9.8o-4squeeze14_amd64.deb' に保存中 100%[===========================================================>] 1,001,934 2.59M/s 時間 0.4s 2014-07-29 23:07:36 (2.59 MB/s) - `libssl0.9.8_0.9.8o-4squeeze14_amd64.deb' へ保存完了 [1001934/1001934] root@hostname:/home/shimizu# dpkg -i libssl0.9.8_0.9.8o-4squeeze14_amd64.deb 以前に未選択のパッケージ libssl0.9.8 を選択しています。 (データベースを読み込んでいます ... 現在 68478 個のファイルとディレクトリがインストールされています。) (libssl0.9.8_0.9.8o-4squeeze14_amd64.deb から) libssl0.9.8 を展開しています... libssl0.9.8 (0.9.8o-4squeeze14) を設定しています ... root@hostname:/home/shimizu# aptitude search libssl p libssl-dev - 開発用 SSL ライブラリ、ヘッダおよびドキュメント p libssl-doc - SSL development documentation documentation p libssl-ocaml - OCaml bindings for OpenSSL (runtime) p libssl-ocaml-dev - OCaml bindings for OpenSSL v libssl-ocaml-dev-l8h98 - v libssl-ocaml-l8h98 - i libssl0.9.8 - SSL shared libraries i libssl1.0.0 - SSL 共有ライブラリ p libssl1.0.0-dbg - libssl および libcrypto 用シンボルテーブル p libsslcommon2 - enterprise messaging system - common SSL libraries p libsslcommon2-dev - enterprise messaging system - common SSL development root@hostname:/home/shimizu# aptitude install td-agent 以下の新規パッケージがインストールされます: td-agent 更新: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。 60.9 M バイトのアーカイブを取得する必要があります。展開後に 107 M バイトのディスク領域が新たに消費されます。 (中略) (.../td-agent_1.1.20-1_amd64.deb から) td-agent を展開しています... td-agent (1.1.20-1) を設定しています ... システムユーザ `td-agent' (UID 114) を追加しています... 新しいグループ `td-agent' (GID 121) を追加しています... 新しいユーザ `td-agent' (UID 114) をグループ `td-agent' に追加しています... ホームディレクトリ `/home/td-agent' は作成しません。 Installing default conffile /etc/td-agent/td-agent.conf ... [ ok ] Starting td-agent : td-agent.
nginxをLTSV形式に
Labeled Tab-serapated Valuesの略で、parse処理がとてもしやすい
root@hostname:/home/shimizu# vi /etc/nginx/nginx.conf # httpコンテキストに追記 ===== log_format ltsv 'time:$time_iso8601\t' 'remote_addr:$remote_addr\t' 'request_method:$request_method\t' 'request_length:$request_length\t' 'request_uri:$request_uri\t' 'https:$https\t' 'uri:$uri\t' 'query_string:$query_string\t' 'status:$status\t' 'bytes_sent:$bytes_sent\t' 'body_bytes_sent:$body_bytes_sent\t' 'referer:$http_referer\t' 'useragent:$http_user_agent\t' 'forwardedfor:$http_x_forwarded_for\t' 'request_time:$request_time\t' 'upstream_response_time:$upstream_response_time\t' 'host:$host'; ===== root@hostname:/home/shimizu# vi /etc/nginx/sites-enabled/default ===== access_log /var/log/nginx/default/access.log ltsv; ===== root@hostname:/home/shimizu# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful root@hostname:/home/shimizu# /etc/init.d/nginx reload Reloading nginx configuration: nginx. root@hostname:/home/shimizu# tail -f /var/log/nginx/default/access.log time:2014-07-30T22:08:53+09:00 remote_addr:11.11.11.111 request_method:GET request_length:312 request_uri:/favicon.ico https: uri:/favicon.ico query_string:- status:404 bytes_sent:383 body_bytes_sent:198 referer:- useragent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36 forwardedfor:- request_time:0.000 upstream_response_time:- host:49.212.204.46
td-agentの設定
root@hostname:/home/shimizu# which td-agent /usr/sbin/td-agent root@hostname:/home/shimizu# lv /usr/sbin/td-agent root@hostname:/home/shimizu# cat /usr/sbin/td-agent # 設定ファイルの場所が記載されている #!/usr/lib/fluent/ruby/bin/ruby ENV["GEM_HOME"]="/usr/lib/fluent/ruby/lib/ruby/gems/1.9.1/" ENV["GEM_PATH"]="/usr/lib/fluent/ruby/lib/ruby/gems/1.9.1/" ENV["FLUENT_CONF"]="/etc/td-agent/td-agent.conf" ENV["FLUENT_PLUGIN"]="/etc/td-agent/plugin" ENV["FLUENT_SOCKET"]="/var/run/td-agent/td-agent.sock" load "/usr/lib/fluent/ruby/bin/fluentd" root@hostname:/home/shimizu# cp /etc/td-agent/td-agent.conf /etc/td-agent/td-agent.conf_ root@hostname:/home/shimizu# vi /etc/td-agent/td-agent.conf ===== # Input <source> type tail path /var/log/nginx/default/access.log tag nginx.access pos_file /var/log/td-agent/buffer/access.log.pos format ltsv </source> # Output <match nginx.access> type file path /var/log/td-agent/access.log </match> #<match nginx.access> # type forward # buffer_type memory # buffer_chunk_limit 256m # buffer_queue_limit 128 # flush_interval 5s # <server> # # ログの送信先IPアドレス # host 192.168.1.100 # port 24224 # default port : TCPで送信、UDPで監視 # </server> #</match> ===== root@hostname:/var/log/td-agent# /etc/init.d/td-agent restart [ ok ] Restarting td-agent: td-agent. root@hostname:/var/log/td-agent# ls -al /var/log/td-agent/ 合計 48 drwxr-xr-x 4 td-agent td-agent 4096 7月 31 00:10 . drwxr-xr-x 20 root root 4096 7月 30 06:25 .. -rw-r--r-- 1 td-agent td-agent 1356 7月 31 00:01 access.log.20140731.b4ff6a69443049725 drwxrwxrwx 2 td-agent td-agent 4096 7月 30 23:58 buffer -rw-r--r-- 1 td-agent td-agent 17104 7月 31 00:15 td-agent.log
[error]: unexpected error error_class=Errno::EACCES error=#
/var/log/td-agent/td-agent.log にて出たエラー、pos_fileを権限のない場所におくと起動しないため注意
todo
http://blog.star-flare.com/posts/2013-10-11/1160/
path %Y/%m/%d/%H/blog.star-flare.com.access.log
参考URL
http://www.cambus.net/log-rotation-directly-within-nginx-configuration-file/
http://nginx.org/en/docs/http/ngx_http_log_module.html
https://packages.debian.org/squeeze/amd64/libssl0.9.8/download
http://docs.fluentd.org/ja/articles/install-by-deb
https://sites.google.com/site/itsikao/it-memo/fluentd
http://mtoyoshi.hateblo.jp/entry/2013/06/22/235408