モチベーション

ログ収集サーバ,解析サーバを構築して自分で管理しているサーバのログ解析を行いたい.

背景

個人で運用しているサーバをLXCを使って整理することにした.これまでおざなりにしていたログの収集・解析をFluentd + Elasticsearch + Kibanaで実施したいので,これらのシステムをLXC環境で構築するために必要な知識を習得する.

監視予定のログ

  • nginxのアクセスログ
  • 他未定

Fluentd / Elasticsearch / Kibanaとは

サーバのセキュリティ対策や安定運用のために日々のログ監視は重要である.しかし,サーバの台数が増えるとそれぞれのサーバに入りログを確認するというのは現実的に無理がある(1台でも無理か・・・?).そこで,普通はログを収集する仕組みを作り,溜め込んだログを何らかの方法で監視するのが一般的だ.Fluentd,Elasticsearch,Kibanaはこれらの一連の流れにおいて以下の役割を担う.

  • Fluentd: 各サーバのログを収集する
  • Elasticsearch: Fluentdで収集したログを解析する(検索エンジン)
  • Kibana: Elasticsearchで解析したログをWebポータルで可視化する

つまり,Fluentd + Elasticsearch + Kibanaを利用すれば,ログ収集→ログ解析→ログ可視化が簡単に実現できる.

ログ分析になぜElasticsearchを使うのか?

結論から述べると,全文検索を行う検索エンジンだからである.そもそも.僕の場合は収集するログがどんな特徴を持っているのか,どのログを収集すれば良いのかもあまりわかっていないため,全てのログ情報を良い感じに検索出来たり,解析してくれるロジックを導入したい.そんな願いを叶えてくれるのが全文検索と呼ばれる仕組みで,Elasticsearchはこの仕組みを採用している.全文検索エンジンの対抗馬としてApache Slor(ソーラ)が挙げられるが,SolrとElasticsearchを比べてみようによると,

  • ElasticsearchはRESTによる操作が可能
  • SolrもElasticsearchもLucene(ルシーン)ベースで検索観点で大きく異なる部分は少ない
  • 分析とか、集計情報を扱いたければElasticsearch

RESTで操作可能な点,分析で有利な点からElasticsearchの方が良さそうだった.また,関わっているPJでElasticSearchを使っているケースが多いためこれを使うことにした.全文検索やElasticSearchの詳細については別記事で紹介しようと思う.

ログ収集になぜFluentdを使うのか?

Elasticsearch社が提供しているログ収集ツールにLogstashというものがあるがfluentdの方がログの取りこぼしをしにくいなどの特徴から利用されているケースが多いようだ.また,fluentdは以下の特徴を持つ.

  • 時系列,ストリーム系のデータを処理するのが得意
  • tagベースのルーティング
  • 非構造化されたデータをJSONフォーマットに落とし込める
  • fluentdを拡張するプラグインはRubyで開発できる
  • Flumeは導入難易度が高い(Hadoopとは連携しやすい)

今回収集するログはまさに,ストリームの系の非構造のデータなので,fluentdで処理するにはうってつけである.1次格納先としてMongoDBにfluentdで収集したデータを格納しても良いが,プラグインを使うと直接Elasticsearchにデータを保存できる.今回はMongoDBのを別途管理したくないので,プラグインを利用して直接保存する.

UIになぜKibanaを使うのか?

ここまでFluentdとElasticsearchの使用理由をそれなりに書いてきたが,Kibanaについては特に理由は無い.Elasticsearchとの組み合わせで実績があるものを採用した.

LXC環境への導入イメージ

リバースプロキシをかませる予定なので,そのリバースプロキシのアクセスログ収集が主な目的になるが一応,wiki,blog,kibanaのサーバでfluendエージェントを仕込んでおく.

構成案 ログ解析環境に関しては破壊してもあまり被害は無いので将来的には違う構成にするかも知れない.とりあえず,LXC環境を構築したら導入しよう.

参考

Elasticsearch + Kibana + Fluentdでのログ収集解析関連

Elasticseach(検索エンジン)

検索業界の知識 & Lucene(検索ライブラリ)

Fluentd(ログ収集)

fluentd vs Logstash