連載
» 2017年04月06日 05時00分 UPDATE

実運用が分かる、OSSでログ管理入門(1):Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (1/2)

ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について。

[湯浅省吾,三菱総研DCS]

ログ基盤とは

 システム障害の原因調査や、稼働状況の確認のためにログの中身を確認することがよくあります。しかし、ログが大量に出力されていたり、複数の場所に分散して出力されていたりすると、それを確認するために多くの手間と時間がかかってしまいます。

 これらの課題解決の方法として、ここ最近主流となっているのが、複数のOSS(オープンソースソフトウェア)ツールを組み合わせてログの収集や検索、可視化ができる基盤(ログ基盤)を構築することです。

 その中で特に代表的なものが、「Fluentd」(ログの集約)、「Elasticsearch」(ログの検索)、「Kibana」(ログの可視化)であり、本連載では、これらのログ基盤を実現するツールについて、構築方法や利用方法、実際の案件で使ったときの事例、さらにはログ基盤に関連する最新の情報を紹介していきます。

 連載第1回の本稿では、Fluentd、Elasticsearch、Kibanaという3つのOSSツールを使ったログ基盤の構築、利用方法を紹介します。

ログ管理における課題

 ログ管理における課題としては、下記のようなものが挙げられます。

課題を解決するためのログ基盤

 前述のような課題に対して、下記のようなことができるログ基盤を構築することで、解決を図ります。

ログ基盤の構築

 実際に、ログ基盤を構築してみましょう。今回は、Fluentd、Elasticsearch、Kibanaという3つのOSSツールを使って構築していきます。

 その他、今回の前提となる環境は下記の通りです。

  • OS:CentOS 7.2
  • ログ収集ツール:Fluentd 0.12.31
  • ログ検索ツール:Elasticsearch 5.1.2
  • ログ可視化ツール:Kibana 5.1.2
  • コンテナエンジン:Docker 1.10.3
  • コンテナ構築ツール:Docker Compose 1.9.0

 なお今回は、ElasticsearchとKibanaの構築および連携をするために、DockerおよびDocker Composeを利用することにします。Docker Composeを使えば、ElasticsearchとKibanaのインストール、起動および連携が、Docker Composeの設定ファイルの記載通りに行われ、これらをDocker Composeのコマンド1つで実施できるため、非常に簡単に動かせます(具体的な内容は後述)。

 次に、今回構築する環境の全体構成イメージ、および構築手順を紹介します。

構築する環境の全体構成イメージ

 ログ基盤の全体構成および、ログ参照時の流れは下記の通りです。サービス提供サーバにはFluentdを入れ、ログサーバにはElasticsearchと、Kibanaを入れる構成となっています。

 なお、今回の収集対象ログはApache HTTP Serverのアクセスログとしています。

  1. Webサイト利用者がWebサイトにアクセスし、アクセスログが出力される
  2. アクセスログをFluentdが自動で収集する
  3. Fluentdがアクセスログのデータをログサーバ上のElasticsearchに転送する
  4. Elasticsearchが、収集したログデータを蓄積する(ログが任意の条件で検索可能となっている状態)
  5. Elasticsearchに蓄積されたログデータを、Kibanaがブラウザで参照可能なかたちに可視化する
  6. ログ管理者がブラウザからKibanaにアクセスして、ログデータ(ログの内容やアクセス数など)を参照する

環境構築手順

 構築手順の大きな流れは下記の通りです。

  1. Fluentdの導入・設定
  2. Dockerの導入
  3. Docker Composeの導入
  4. Docker Compose設定ファイルの作成(ElasticsearchおよびKibana導入用)
  5. Docker Composeコマンドの実行(ElasticsearchおよびKibana導入用)
  6. 023#

サービス提供サーバの構築(Fluentdのインストール、設定)

 サービス提供サーバに、Fluentdをインストールします。

 下記コマンドでFluentdがインストールできます。

# curl -L http://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh

 インストールできたら、下記コマンドで、インストールされていることを確認してください(バージョン確認)。

# td-agent --version

 また、FluentdからElasticsearchへ転送するためのプラグインを、下記コマンドでインストールします。

# fluent-gem install fluent-plugin-elasticsearch

 次にFluentdの設定を行います。

 Fluentdの設定ファイル(/etc/td-agent/td-agent.conf)を編集し、下記のように設定します。

 Fluentdでは、「source」というディレクティブを使って、Fluentdへの入力について指定し、それを「match」というディレクティブにて、どう処理するかを指定します(簡単にいうと「source」と「match」は、「インプット」と「アウトプット」のような関係になります)。

<source>
  type tail
  path /var/log/httpd/access_log……【1】
  tag apache.access……【2】
  pos_file /var/log/td-agent/access_log.pos
  format apache2……【3】
</source>
<match apache.access>……【4】
  type elasticsearch……【5】
  host log.sample.server……【6】
  port 9200……【7】
  type_name access_log
  logstash_format true
  buffer_type memory
  buffer_chunk_limit 10m
  buffer_queue_limit 10
  flush_interval 1s
  retry_limit 16
  retry_wait 1s
</match>

 上記の最低限必要な設定については、以下で説明します。

【1】収集したいログの参照先となるパスを指定します。今回はApache HTTP Serverのアクセスログを対象としています。

【2】後述のmatchディレクティブに処理を渡すために、任意のtagを指定します。今回はapache.accessというtag名を指定しています。

【3】Fluentdにログを取り込む際のフォーマット形式を指定します。Apache HTTP Serverについてはデフォルトで「apache2」というフォーマットが用意されていますので、それを指定しています。正規表現などを使って、任意のフォーマットを指定することも可能です。

【4】上述の【2】で指定されたものをインプットとして処理をするために【2】のtag名を指定しています。ワイルドカードを使って、複数のtagを指定してまとめて処理することも可能です。

【5】FluentdからElasticsearchへログを転送するため「elasticsearch」を指定しています。

【6】Elasticsearchがある転送先サーバのホスト名を指定します。

【7】Elasticsearchがある転送先サーバのポート番号を指定します。

 上記が完了したら、Fluentdの自動起動をオンにして、Fluentdを起動します。

# systemctl enable fluentd
# systemctl start fluentd

 サービス提供サーバについての設定は以上で完了です。

       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。