はじめに
ようへいさんのポストを参考にしてdocker上でnginxとfluentdとnorikraを動かせたので、docker indexにイメージを掲載した。dockerのある環境ならあっという間に動くはず。
準備
- dockerが動くこと
- ホスト側でfluentd用のファイルディスクリプタ設定を済ませていること
手順
norikraを動かす
まずはログの集約先となるnorikraを動かす。
$ sudo docker run -p 26578:26578 -p 26571:26571 -p 24224:24224 -p 24224:24224/udp -d kazunori279/fluentd-norikra-server
初回はイメージのダウンロードにちょっと時間がかかる。終わったら、norikraを載せたコンテナがちゃんと動いているか、docker ps
で確認。
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7874efdd2e06 kazunori279/fluentd-norikra-server:latest /bin/sh -c /etc/init 16 minutes ago Up 16 minutes 0.0.0.0:24224->24224/tcp, 0.0.0.0:24224->24224/udp, 0.0.0.0:26571->26571/tcp, 0.0.0.0:26578->26578/tcp grave_turing
加えて、ブラウザからnorikraのWeb UIを開いてみる。URLはhttp://<dockerホストのIP>:26578/#
となる。
動いてる動いてる。ちなみに、この時点ですでにfluentd(td-agent)とfluent-plugin-norikraも利用可能な状態なので、norikraの準備はこれで終わり。docker簡単すぎてすごい。
nginxを動かす
norikraにログを流すnginxを用意しよう。別マシン上で動かしてもいいし、同じマシン上で動かしてもいい。
sudo docker run -d -e NORIKRA_IP=<norikraが動いているマシンのIP> -p 80:80 kazunori279/fluentd-nginx
これも初回はイメージのダウンロードが行われる。なお、このnginxとnorikraの間ではfluentdによるUDP通信が必要なので、例えばGoogle Compute Engineを使う場合はNORIKRA_IP
としてInternal IPを指定する必要がある。
では、nginxのコンテナを確認してみよう。
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d694d33b77d kazunori279/fluentd-nginx:latest /bin/sh -c sed -e "s 13 minutes ago Up 13 minutes 0.0.0.0:80->80/tcp thirsty_torvalds
いい感じ。このイメージにはnginxとfluentdが含まれていて、上記コマンドのNORIKRA_IP
で指定したマシン上のnorikraにすべてのログが転送される設定になっている。
curlでnginxを何回か叩いてみる。
$ curl http://localhost/
<html>
<head>
<title>Welcome to nginx!</title>
</head>
<body bgcolor="white" text="black">
<center><h1>Welcome to nginx!</h1></center>
</body>
</html>
ここで、ブラウザからnorikraのWeb UIをリロードして、ログが届いてるか見てみよう。
きてるきてる。Targets
のshow fields
をクリックすると、nginx_access
というターゲットが自動作成されてフィールドも正しく認識されているのがわかる。
SQLを試す
せっかくなので、SQLを試してみよう。Web UIからQueries
のeditor
をクリックして、以下の様なSQLを入力。
select * from nginx_access where path like '%foo%'
これはURI上に文字列foo
が含まれるログのみを集める、という意味。Add Query
ボタンをクリックしたら、curl http://localhost/?foo=bar
のようにfoo
をURLに含めて再度アクセスしてみる。
うまいこと集計されてるね! 再起動しなくても実行中にクエリをいろいろ追加・修正できるし、すべてがオンメモリだから速そう。norikraいいね! dockerと組み合わせるととても快適だ。これからnorikra用のダッシュボードUIをどうしようか考え中。
References
- norikra を試す
- kazunori279/fluentd-norikra-serverのDockerfile
- kazunori279/fluentd-nginxのDockerfile