先日↓のようなブログを書いたのですが、
RailsアプリでActiveRecordとMongoidを両方使ってみる | shinodogg.com
その中で↓のように記載させていただいたのですが、、、
なんでSquidのaccess.logにしたかっていうと、たまたま見かけた
↓のブログにグッときてしまったから、、っていう話なのですが。。
fluentdのformat(正規表現)の作り方について試行錯誤中 #fluentd – Glide Note – グライドノート
私のように、いくつになっても正規表現がちゃんと使いこなせず@tocci3に丸投げな人間にとっては、
↓のブログで紹介されている、
LTSVフォーマットなログを fluentd + GrowthForecast で料理 – naoyaのはてなダイアリー
↓こんな風なのが、
<source> type tail time_format %d/%b/%Y:%H:%M:%S %z path /var/log/nginx/access.log format /^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) [(?<time>[^]]*)] "(?<method>S+)(?: +(?<path>[^ ]*) + S*)?" (?<status>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^"]*)" "(?<agent>[^"]*)" (?<response_time>[^ ]*) (?<upstream_response_time>[^ ]*))?$/ tag nginx.access pos_file /var/log/td-agent/nginx.access.log.pos </source>
↓こんな風になっちゃう、、なんていうのは破壊力抜群なのであります。。
<source> type tail_labeled_tsv path /var/log/nginx/access.log tag nginx.access pos_file /tmp/fluent.log.pos </source>
今回は、このfluent-plugin-tail-labeled-tsvプラグインをインストールして、
今まで触ったことないNginx入れてログを食わせてみようかな、と。
■ fluent-plugin-tail_labeled_tsvのインストール
gemコマンドで入れようとしたら、、、
# gem install fluent-plugin-tail_labeled_tsv ERROR: Could not find a valid gem 'fluent-plugin-tail_labeled_tsv' (>= 0) in any repository
あ、↓ってLabeled Tab Separated Valueノススメ – stanakaのブログに書いてありますね。。
コードは、https://github.com/stanaka/fluent-plugin-tail-labeled-tsvにあります(近々Gem化します)。
なんとなくgemが置いてあるとこにgithubからpullしてきたソース置いたら動くかな?とか思ってやってみたけど、
んなわけないっすよね的なw
んま、ググってく過程で↓が勉強になりました。
インストール済みのgemパッケージの保存場所を調べるには – CWPStudy
# gem which rails /var/lib/gems/1.9.1/gems/railties-3.2.9/lib/rails.rb
こんな感じで、自分のUbuntuの場合は/var/lib/gems/1.9.1/gemsの中に入ってるようです。
本題に戻って、ローカルでカスタムなプラグインをインストールするには、
↓によると、
fluent pluginの作成 | ksauzz weblog
・fluentd –setup /etc/fluentして
・/etc/fluent/pluginにRubyのファイルを置いてやる感じでよさそうです。
ということでgithubからソースコードをダウンロードしてきて、
in_tail_labeled_tsv.rbを/etc/fluent/pluginに配置します。
# mkdir fluent-plugin-tail-labeled-tsv # cd fluent-plugin-tail-labeled-tsv/ # git init Initialized empty Git repository in /var/lib/gems/1.9.1/gems/fluent-plugin-tail-labeled-tsv/.git/ # git pull git@github.com:stanaka/fluent-plugin-tail-labeled-tsv.git remote: Counting objects: 16, done. remote: Compressing objects: 100% (12/12), done. remote: Total 16 (delta 1), reused 16 (delta 1) Unpacking objects: 100% (16/16), done. From github.com:stanaka/fluent-plugin-tail-labeled-tsv * branch HEAD -> FETCH_HEAD # mkdir -p /etc/fluent/plugin # cp lib/fluent/plugin/in_tail_labeled_tsv.rb /etc/fluent/plugin/
↓にしてもほんの数行。こういうのをgemを使ってサクっと、とか。Fluentdナイスです。
https://github.com/stanaka/fluent-plugin-tail-labeled-tsv/blob/master/lib/fluent/plugin/in_tail_labeled_tsv.rb
■ Nginxのインストール
世の中、イベント駆動型でC10K問題が~とかってのが最近の流行りで、
その代表格がNginx。特に業務で使う予定も今のところないのですが、
せっかくなのでUbuntuにインストールしてみます。
インストールって言ってもapt-get install nginxするだけですが…w
# apt-get install nginx Reading package lists... Done Building dependency tree Reading state information... Done ~略~ Setting up nginx-common (1.1.19-1ubuntu0.1) ... Setting up nginx-full (1.1.19-1ubuntu0.1) ... Setting up nginx (1.1.19-1ubuntu0.1) ...
↓に実行ファイルがあるようなので早速たたくと、、、
# which nginx /usr/sbin/nginx
他のプロセスに80番ポート使われちゃってますから、と。
# /usr/sbin/nginx nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] still could not bind()
nginxの設定ファイルは /etc/nginx/nginx.conf っぽいのでみてみると、
include /etc/nginx/sites-enabled/*;
だそうなので↓適当にポート番号を変更してlisten定義のコメントアウトを取り除きます。
server { listen 9999; ## listen for ipv4; this line is default and implied
起動してプロセスみると大丈夫っぽい。
# nginx # echo $? 0 # ps -ef | grep nginx | grep -v grep root 32675 1 0 12:48 ? 00:00:00 nginx: master process nginx www-data 32676 32675 0 12:48 ? 00:00:00 nginx: worker process www-data 32677 32675 0 12:48 ? 00:00:00 nginx: worker process www-data 32678 32675 0 12:48 ? 00:00:00 nginx: worker process www-data 32679 32675 0 12:48 ? 00:00:00 nginx: worker process
画面からアクセスすると、クソシンプルだぜベイベー的なw
ログは/var/logにあるらしいです。
# grep log nginx.conf nginx.conf: access_log /var/log/nginx/access.log; nginx.conf: error_log /var/log/nginx/error.log;
で、こいつをラベル付けたタブ区切りにしてやるってのが本日のミソ。
nginx.confにまんまコピペしちゃいますw
29 ## 30 # Logging Settings 31 ## 32 33 log_format tsv "time:$time_localthost:$remote_addrtreq:$requesttstatus:$statustsize:$body_bytes_senttreferer:$http_re ferertua:$http_user_agenttreqtime:$request_timetcache:$upstream_http_x_cache"; 34 35 access_log /var/log/nginx/access.log tsv; 36 error_log /var/log/nginx/error.log;
設定変更を反映させるにはreloadっていうのがあるらしいのだけど、
ググってくと、さすがロシア…。
んま、そんなこんなで読み込ませて、
# nginx -s reload
ログみてみると↓イイ感じ。
time:07/Feb/2013:13:22:08 +0900 host:127.0.0.1 req:GET / HTTP/1.1 status:304 size:0 referer:- ua:Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0 reqtime:0.000 cache:- time:07/Feb/2013:13:22:39 +0900 host:127.0.0.1 req:GET / HTTP/1.1 status:304 size:0 referer:- ua:Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0 reqtime:0.000 cache:-
■ ラベル付きTSVファイルをfluent-plugin-tail-labeled-tsvに食わせてみる
Fluentdの設定ファイル
<source> type tail_labeled_tsv path /var/log/nginx/access.log tag hoge pos_file /root/hoge/fluent/acceess_log_pos_tail_labeled_tsv.log </source> <match hoge.**> type file path /root/hoge/fluent/hoge_tail_labeled_tsv.log </match>
Fluentdのプロセス起動
# fluentd -c access_log_tail_labeled_tsv.conf 2013-02-07 13:27:06 +0900: starting fluentd-0.10.29 2013-02-07 13:27:06 +0900: reading config file path="access_log_tail_labeled_tsv.conf" 2013-02-07 13:27:06 +0900: adding source type="tail_labeled_tsv" 2013-02-07 13:27:06 +0900: adding match pattern="hoge.**" type="file" 2013-02-07 13:27:06 +0900: following tail of /var/log/nginx/access.log
ナイスなJSON形式になりましたーヽ(´▽`)ノ
# cat hoge_tail_labeled_tsv.log.20130207.b4d519eb2c144ca90 2013-02-07T13:27:11+09:00 hoge {"time":"07/Feb/2013:13:27:11 +0900","host":"127.0.0.1","req":"GET / HTTP/1.1","status":"304","size":"0","referer":"-","ua":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0","reqtime":"0.000","cache":"-"} 2013-02-07T13:27:11+09:00 hoge {"time":"07/Feb/2013:13:27:11 +0900","host":"127.0.0.1","req":"GET / HTTP/1.1","status":"304","size":"0","referer":"-","ua":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0","reqtime":"0.000","cache":"-"} 2013-02-07T13:27:11+09:00 hoge {"time":"07/Feb/2013:13:27:11 +0900","host":"127.0.0.1","req":"GET / HTTP/1.1","status":"304","size":"0","referer":"-","ua":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0","reqtime":"0.000","cache":"-"}
いやー、なんていうのか、この現場感。
はてなさんも素敵だし、こういうのをチョロっとプラグインとして組み込めちゃうFluentdもパネェっす。
技術評論社
売り上げランキング: 45,773
コメント