Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法:実運用が分かる、OSSでログ管理入門(1)(1/2 ページ)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について。
ログ基盤とは
システム障害の原因調査や、稼働状況の確認のためにログの中身を確認することがよくあります。しかし、ログが大量に出力されていたり、複数の場所に分散して出力されていたりすると、それを確認するために多くの手間と時間がかかってしまいます。
これらの課題解決の方法として、ここ最近主流となっているのが、複数の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のアクセスログとしています。
- Webサイト利用者がWebサイトにアクセスし、アクセスログが出力される
- アクセスログをFluentdが自動で収集する
- Fluentdがアクセスログのデータをログサーバ上のElasticsearchに転送する
- Elasticsearchが、収集したログデータを蓄積する(ログが任意の条件で検索可能となっている状態)
- Elasticsearchに蓄積されたログデータを、Kibanaがブラウザで参照可能なかたちに可視化する
- ログ管理者がブラウザからKibanaにアクセスして、ログデータ(ログの内容やアクセス数など)を参照する
環境構築手順
構築手順の大きな流れは下記の通りです。
- Fluentdの導入・設定
- Dockerの導入
- Docker Composeの導入
- Docker Compose設定ファイルの作成(ElasticsearchおよびKibana導入用)
- Docker Composeコマンドの実行(ElasticsearchおよびKibana導入用)
- 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
サービス提供サーバについての設定は以上で完了です。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- リクルート全社検索基盤のアーキテクチャ、採用技術、開発体制はどうなっているのか
リクルートの事例を基に、大規模BtoCサービスに求められる検索基盤はどう構築されるものなのか、どんな技術が採用されているのか、運用はどうなっているのかなどについて解説する連載。初回は全体的なアーキテクチャ、採用技術、開発体制について。 - AWSがElasticsearchサービスを発表
Amazon Web ServicesがElasticsearchサービスをリリース。数分でElasticsearchのためのクラスター環境を構築でき、可視化環境や「CloudWatch Logs」との連携機能も持つ。 - OSS製品ベンダーの開発手法の神髄はここにあり──コミュニティ活動を通じて世界中から優秀な技術者の獲得に成功したElastic
CTOとは何か、何をするべきなのか――日本のIT技術者の地位向上やキャリア環境を見据えて、本連載ではさまざまな企業のCTO(または、それに準ずる役職)にインタビュー、その姿を浮き彫りにしていく。第7回は人気のオープンソース検索エンジン「Elasticsearch」のクリエイターであり、Elasticの創設者でCTOを務めるシャイ・バノン氏に話を伺った。