はじめに
第1章 Elastic Stackって何?
第2章 環境構築
第3章 データを集めて可視化しよう(CSVのデータを集める編)
第4章 データを集めて可視化しよう(Beatsを使って情報を集めてみる)
第5章 Kibanaを使ったデータの閲覧
第6章 Visualize画面でデータを可視化する
第7章 Dashboard画面を使ってグラフを一覧表示する
第8章 トラブルシューティング
おわりに
「もふもふちゃん、最近いちごメロンパンの通販を受け付けるWebサイトの調子が悪いんだ。サーバーのスペックを上げた方が良いのかどうかわからないから、1週間分のCPU使用率やメモリの使用率とかが知りたいな。」
ある日、いちごメロンパンを売っている会社で働くもふもふちゃんは、上司の人からいきなりこんなことを言われました。
CPU使用率やメモリの使用率はLinuxコマンドで調べることができます。しかし、過去の履歴を閲覧するためにはそれぞれの使用率を調べるコマンドの結果をテキストに出力し、解析しなければなりません。
……数日後、もふもふちゃんは1週間分のCPU使用率・メモリ使用率などを調査し、表計算ソフトを使って結果をまとめました。ファイルの読みすぎで頭はくらくら、目はチカチカします。結果を上司に提出すると、OKをもらえたので安心したもふもふちゃんですが、今度はこんな頼まれごとをされてしまいました。
「もふもふちゃん、そういえばいちごメロンパンの売り上げがどのくらいあるのか知りたいな。」
詳しく聞くと、どうやら上司はいちごメロンパンの売り上げの平均が知りたいようです。売り上げデータは毎日追加されるため、その推移をグラフ化したいようでした。
「そんなー!データが追加されたら毎回1から計算し直しだよ!もう徹夜したくないよー!」
もふもふちゃんはすっかり困り果ててしまいました。
最近、「サービスの売り上げを伸ばすため」「自分の作った作品を宣伝するため」「アクセスしてくるユーザーに対してダイレクトなマーケティング戦略を練るため」「アクセス数の推移を研究することでより買ってもらえる商品を生み出すため」などさまざまな目的で、インターネット上にある情報や、自前のWebサイトへのアクセス履歴を分析する必要が増えています。
しかし、ログの履歴をただ追いかけることは簡単ではありません。ログ内の必要な情報を分析するだけであればまだ良いでしょう。しかし、もふもふちゃんのようにグラフなどで可視化する場合、ログの「見える化」作業が発生します。ログを「見える化」するために、必要な情報を自力で抜き出してまとめる作業は大変です。
「必要なログだけ収集して、ログの出力時刻とかで好きにグラフを作れたら楽なのにな…」
……実はできるんです。そう、Elastic Stackがあれば!
Elastic StackはオランダのElasticsearch社が提供しているツールです。日本では、Elastic StackのひとつであるElasticsearchが検索エンジンとして有名です。Elastic Stackは、複数のプロダクトを組み合わせ、BIツールとして利用できます。ここでいう「BIツール」とは、企業や世の中にある色々な情報を集めて可視化し、分析することを支援するツールのことを指しています。
Elastic Stackは一度設定が完了すればログの収集・可視化を自動で行います。ログの内容が更新されると自動でデータを収集するため、可視化ツールの情報は常に最新化されます。今のもふもふちゃんにはぴったりなツールと言えるでしょう。
「ちょっとこのElastic Stackってやつ、自分の環境に入れてみようかな」
みなさんも、もふもふちゃんと一緒に快適なログ解析を始めてみませんか?今まではデバックするとき以外ゴミ同然に扱われていたログファイルを、Elastic Stackの力で宝の山に変えることができるかもしれません。
この本で取り扱っている各ツールのバージョンはElasticsearch、Logstash、Kibana共に「7.4」を使用しています。Elastic Stackはバージョンアップがとても早いツールです。バージョンによって挙動がかなり違うため、別バージョンを使用した場合とコンフィグファイルの書き方や操作方法が異なる場合があります。あらかじめご了承ください。
なお、この本はログの分析方法をメインに扱う本です。そのため検索エンジンとしてのElasticsearchのスキーマ設計など、性能チューニング系のトピックは詳しく取り上げません。加えて、Elastic Stackの有償ツールの操作方法については取り上げません。この本は初めてElastic Stackに触れる人がツールの概要を理解することを手助けする目的で書いているためです。
版の改訂にあたり、Kibanaのスクリーンショットを全て撮り直しました。このときの動作環境はMac OS Catalinaを利用しています。環境構築以外の章はMac OS(tar.gz)でインストールした場合のコマンドを使用しています。Elastic Stackを試してみることを目的にしているためです。
この本の情報はElasticsearch社の公式ドキュメント・検証結果を元に作成していますが、本の情報を用いた開発・制作・運用に対して発生した全ての結果に対して責任は負いません。必ずご自身の環境でよく検証してから導入をお願いします。
また、本文で使用しているいちごメロンパンのデータはhttps://docs.google.com/spreadsheets/d/1TEFwyHisPZdqYwBIbVbmBXpVIG6KYZFIomFxT8f31nk/edit?usp=sharingに保存しています。必要に応じて使用してください。
Elasticsearch社の公式URLhttps://www.elastic.co/guide/index.html
著作権について本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。
「Elastic StackはElasticsearch社が提供しているツールだっていうのはわかったけど、どれを使えばいいのかな?公式サイトを見るといっぱい種類があるみたいだけど…。」
おや?もふもふちゃん、なんだかお困りのようです。それもそうですね。Elastic Stackにはたくさんのミドルウェアが存在しますが、データを分析するためにどのツールを利用するべきなのかわかりません。この章ではElastic Stackとは何か、どのような用途でツールを使い分けるのか確認しましょう。
Logstashは各環境に散らばっているデータを集め、指定した対象に連携できるツールです。データの連携だけではなく、データの加工機能も持ち合わせています。
Logstashは主にRuby言語を用いて開発されていますが、RubyからJavaに開発言語を移行しつつあります。
どのようなデータが取り込みできるかですが、データの出力形式としてテキストファイル、xmlやjsonファイルも対象として指定できます。このほかにもTwitter APIと連携してTwitterのつぶやき情報を取り込む事や、データベース(RDB)に接続して情報を取得する事も可能です。
データの出力先は、このあと出てくるElasticsearchだけでなく、プロジェクトの進捗状況管理ツールであるRedmineにも送信できます。取り込んだ情報をファイルに出力することや、syslogとして転送することも可能です。利用方法によってはデータ解析以上の威力を発揮するツールだと言えます。
Elasticsearchは、Javaで作られている分散処理型の検索エンジンです。クラスタ構成を組むことができるのが特徴で、大規模な環境で検索エンジンとして利用されることがあります。GitHubのリポジトリ検索や、Dockerのコンテナ検索、Facebook上での検索などの機能はElasticsearchを利用して作成されています。
クラスタとは、物理的には複数存在しているにも関わらず、論理的にはひとつとして見せることができる技術です。処理の負荷分散が可能なため、高い性能を求められる環境で多く選択されています。
バージョン6.3から、新しくSQLを用いた検索に対応する機能が追加されました。以前はJSON形式でクエリを記述していましたが、学習コストがかかることが難点でした。しかし、SQLを用いたSelect文は認知度が高いため、普段Elasticsearchに触れる機会が少ないエンジニアでも検索ができるようになります。これに対応して、KibanaからElasticsearchへクエリを発行することが可能となりました。
注意するべきこととして、SQLは基本的にSelect文だけが利用できます。Delete・Insert文など、データを操作するクエリは利用できません。合わせて、JDBCドライバ経由でのSQL操作はサブスクリプションの購入が必要です。詳しいライセンスは公式ホームページのElasticsearch・管理とツール(https://www.elastic.co/jp/subscriptions)を確認してください。
Kibanaは、Elasticsearchに貯めた情報を整形・可視化するツールです。KibanaはJavaScriptで開発されており、Node.js上で実行されています。Google Chrome等のブラウザーからKibanaで設定したURLにアクセスすることで、データ情報を表示できます。
Kibanaは知りたい情報の件数だけでなく、折れ線グラフ・棒グラフ・円グラフを用いてデータの詳細な情報を解析し、色分けして表示することが可能です。グラフの大きさを決める際にコンフィグファイルなどを編集する必要がなく、ブラウザー上での操作で全て完結する仕組みとなっています。また、情報をリアルタイムで閲覧できるため、サーバーのリソース情報をKibanaで常に監視するという使い方もできます。
BeatsはOSにインストールすることで、機器のデータをElasticsearchやLogstashに転送する簡易的なデータ収集ツールです。
ネットワークのパケット情報・Windowsのイベントデータ・死活監視の情報などを収集可能なため、Logstashでカバーできないような情報を集めることができます。
例えばMetricbeatを使用することで、CPU使用率やメモリ使用率などサーバー情報を自動で収集し、Kibanaで可視化できるようになります。また、センサーデータなどもBeatsを用いて収集できるため、IoT分野でのデータ分析もElastic Stackを用いて行えます。
さらにBeatsには、特定のデータであればその収集・Elasticsearchへのデータ連携・Kibanaでの情報分析用グラフの描画までを自動で行うModulesという機能も存在します。
Elastic Stackの中にはElasticsearchやKibanaの機能を補完するツール群をElastic Licenseを適用して配布しているものがあります(https://github.com/elastic/elasticsearch/blob/7.4/licenses/ELASTIC-LICENSE.txt)。
Elastic Stackの各アプリケーションや機能はApache LicenseとElastic Licenseの2つが適用されています。Apache Licenseが適用されている機能であれば自由に利用できます。
ただし、Elastic Licenseで提供されている機能は、Elastic Stackのサブスクリプション契約を行わないと利用できません。Elastic Licenseで提供されている機能のソースコードを参照することは可能です。オープンソースソフトウェア(OSS)ではありませんので注意してください。
ライセンスの形態や、各ライセンスごとに利用できる機能は変化します。最新情報はElasticsearch社の公式ホームページ(https://www.elastic.co/jp/subscriptions)を参照してください。
以下にElastic Licenseで使用できる機能を簡単に紹介します。この本では詳しく扱いませんので、Elasticsearch社のホームページ(https://www.elastic.co/jp/products)を参照してください。
・KibanaやElasticsearchへのアクセス制御など、データ保護を行う(Security)
・データ情報の通知をSlackなどに送付する(Alerting)
・Elastic Stackの状態を監視する(Monitoring)
・KibanaのグラフをPDF出力するなど、報告用データを作成する(Reporting)
・Elasticsearch内のデータで、関連性の高いものを紐付ける(Graph)
・取得したデータから基準値を作成し、データの傾向を分析する(Machine Learning)
・Elastic Stack全体を監視する
・サポート窓口への相談・問い合わせ
APMとはApplication Performance Monitoringの略称です。APMでは、アプリケーションのパフォーマンス計測に特化した機能を利用することができます。APMの利用方法は簡単で、アプリケーション内にエージェントを組み込むコードを記載するだけです。利用可能な言語・フレームワークはNode.js・Django・Ruby on Rails・Goなど、最近多く利用されているものが対象となっています。パフォーマンスの状態はKibanaの専用UIで監視することが可能です。Beatsと組み合わせて利用することで、Webアプリケーションに関連するプロセスの監視を、全てElastic Stackで賄うことができるかもしれません。
バージョン7から、SIEM機能が追加されました。SIEMとは、Security Information and Event Managementの略称で、セキュリティー情報に関連するイベントを管理するためのツールです。Elastic StackのSIEM機能では、Beats(Auditbeat)で収集したLinuxのプロセス情報や、ネットワークのトラフィック情報を分析できます。
Elasticsearchに収集したデータを元にセキュリティー分析を行うため、一度Elastic Stackでデータを収集する環境ができてしまえば新しくツールを導入すつ必要はありません。また、データの収集方法はBeatsやLogstashを使って行います。専用ツールの操作方法を習得する必要はありません。
SIEM機能はElastic LicenseのBasic以上を適用すると使用できます。詳しくはElasticsearch社の公式ホームページhttps://www.elastic.co/jp/products/siemを参照してください。
Elastic CloudはElasticsearch社が提供するクラウド環境です。Elasticsearchの中に大量のデータを保存する場合など、高性能の基盤を準備する必要がある場合に利用すると良いでしょう。Elasticsearchのクラスターを組むことも簡単にできます。ただしこちらも有償となりますので、この本では詳しく取り扱いません。詳細はElasticsearch社のホームページ(https://www.elastic.co/jp/cloud)を参照してください。
この本ではデータを収集するLogstashまたはBeats、データを貯めておくElasticsearch、データを閲覧するKibanaを基本構成として使用します。