ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について。
システム障害の原因調査や、稼働状況の確認のためにログの中身を確認することがよくあります。しかし、ログが大量に出力されていたり、複数の場所に分散して出力されていたりすると、それを確認するために多くの手間と時間がかかってしまいます。
これらの課題解決の方法として、ここ最近主流となっているのが、複数のOSS(オープンソースソフトウェア)ツールを組み合わせてログの収集や検索、可視化ができる基盤(ログ基盤)を構築することです。
その中で特に代表的なものが、「Fluentd」(ログの集約)、「Elasticsearch」(ログの検索)、「Kibana」(ログの可視化)であり、本連載では、これらのログ基盤を実現するツールについて、構築方法や利用方法、実際の案件で使ったときの事例、さらにはログ基盤に関連する最新の情報を紹介していきます。
連載第1回の本稿では、Fluentd、Elasticsearch、Kibanaという3つのOSSツールを使ったログ基盤の構築、利用方法を紹介します。
ログ管理における課題としては、下記のようなものが挙げられます。
前述のような課題に対して、下記のようなことができるログ基盤を構築することで、解決を図ります。
実際に、ログ基盤を構築してみましょう。今回は、Fluentd、Elasticsearch、Kibanaという3つのOSSツールを使って構築していきます。
その他、今回の前提となる環境は下記の通りです。
なお今回は、ElasticsearchとKibanaの構築および連携をするために、DockerおよびDocker Composeを利用することにします。Docker Composeを使えば、ElasticsearchとKibanaのインストール、起動および連携が、Docker Composeの設定ファイルの記載通りに行われ、これらをDocker Composeのコマンド1つで実施できるため、非常に簡単に動かせます(具体的な内容は後述)。
次に、今回構築する環境の全体構成イメージ、および構築手順を紹介します。
ログ基盤の全体構成および、ログ参照時の流れは下記の通りです。サービス提供サーバにはFluentdを入れ、ログサーバにはElasticsearchと、Kibanaを入れる構成となっています。
なお、今回の収集対象ログはApache HTTP Serverのアクセスログとしています。
構築手順の大きな流れは下記の通りです。
サービス提供サーバに、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
サービス提供サーバについての設定は以上で完了です。
Copyright © ITmedia, Inc. All Rights Reserved.