Amazon ElasticsearchとKibanaの概要、両者を組み合わせた場合の活用例について

はじめに

システムの写真

今回はAmazon Elasticsearch Service(以後、AmazonES)とKibanaについてご紹介していきたいと思います。そもそもElasticsearchとはAWS独自のサービスではなく、Elastic社が提供する「Lucene」ベースとなる、ログ分析、リアルタイムのアプリケーションモニタリング、クリックストリーム分析などのユースケース向けのオープンソース全文検索エンジンです。そのElasticsearchをAWSのリソースに対して使いやすくUIを提供しているのがAmazonESとなります。KibanaはAmazonESの結果を出力するためのログデータ解析/可視化ツールです。Webブラウザ上で使用でき、リアルタイムのログ分析が可能となります。本記事ではまず両者は何なのかを押さえたうえで、その使用例を紹介します。

全文検索とは

Elasticsearchが全文検索エンジンであることは前述したとおりですが、全文検索とは何なのでしょうか。「全文検索」の「全文」とは、「全ての文字」という意味で、複数の文書ファイルの中に含まれている全ての文字を対象として、その中から何かを探すということになります。サクラエディタなどを使用し大量のソースコードをgrepして、各ソースファイルの該当の関数が書かれている行の一覧を取得する、これは全文検索といえると思います。ただ全文検索とはgrepのように逐次的に検索するものだけではありません。全文検索技術には、大別して「逐次検索」(例:grepなど)、もう一つ「索引」を用いての全文検索があります。逐次検索はひとつずつチェックする分、検索の精度は高いものの、検索する対象が増えると当然ながらそれだけ時間が多くかかってしまいます。一方索引を用いた検索では、この速度の問題を解決できます。索引とは、ある文書の中の文字列や事項(国・地域・人名…etc)などを、簡単に探し出せるように抽出して並べた表のことを言います。コンピュータ用語としては「インデックス」と呼ばれます。検索の対象となる複数の文書ファイルをあらかじめ中身をチェックしておき、その内容を記した索引データを準備することで余計なパフォーマンスをかけずに効率的に検索することができます。Webサイトの検索エンジンはクローリングし、インデックスしていますが、これを行っているといえるでしょう。ただ当然ではありますが索引データを作成する処理は、検索の前に事前におこなっておく必要があり、その際には負荷の高い処理になるということに注意しておく必要があります。

N-Gramと形態素解析

索引を作成する手法として、N-Gramと形態素解析があります。両者の大きな違いは、「⁠転置インデックスの見出し語をどのように作るか」というプロセスが異なる点です。書籍(専門書など)の巻末にある索引は,本における転置インデックスといえます。巻末には通常,キーワード(単語)とそのキーワードが出てくるページが記載されています。キーワードはアイウエオ順やアルファベット順に並べられているので、探したいキーワードを簡単に見つけることができ,そのキーワードがどのページで言及されているかが一発でわかります。この本の索引がまさに転置インデックスであり、見つけたいキーワードを索引から探す処理が検索処理そのものとなります。形態素解析は構文解析を行って分かち書きを行うのに対して,N-gramでは機械的にN文字の文字列片に分けるという処理となります。

AmazonESの特徴

Elasticsearchの特徴としては、Elastic社が開発しているLuceneベースの全文検索エンジンであり、RESTful APIでCRUD操作可能(様々なシステムと連携しやすい)、分析機能が豊富(後述するKibanaとの連携)、クラスタ、スケーリングが簡単、N-Gramと形態素解析(kuromoji)の両方が使用可能、となります。Amazon ESは、AWS クラウドの Elasticsearch クラスターを、簡単にデプロイ、運用、スケールするマネージド型サービスです。AmazonESは本家ElasticCloudのElasticsearchサービスとは同じ機能は持っておらず、機能が限定されています。ただAWSの機能の一つとなっているため、他のAWSサービスとの連携は優れています。

Kibanaとは

Kibanaは AmazonES(データベース)に対するフロントエンドでデータのビジュアライズを行います。基本的には時系列データを扱うことを主目的にしています。幾つかの形式のグラフ描画をサポートしていてGUIで設定するだけでグラフを作成できることを特徴としています。

活用の具体例

活用例の一つとして、Twiiterとの連携が考えられます。LambdaでTwitterAPIを介して取得したTwitterの情報を、Amazon Comprehend(AWS の提供する自然言語処理(NLP)サービス、文章を入力として与えることで、エンティティやキーフレーズ、主要言語の検出ができたり、感情分析や構文分析、トピックモデリングができる)を利用し、ツイートの感情分析(ポジネガ分析)を行いつつ、AmazonESとKibanaでタグクラウドなどを用い、ツイートの傾向などを可視化するというものです。またもう一つの例としては、AmazonESと Kibana を使用したカスタマーサポートのコールの分析に役に立つかもしれません。コールセンターというのは日々の膨大な問い合わせ記録を継続的に保存し、かつリアルタイムのコール状況などを可視化して運営しているものですが、これにAmazon Transcribe(音声をテキストに自動変換する)、Amazon Comprehend、AmazonES、Kibanaを組み合わせ分析することで、従業員が通話記録を聴き、各問い合わせの件名をメモし、顧客とのやり取りが肯定的であったかどうかを判断する作業を自動化し、また結果を可視化できる可能性があります。

おわりに

今回はAmazonESとKibanaの概要と、そして使用例を簡単に説明しました。AmazonESとKibanaの組み合わせは、他のAWSのサービスとも連携して、様々なソリューションを生み出すことができる大変便利な機能となっています。ぜひこの機会に導入を検討してみてはいかがでしょうか?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です