LINEで送る
Pocket

Apacheのログを解析しようと思い、色々とググってみたところ、
fluentd (td-agent), Elasticsearch, Kibanaというキーワードが頻出しました。

上記3つを組み合わせると、ApacheのログがシャレオツなUIで見れるということはすぐ理解できたのですが、
それぞれが結局何をするものなのか分からなかったので簡単にまとめてみました。

使ってみたいけど、いまいち仕組みが分からないって方は読んでみてください。

fluentd とは

fluentd

様々なログフォーマットを指定したサービスのフォーマットに整形してくれます。

今回の場合は、Apacheのログを、Elasticsearchの入力フォーマットに整形してくれます。

fluentdの動作イメージ(公式より転載) fluentd

fluentdApache や Nginxのログを Elasticsearchのフォーマットに作り変える役割だということがわかると思います。

td-agent とは違うの?

td-agentはfluentdをラップしたシェルスクリプトなだけなので、 fluentd = td-agent と考えて下さい。

Elasticsearch とは

Elasticsearch

Elasticsearchと初めて聞いた時、AWSのサービスの1つかな?と思いました。(全くの別物です)

ElasticsearchとはIN / OUT ともにJsonで扱えるリアルタイム検索エンジンです。

Elasticsearchはサーバとして動き、Json形式でログを溜め込み、 RESTfulなapiを使って、検索結果をJson形式で受け取れます。

Kibana (Kibana3)

Kibana3 デモ (公式)

KibanaElasticsearchからjsonを取得し、シャレオツなUIでログを表示してくれる画面です。

Kibanaはhtml,js,cssで構成されているので、ApacheのDocment Rootなどに置きましょう。

Apache log 出力 から Kibana で表示するまでの簡単な流れ

以下の構成とする。
Elasticsearch : http://localhost:9200

Kibana : http://localhost:80/kibana/index.html

Apache => fluentd => Elasticsearch => Kibana access_log => Elasticsearch 用jsonに整形 => Json化されたApache logを受け取る

  1. Apacheにリクエストがあると、
    httpd.confに書かれたログディレクトリへログが出力されます。
    一般的には、access_log ですね。

  2. fluentd(td-agent)のデーモンが定期的に access_logを取りに行き、
    Elasticsearch用のjsonを作り、
    http://localhost:9200 へ POST します。

  3. Elasticsearchはサーバとして起動しており、(http://localhost:9200)※デフォルト
    fluentdがPOSTしてきたログデータを溜め込みます。

  4. ブラウザより Kibanaの画面を開く(http://localhost:80/kibana/index.html)
    ここでKibanaの jsが http://localhost:9200へjsonをリクエストしにいきます。
    ※ここは実際に動作を確認した訳でないので予想です。

  5. Apacheのログがいい感じに見れる。

最後に

この記事を読んで、なんとなく仕組みが理解できたという方は一言コメントを頂けると嬉しいです。
もし何か間違いがあれば、ご指摘ください。

実際のセットアップについては、機会があれば紹介します。