search
LoginSignup
214

More than 5 years have passed since last update.

posted at

updated at

dockerなら5分で動く! nginxのログをfluentdで集めてnorikraでストリーム分析

はじめに

ようへいさんのポストを参考にしてdocker上でnginxとfluentdとnorikraを動かせたので、docker indexにイメージを掲載した。dockerのある環境ならあっという間に動くはず。

準備

手順

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/#となる。

Screen Shot 2014-03-02 at 9.49.45 AM.png

動いてる動いてる。ちなみに、この時点ですでに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をリロードして、ログが届いてるか見てみよう。

Screen Shot 2014-03-02 at 9.57.45 AM.png

きてるきてる。Targetsshow fieldsをクリックすると、nginx_accessというターゲットが自動作成されてフィールドも正しく認識されているのがわかる。

Screen Shot 2014-03-02 at 10.00.53 AM.png

SQLを試す

せっかくなので、SQLを試してみよう。Web UIからQuerieseditorをクリックして、以下の様なSQLを入力。

select * from nginx_access where path like '%foo%'

これはURI上に文字列fooが含まれるログのみを集める、という意味。Add Queryボタンをクリックしたら、curl http://localhost/?foo=barのようにfooをURLに含めて再度アクセスしてみる。

Screen Shot 2014-03-02 at 10.13.51 AM.png

うまいこと集計されてるね! 再起動しなくても実行中にクエリをいろいろ追加・修正できるし、すべてがオンメモリだから速そう。norikraいいね! dockerと組み合わせるととても快適だ。これからnorikra用のダッシュボードUIをどうしようか考え中。

References

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
214