【初心者向け】Elastic Stackについて知ろう

2020.11.30

みなさん、Elasticsearchって聞いたことありますか?
JSONベースの検索/分析エンジンで、AWSのサービスとしてはAmazon Elasticsearch Serviceとして提供されています。

Elasticsearchの説明として公式ドキュメントの言葉を借りると、「Elasticsearchは分散型RESTful検索/分析エンジンでデータを一元的に格納することで、超高速検索や、関連性の細かな調整、パワフルな分析が大規模に、手軽に実行可能になります。」とあります。私は初めて読んだときにあまりピンと来ませんでした。

本記事ではElasticsearchを触ったことがないという方がイメージをつかめるように、Elasticsearchを知る上で欠かせないElastic Stackと呼ばれている、Elasticsearchを中心としたコアプロダクト群(ElasticsearchKibanaBeatsLogstash)について簡単に紹介したいと思います。

実際に利用する方法等については下記の別記事として紹介しているので具体的にどう触るのかなと思った方は参照してみてください。
(今回は、Elasticsearchを触る上で"ほぼ"必須となるKibanaの紹介までとしました。Beats, Logstashについてはもし記事を書いた際は追記します。)

※本記事は、あくまでElasticsearchに触ったことがないという方向けに紹介する記事のため、仕様等の説明はある程度省いています。

Elastics Stackとは

Elastic Stack(ElasticsearchKibanaBeatsLogstash)とは、Elastic社自身で開発を行っているElasticsearchを使う上で欠かせない処理を担うプロダクトのことです。

簡単な言葉で表すと以下のようになります。

  • Elasticsearch:心臓部となるJSONベースの検索/分析エンジン
  • Kibana:検索、可視化用のUI
  • Beats:アプリやインフラの統計情報等のデータ収集ツール
  • Logstash:データ収集パイプライン

一枚の絵にすると以下のような関係性になります。

これらのプロダクト群を組み合わせることで、Elasticsearchを利用したデータ収集、検索、分析、可視化といった処理を簡単に行うことができるようになります。

それでは、それぞれのプロダクトがどのような役割,機能を担っているのかについて見てみましょう。

Elasticsearchとは

Elasticsearchとは、JSONベースの検索/分析エンジンです。

公式ドキュメントでは、Elasticsearchではテキスト、数値、地理空間データといった情報をに対してインデックス付けを行うことで、高速な検索,集計処理が行えるようになり以下のようなユースケースに対応できるとしています。

  • アプリ検索
  • Webサイト検索
  • エンタープライズサーチ
  • ロギングとログ分析
  • インフラメトリックとコンテナー監視
  • アプリケーションパフォーマンス監視(APM)
  • 地理空間データ分析と可視化
  • セキュリティ分析
  • ビジネス分析

とても簡単なイメージとして表すとこんな感じです

ここでデータの登録、検索の簡単な例を見てみましょう。 Elasticsearchの操作は基本的にREST APIで行うためcurlを用いた例を見てみます。

1つのデータを追加する際には、ドキュメントを追加するインデックス、ドキュメントID、ドキュメント本文(JSON)を指定してPUTリクエストを行うことでデータを登録します。 以下の例では、bankインデックスにドキュメントIDを1として、アカウント情報を表すデータを登録しています。

curl -X PUT "localhost:9200/bank/_doc/1?pretty" -H 'Content-Type: application/json' -d'
{
    "account_number":1,
    "balance":39225,
    "firstname":"Amber",
    "lastname":"Duke",
    "age":32,
    "gender":"M",
    "address":"880 Holmes Lane",
    "employer":"Pyrami",
    "email":"amberduke@pyrami.com",
    "city":"Brogan",
    "state":"IL"
}
'

このリクエストに対するレスポンスは以下のようになります。 意図したインデックスの指定したドキュメントIDにドキュメントが登録されたことという情報が返ってきています。

{
  "_index" : "bank",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "_seq_no" : 26,
  "_primary_term" : 4
}

このようなデータを大量に登録したとして、addressフィールドにmillまたはlaneが含まれている情報を検索する際は以下のようにGETリクエストを行います。

curl -X GET "localhost:9200/bank/_search?pretty" -H 'Content-Type: application/json' -d'
{
  "query": { "match": { "address": "mill lane" } }
}
'

このようにElasticsearchでは、REST APIを介してデータの登録や検索といった操作が行われます。

Kibanaとは

Kibanaとは、Elasticsearchに登録されたデータの検索,可視化,分析を行うためのUIを提供するWebアプリケーションです。 前項で触れたようにElasticsearchに対する操作は基本的にREST APIを用いて行うのですが、データの検索や分析を行うために都度curlコマンドを叩くのは骨が折れます。そこでElasticseachのデータを検索、分析、可視化するためのUIとしてKibanaが存在します。

よく使われる機能としては以下のようなものがあります。

  • Dashboard
    • 登録されたデータの可視化結果を閲覧するUI

  • DevTools (Console)
    • Elasticsearchに対するREST APIを簡単に実行できるUI

このようにKibanaを利用することでElasticsearchに登録されたデータに簡単にアクセスすることができるようになります。

Beatsとは

Beatsとは、Elasticsearchに取り込むデータを収集するプロダクトの総称です。複数形になっている理由は、取り込み対象のデータ毎に専用プロダクトに分かれているためです。

以下のBeatsが存在します。

  • Filebeat
    • ログファイル
  • Metricbeat
    • CPU使用状況、メモリ、ファイルシステム、ディスクI/O、ネットワークI/Oなどの統計情報
  • Packetbeat
    • ネットワークパケット
  • Winlogbeat
    • Windosイベントログ
  • Auditbeat
    • auditdと同様の監査データ
  • Heartbeat
    • アプリの稼働状況
  • Functionbeat
    • クラウドのインフラ情報

これらのBeatを利用することで上記のようなデータをElastic Common Schema(ECS)と呼ばれるElasticsearch用に構造化されたデータ形式で取り込むことができます。

Logstashとは

Logstashとは、Elasticsearchにデータを取り込むためのパイプラインです。

Logstashでは、データ収集,加工,出力といった一連の処理をPipelineと呼び、それぞれの機能がInput Plugin, Filter Plugin, Output Pluginと呼ばれるPlugin形式で提供されています。 それらを組み合わせることで様々な入力データに対して解析や変換を行い、様々な出力先にデータを転送することができます。

とても簡単なイメージとして表すとこんな感じです

データ取り込みという目的では前項で紹介したBeatsと似ているように感じられますが、Beatsは各Beatが個々の取り込み対象に特化しておりデータの変換等の機能は制限されてるのに対し、Logstashの特徴は各Pluginによる入力データに対する柔軟な変換・加工処理が行える点です。

以下のブログ記事を参考にするとイメージがつきやすいと思います。

おわりに

Elastic Stackについて、触ったことがない方向けに簡単に紹介してみました。 各プロダクト群がどのような役割を担っているのかをイメージしてから公式ドキュメントを読むなどすると理解が早いかと思います。

この記事でElastic Stackを触ったことがないという方が少しでも興味を持っていただければ幸いです。