121 Views
December 26, 20
スライド概要
.NETラボ 勉強会 2020年12月
https://dotnetlab.connpass.com/event/197706/
「改訂新版:ASP.NET Core で Elasticsearch を統合する方法」
Elastic Technical Product Marketing Manager/Evangelist 内閣官房IT 総合戦略室政府 CIO 補佐官 鈴木 章太郎
10月に実施した内容の改訂新版です。Elastic は超高速な OSS の検索エンジンで、どこにでもデプロイができ、様々なパブリッククラウド上でも稼働、多くの部分が無償で使えます。検索の力を活かして監視、セキュリティソリューションも提供しています。Elastic 概要、Azure への Elastic Cloud デプロイ、データ投入、Visual Studio Code の Elastic プラグイン、.NET 用クライアントライブラリをご紹介して、次に CQRS パターンとの連携について触れつつ、基本的な概念、アーキテクチャ、クエリ等をおさらいします。そして前回よりさらに単純化した .NET Core アプリを使って、全文検索、用語クエリ、マッチクエリ、集計、範囲集計、カテゴリ集計、などの具体的な実装を一つずつご紹介していきます。
FPT ジャパン エグゼクティブエバンジェリスト 独立行政法人 国立印刷局 デジタル統括アドバイザー兼最高情報セキュリティアドバイザー Microsoft で13年間、テクニカルエバンジェリストとして .NET、C#、Visual Studio、Windows、iOS、Android、Microsoft Azure 等の開発者向け技術啓発活動 (DevRel) 。Dell、Accenture、Elastic、VMware 等での DevRel 後、2024年11月1日より現職で DevRel 活動を開始。NVIDIA との戦略的協業 AI GPU クラウド、Azure/AWS/GC 上の AI &データ関連サービスのマーケティング、プリセールス、教育、関連新規サービス開発。元内閣官房 IT 総合戦略室 政府 CIO 補佐官(兼務)、元デジタル庁 ソリューションアーキテクト(兼務)。
改訂新版︓ ASP.NET Core で Elasticsearch を統合する⽅法 鈴⽊ 章太郎 Elastic テクニカルプロダクトマーケティングマネージャー/エバンジェリスト 内閣官房 IT 総合戦略室 政府 CIO 補佐官
Shotaro Suzuki Twitter : @shosuz Elastic Technical Product Marketing Manager/Evangelist 内閣官房 IT 総合戦略室 政府 CIO 補佐官 元 Microsoft Technical Evangelist
このセッションの⽬的 • • • • Elastic は超⾼速な OSS の検索エンジン どこにでもデプロイができ、様々なパブリッククラウド上でも稼働 検索の⼒を活かして監視、セキュリティソリューションも提供 今回は、下記の内容をご紹介します – Elastic 概要と Microsoft Azure への Elastic Cloud デプロイ – Visual Studio Code の Elastic プラグインご紹介 – .NET ⽤のクライアントライブラリご紹介 – ASP.NET Core Web アプリへの検索機能の追加⽅法
Elastic 概要から Elastic Cloud まで
40以上の国に従業員がいます。 ニューヨーク証券取引所に上場して います。
3 Solutions, 1 Stack, Deploy Anywhere 3 つのソリューション Elastic エンタープライズサーチ Elastic オブザーバビリティ Elastic セキュリティ Kibana Elastic スタックで実現 Elasticsearch Beats 豊富なデプロイ選択肢 Logstash Elastic Cloud Elastic Cloud Enterprise SaaS (AWS/Azure/GCP) IaaS (クラウド & オンプレ) Elastic Cloud on Kubernetes Kubernetes (クラウド & オンプレ)
Elastic Cloud on Azure デプロイ https://www.elastic.co/jp/
Elastic Cloud on Azure デプロイ https://portal.azure.com
Kibana 起動時の認証情報をダウンロード (.csv)
Elastic Cloud on Azure デプロイ https://www.elastic.co/jp /
なぜアプリ検索に Elasticsearch が必要か
なぜ Elasticsearch なのか︖ 企業では主にリレーショナルデータベースを使⽤してデータを格納 • • • • テーブルを簡単に結合し、必要なデータベースからこのデータを取得できる しかし、時間の経過とともに、データベースとテーブルが肥⼤化して、数百万のデータセットを含む⼤規模なデータ ベースになると、操作を実⾏できなくなる ⼀⽅、Elasticsearch は、数百万のドキュメントを数秒で簡単に検索できる Elasticsearch は、柔軟で強⼒なオープンソースの分散型リアルタイム検索 および分析エンジン • • • • Elasticsearch はドキュメントベースのデータベースでデータを JSON 形式で保存 Elasticsearch は、アプリケーションの強⼒な検索ツールとして使⽤できる インデックス、ドキュメント、フィールド等を作成し、データを Elasticsearch にプッシュで、検索の準備が整う Elasticsearch の2つのユニークで重要な機能 • • • ⽔平スケール ⾼可⽤性
CQRS (コマンドクエリー責任分離)との関係 • • https://docs.microsoft.com/ja-jp/azure/architecture/patterns/cqrs
事例︓三井住友 DS アセットマネジメント株式会社 アナリストが利⽤する資産運⽤での⾼速情報検索に向け Elasticsearch を導⼊。 35種類のデータソースを Elasticsearch に集約し、圧倒的な検索パフォーマンスで業務を⽀援 https://www.elastic.co/jp/customers/smd-am
膨⼤なデータ処理とリアルタイム性を要求 される配⾞マッチング検索で Elastic を活⽤ 1秒あたりのデータ投⼊件数︓ 1⽇あたりのデータ投⼊量︓ 1秒あたりのドキュメントスキャン︓ データサイズ︓ クラスターサイズ︓ インジェスションパイプライン︓ 85万から130万メッセージ 12TB 1億から40億のドキュメント数 1PB 700台の Elasticsearch 100 + Data パイプラインジョブ 2018年4⽉の Qcon での Uber 様 講演より https://www.infoq.com/presentations/uber-elasticsearch-clusters/
Elasticsearch for VSCode
Elasticsearch for VSCode インストール https://marketplace.visualstudio.com/items?itemName=ria.elastic
Elasticsearch for VSCode ホスト設定 • • • https URL ユーザ パスワード
Elasticsearch for VSCode ホスト設定 http://user:pass@host:9200 https://elastic:oRHGj80iJUO6CF7WBUMiwyu1x@8009bf958b6w592 3b3c56983d4048df824.japaneast.azure.elastic-cloud.com:9243
Elasticsearch ドキュメント CRUD 操作 と VS Code による Demo
Elasticsearch の概念 - インデックス・ドキュメント・フィールド • • • • Elasticsearch の概念 具体例 SQL Server, MySQL, PostgreSQL 等 書籍データが インデックス 格納される テーブル 場所 ドキュメント 書籍データ フィールド レコード 書籍タイトル、 著者、出版⽇、カラム 等
Elasticsearch ドキュメントの操作 • • https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
新しいドキュメントの作成 -1 • • • • • PUT books/_doc/1 { "id": ”1", “title”: ”Elastic ⼊⾨", "date":”Oct 1, 2020", "author":{ "first_name": ”Shotaro", "last_name": ”Suzuki" } }
新しいドキュメントの作成 -2 • • “title”: “title”: “title”: “title”: “title”: ”Elastic ⼊⾨ - Elasticsearch/Kibana/Logstash/Beats” ”Elastic & ASP.NET Core 3.x プログラミング” ”Elastic による AKS Log/Metric/APM 管理” ”Visual Studio Code による Elasticsearch プログラミング” ”Elastic Logstash/Beats 開発と管理 徹底解説”
ドキュメントの取得 - 1 • (結果) { "_index": "books", "_type": "_doc", "_id": "1", "_version": 1, "_seq_no": 0, "_primary_term": 1, "found": true, "_source": { "title": "Elastic 入門", "date": "Oct 1, 2020", "author": { "first_name": "Shotaro", "last_name": "Suzuki" } } • GET books/_doc/1/ }
ドキュメントの取得 – 2 _source のみ • (結果) • { "title": "Elastic 入門", "date": "Oct 1, 2020", "author": { "first_name": "Shotaro", "last_name": "Suzuki" } GET books/_doc/1/_source }
ドキュメントの検索 – 1 全てのデータを検索 • • • took – Elasticsearchが検索を実⾏するのにミリ秒単位の時間 timed_out –検索がタイムアウトしたかどうかを⽰します _shards –検索されたシャードの数と、検索されたシャードの成功/失敗の数を⽰す hits –検索結果 hits.total –検索条件に⼀致するドキュメントの総数 hits.hits –検索結果の実際の配列(デフォルトは最初の10ドキュメント) POST books/_doc/_search { ”query": { “match_all” : {} } } hits.sort -結果のソートキー(スコアでソートする場合は⽋落) https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
ドキュメントの検索 – 2 シャードとは • • • • • • コンテンツボリュームを⽔平に分割/スケーリングすることが可能 シャード間(場合によっては複数のノード上)で操作を分散および並列化できるため パフォーマ ンス/スループットが向上 https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
ドキュメントの特定のデータの検索 – クエリ DSL とは︖ • • • • POST books/_doc/_search { "query": { "match" : { "title" : "Elasticsearch" } } } Elasticsearch データをクエリする⽅法はたくさんあります。詳細についてはこちら。 https://www.elastic.co/guide/en/elasticsearch/guide/current/_most_important_queries.html
ドキュメントの更新 - 1(データの変更) • POST books/_doc/1/_update { "doc": { GET books/_doc/1 { "title": "Elastic ⼊⾨ – "title": "Elastic ⼊⾨ Elasticsearch/Kibana/Logstash/Beats" Elasticsearch/Kibana/Logstash/Beats", "date": "Oct 21, 2020", "author": { "first_name": "Taro", "last_name": "Sato" } } } }
ドキュメントの削除(データの削除) • • DELETE books DELETE books/_doc/3
ASP.NET Core アプリから Elasticsearch に接続する
新しい ASP.NET Core Web アプリ作成 dotnet new mvc
Model の作成 • Elasticsearch のデータ から JSON にシリアライズ のため必要 • Book という名のクラスを 追加 public class Book { public string Title { get; set; } public string Isbn { get; set; } public int TotalPageNumber { get; set; } public string PictureUrl { get; set; } public string Abstract { get; set; } public string Description { get; set; } public string Status { get; set; } public string Authors { get; set; } public string Categories { get; set; } }
Elasticsearch への接続を作成 • NEST ライブラリ追加 dotnet add package NEST • Startup.cs のサービス構成メソッド( )内に接続を作成 using Elasticsearch.Net; using Nest; === var pool = new SingleNodeConnectionPool (new Uri(“http://localhost:9200”)); //ローカル実⾏の場合 var settings = new ConnectionSettings(pool) .DefaultIndex("books"); var client = new ElasticClient(settings); services.AddSingleton(client);
Elasticsearch への接続を作成 - Elastic Cloud ⽤ • var pool = new SingleNodeConnectionPool (new Uri(http://localhost:9200/)); // Elastic Cloud デプロイ時に取得した値3つ (例) https://elastic:oRHGj80iJUO6CF7WBUMiwyu1x@8009bf95 8b6w5923b3c56983d4048df824.japaneast.azure.elastic -cloud.com:9243
Search ⽤の HTML を作成 (index.cshtml 編集)
•
•
•
•
•
@model を
[ISearchResponse]<Book>
に設定
これは Elasticsearch 呼び出し
からの応答のタイプ
検索クエリをサーバーにポストバック
できる HTML フォームを追加
Elasticsearch に渡して結果をレ
ンダリング
⼀致するドキュメントのタイトルと
ISBN をレンダリングする単純な
ループを追加
@model Nest.ISearchResponse<Book>
<form asp-controller="Home" asp-action="Index"
method="post">
<input type="text" name="query" />
<input type="submit" value="Search" />
</form>
@if (Model.Documents.Any())
{
<h3>検索結果</h3>
<ul>
@foreach (var book in Model.Documents)
{
<li>Title: @book.Title (ISBN:
@book.Isbn)</li>
}
</ul>
}
Elasticsearch クエリー ① MatchAll
•
インデックス内の全てのドキュメントを返す
クエリ
≒ RDBMS の "SELECT *" クエリ
private readonly ElasticClient _client;
public HomeController(ILogger<HomeController> logger, ElasticClient client)
{
_logger = logger;
_client = client;
}
•
public IActionResult Index()
{
var results = _client.Search<Book>(s => s
.Query(q => q
.MatchAll()
)
);
return View(results);
}
Elasticsearch クエリー ② Term
•
public IActionResult Index()
{
ISearchResponse<Book> results;
if (!string.IsNullOrWhiteSpace(query))
{
var results = _client.Search<Book>(s => s
.Query(q => q
.Term(t => t)
.Field(f => f.Isbn)
.Value(query)
)
)
);
}
else
{
.Query(q => q
.MatchAll()
)
);
…
⽤語クエリ
正確なクエリに⼀致するドキュメントを
⾒つける
ユーザーにテキストを⼊⼒し、そのテキ
ストをドキュメント内のコンテンツの任意
の部分と⼀致させる
Elasticsearch クエリー ③ Match
•
public IActionResult Index(string query)
{
ISearchResponse<Book> results;
if (!string.IsNullOrWhiteSpace(query))
{
results = _client.Search<Book>(s => s
.Query(q => q
.Match(t => t
.Field(f => f.Title)
.Query(query)
)
)
);
}
else
{
…
[重要な点]
• 複数のドキュメントを照合
• すべての⼀致する⽂書には、タイトル
に、当該テキストが含まれる
•
•
•
⼩⽂字で指定したのにマッチする
この動作はカスタムアナライザーで
上書き可能
これは別の⾼度なトピック
•
Elasticsearch でサポートされる
クエリは他にも多数
•
Term クエリと Match クエリは
基本的ユースケース
Elasticsearch Aggregations ー 集計
Elasticsearch Aggregations ー 範囲集計 • … results = _client.Search<Book>(s => s .Query(q => q .MatchAll() ) .Aggregations(a => a .Range(”totalPages", r => r .Field(f => f.TotalPageNumber) .Ranges(r => r.From(0), r => r.From(200).To(400), r => r.From(400).To(600), r => r.From(600) ) ) … [重要な点] • MatchAll クエリに加えて、集計メソ ッドを使⽤ • "範囲" 集計を指定 • Index.cshtml も編集必要
Elasticsearch Aggregations ー 条件集計 • • • • タグバブルやファセットUIシステム のユースケース ⽤語集計 ≒ RDBMS の“GROUP BY”句 ドキュメント間でさまざまな単語 (または「⽤語」)に関する統計を 取得可能 • Index.cshtml も編集必要 • … ) .Aggregations(a => a .Range(”totalPages", r => r .Field(f => f.TotalPageNumber) .Ranges(r => r.From(0), r => r.From(200).To(400), r => r.From(400).To(600), r => r.From(600) ) ) .Terms("categories", t => t .Field("categories.keyword") ) ) … フィールド値が⽂字列 “categories.keyword” に設定されているのは、⽤語の集計は負荷の⾼い 操作であり、通常は "text" フィールドでは実⾏され ないため
Search ⽤の HTML を修正 (index.cshtml 編集)
@model Nest.ISearchResponse<Book>
<form asp-controller="Home" asp-action="Index" method="post">
<input type="text" name="query" />
<input type="submit" value="検索" />
</form>
@if (Model.Documents.Any())
{
<h3>検索結果</h3>
<ul>
@foreach (var book in Model.Documents)
{
<li>Title: @book.Title (ISBN:
@book.Isbn)</li>
}
</ul>
}
@if (Model.Aggregations != null)
{
<h3>集計</h3>
@if (Model.Aggregations.ContainsKey(”totalPages"))
{
<h4>ページ数 (範囲)</h4>
<ul>
@foreach (var bucket in
Model.Aggregations.Range(”totalPages").Buckets)
{
<li>@bucket.Key: @bucket.DocCount</li>
}
</ul>
}
@if (Model.Aggregations.ContainsKey("categories"))
{
<h4>カテゴリ (Terms)</h4>
<ul>
@foreach (var bucket in
Model.Aggregations.Terms("categories").Buckets)
{
<li>@bucket.Key: @bucket.DocCount</li>
}
</ul>
}
}
まとめ • • • • • •
アプリケーション開発 オンデマンド ウェビナー特集 • Elastic の Search API を Visual Studio Code でコーディングする (1) - (3) • Elastic Cloud で Azure Kubernetes Serviecs の様々な Log/Metrics/APM を 可視化する • ASP.NET Core 3.x Web アプリのログを Elastic Cloud で収集・分析してみよう︕ https://www.microsoft.com/ja-jp/events/top/apps-innovation-webinars.aspx
Thank you for your attention!
(参考) Logstash による Elasticsearch へのドキュメント⼀括挿⼊
Logstash による Elasticsearch へのドキュメント⼀括挿⼊ https://docs.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-2017 sqlazuredb.conf という名前で作る
Logstash インストール(macOS の場合) // brew の更新 brew update // Elasticsearch インストール brew install elasticsearch // サービスを⼀覧表⽰したり、サービス(Elastic など)起動もできる brew services list brew services start elasticsearch //Elastic が正常にインストールされたら、Logstash をインストール //このタスクを達成するために必要なのは、別の brew コマンドだけ brew install logstash //インストールが終わったら同じくサービス起動 brew services start logstash
Azure SQL Database ⽤設定ファイル(logstash.conf)のコード例 (1)
sqlazuredb.conf
com.microsoft.sqlserver.jdbc.SQLServerDriver
"jdbc:sqlserver://hostname.database.windows.net:1433;
database=AdventureWorksLT;encrypt=true; hostNameInCertificate=*.database.windows.net"
”<username>@hostname"
”<password>"
/Users/(username)/Documents/sqljdbc_8.4/jpn/mssql-jdbc-8.4.1.jre8.jar"
"com.microsoft.sqlserver.jdbc.SQLServerDriver"
"Select * from [SalesLT].[Customer]"
Azure SQL Database ⽤設定ファイル(logstash.confB)のコード例 (2) sqlazuredb.conf filter{} output { stdout{ codec=>json_lines } elasticsearch{ cloud_id =>":bynGyXZ6lYXN0LmF6dXJlLmVs8w867943534egGKh6GBZXQITdk34XN0aWMtY2xvdWQuY29tOjkyN…DMkNzA===" cloud_auth => "elastic:pHkMI91iGYZ4DG9KCVNjxn2y” index=>"customer1" } }
Logstash によるデータ取得と Kibana によるインデックスパターン作成・データの表⽰
他の事例
事例︓ソフトバンク・ペイメント・サービス株式会社 オンライン決済サービスの監視を⽀える Elastic Stack ECサイト向けに様々な決済⼿段を提供 / 加盟店に決済画⾯は決済APIを提供するシステム(年間取引額2兆円、2億件以上のトランザクション) オンライン決済サービスの状況をほぼリアルタイムで可視化 • ダッシュボードで、成功した決済はグリーン、失敗したものはレッド、決済手段ごと に OK/NG の比率の推移を俯瞰。「1. グリーンが急激に少なくなったら要注意。2. レッ ドが急激に多くなったら要注意。」 • 誰でも、いつでも、どこでも、簡単に、サービスの状況を把握 • 障害以外でも、爆売れ、不正利用といった、加盟店の変化に気がつく • エンジニアの決済トランザクションへの関心が高まる Machine Learning で決済トランザクションの異常を検知 • 決済トランザクションの合計の日次の増減を3周期で学習し、それが予測した範 囲から大きく外れれば、異常として検出 • 可視化だけでは埋蔵してしまう変化を ML にて新たに発見 可視化をビジネスデータにまで広げる • 2年分の売上推移を部署別・案件別に表現。ヒートマップで営業部門や個人の目 標達成率を表現。年間の加盟店契約の獲得状況を都道府県マップに表示 • サービスサイト閲覧状況を、アクセス元の IP アドレスから企業名を推定し、契約 済み企業からのアクセス、未契約企業からのアクセスランキングを作成 • 非エンジニアでもデータ投入からダッシュボードの作成までできる https://www.elastic.co/jp/customers/softbank-payment-service
事例︓株式会社リコー すべてのログを Elastic Stack 上に集約。35 ノードで1 ⽇2TB のログを監視 「リコーグループ全システムの IT デバイスで発⽣する1 ⽇2 テラバイトにおよぶログが、すべて Elastic Stack に送り込まれます。これを35ノード、約400テラバ イトのクラスターで処理します。インデックス数は約10,000 でサイズは約250 テラバイト。ドキュメント数は3,450 億にも及びますが、これは昨年12 ⽉の話で、 現在はさらに増えている状況です」と話す。Elastic Stack の製品については、Elasticsearch、Logstash、Kibana、Filebeat、Packetbeat、 Winlogbeat、Monitoring、Alerting 等が使⽤されており、特に⾒える化でキーとなる Kibana については、セキュリティ統括部のオフィス室内で、⼤型 モニターに常時チャートが表⽰され、担当者がシステムの状況をリアルタイムかつ直感的に把握できるようになっている。 https://www.elastic.co/jp/customers/ricoh
事例︓ブローダービズ株式会社 機械学習を駆使して時系列の映像データを解析。⾷品製造⼯場での作業を"⾒守り"、 異常⾏動発⽣をリアルタイムに検知してトラブルを回避 ⾷品偽装防⽌と働き⽅改⾰ 課題 •⻑時間にわたる⼯場作業を、管理者の⽬のみによって監視し 続けることは容易ではない •担当者は、制服、帽⼦、マスクを着⽤しているため、⾒た⽬だ けでは個⼈の特定が困難 •定量化された数値などによって状況を把握・記録することができ ず、過去と照らし合わせることも困難 •録画されたビデオ映像は、問題が発⽣した後の証跡として利⽤ できるが、瞬時の対応には不向き Solution ⼈⼿による作業を、AI を駆使したシステムによって“⾒守り”、担 当者の姿勢やある時間内での⾏動を、数値化された統計値と の⽐較し、通常の⾏動を逸脱した異常事態の発⽣を瞬時に判 断することで、トラブルの拡⼤を未然に防ぐという仕組みの実現。 NEDO(国⽴研究開発法⼈新エネルギー・産業技術総合開 発機構)の共同開発⽀援事業として認められた。 https://www.elastic.co/jp/customers/broaderbiz
事例︓⽇本経済新聞社 ⽇経電⼦版の記事検索およびログ解析の両⽅を1つの仕組みで実現 利⽤範囲の広さで Elasticsearch を採⽤ Elasticsearch を選定したのは、記事検索とログの可視化の両⽅に 使える利⽤範囲の広さが最⼤の理由 15台のクラスタ構成で、1秒あたり9000リクエスト以上という⾼ い性能を発揮 記事検索とログ解析に Elasticsearch を活⽤ ⽇経電⼦版の記事は、5年分で約200万件、データサイズは5GB。記事の更新は、1⽇あたり数千回、ピーク時には1分間に300件程度の記事が更 新。検索における利⽤者からのアクセスは、1秒あたり100回程度だが、1秒あたり数千回のアクセスも想定 ログ解析で Elasticsearch を利⽤した最⼤のメリットは、専⾨的な深い知識がなくてもログ解析が可能になること。Elasticsearch と Kibana を利⽤ したログ解析により、たとえば、記事検索のレスポンスにどれくらいの時間がかかっているかを容易に解析でき、アプリケーションのどこにボトルネックがあるのか、 改善するべき機能はどこなのかを迅速に把握できる “Elasticsearch と Kibana を活⽤することで、エンジニア秘伝の“タレ( shell 芸)”を使って可視化していたログ解析を URL や、 画像で即座に社内共有できるようになりました。これまではログ解析ができるエンジニアが2⼈しかいなかったのですが、Elasticsearch と Kibana を利⽤することで、秘伝のタレが不要になり、ログ解析ができるエンジニアを6⼈以上に増やすことができましたようになりました。" – 日本経済新聞社 デジタル編成局 編成部 梅崎裕利氏 https://www.elastic.co/jp/customers/nikkei
事例︓スイス・ライフ Elasticsearch が⽣み出す360°の顧客管理 Elasticsearch で1000万⼈の顧客データのインデックス作成から分析、パブリッシュまでリアルタイムに実⾏ スイス・ライフにおける課題 スイス・ライフは保険や資産管理サービスを⼿掛ける⼤⼿企業で、フランスでは個⼈向け保険商品を主⼒に⾼いシェアを持つ スイス・ライフ・フランスの1000万⼈の顧客情報に対し、さまざまなフォーマットや、さまざまなタイプのユーザアクセスにより、データへの均質なアクセス を維持することが難しくなり、情報が「サイロ化」していた Elasticsearchによる解決 スムーズな運⽤と、情報への均質なアクセスを実現させるため、スイス・ライフ・フランスは Elasticsearch で顧客データのインデックスとパブリッシュを⾏った あらゆる顧客の窓⼝となる Web サイトとモバイルアプリケーションにデータを提供するため、まず Elasticsearch ですべての顧客データを1か所に集約 顧客記録、契約データ、マーケット分類データ、年⾦と保険スコアのすべての情報を横断してリアルタイムにクエリ。 すべての顧客がポータルサイトにアクセスでき、顧客情報と契約情報をすばやく取得できる機能を提供。また、情報が更新された場合、ソースシステムで 10秒以内にインデックスを作成。 “スピードと信頼性は不可⽋です。Elasticsearch がデータをリアルタイムにインデックスするようになり、すべてが進 化しました。" – クリスチャン・ファン・チョン, スイス・ライフ・フランス、チーフエンタープライズアーキテクト https://www.elastic.co/jp/customers/swiss-life
事例︓PSCU(⽶国有数の信⽤組合サービス組織) Elastic は信⽤組合に対する数百万ドル相当の不正⾏為被害を防⽌することでリスク回避を実現 Elastic 製システムをデプロイしてからわずか18か⽉間で、3,500万ドルもの不正⾏為を阻⽌ PSCU における課題 PSCUは、⽶国有数の信⽤組合サービス組織で1,500の信⽤組合にサービスを提供し、年間38億件もの取引を扱う。 会員に対して⽀払い処理、リスク管理、データ分析、オンラインバンキング、モバイルプラットフォームなどさまざまな⾦融サービスを提供 年⽉が経つにつれデータベースが巨⼤化しデータ⼊⼒が困難になり、前⽇のデータを読み込むのに丸1⽇かかる状態で適切なタイミングで不正検 知ができていなかった。 Elasticsearch による解決 会員のオンラインログイン、IP アドレス、住所、サポートセンターへの問い合わせ履歴など、数多くのデータソースを Elasticsearch に集約しログを可視化 当初は内部の不正⾏為検知が⽬的であったが問題なく稼働したため、さらに全⽶1500の信⽤組合の外部からの不正⾏為を阻⽌できるよう、幅広い⾦ 融関連データソースからのログを追加 機械学習を使⽤した不正検知を導⼊し導⼊後18ヶ⽉で3,500万ドルもの不正⾏為を阻⽌ 単なる不正検知にとどまらず、災害発⽣時の地域で検知された平時と異なる⾏動(⾼価な発電機、⼤量の⽸詰などを突然購⼊するなど)をブロックし ない機能なども追加 "Elastic Stackを構築したことで、不正⾏為を従来よりもはるかに簡単に検知できるようになりました。Elasticプラットフォームに⼊⼒ するデータベースを⼤幅に増やしたことで、従来は決して気付かなかったデータの特徴をとらえられるようになりました。現在では、発⽣中 の不正⾏為を検知できるだけでなく、発⽣前にそれを検知できるようになりました。" – ジョナソン・ロビンソン氏, PSCU、不正インテリジェンス部門マネージャー https://www.elastic.co/jp/customers/pscu
事例︓古野電気株式会社 船舶運航の安全・安⼼・効率化を⽀えるサービスを提供 データ・分析結果を得るまでの平均時間(MTTR)の短縮率 94% 差別化されたカスタマーエクスペリエンス 古野電気は、同社の Elastic オブザーバビリティソリューショ ンの⼀部として Kibana と Elastic Maps を採⽤したこと で、船上でのデータ使⽤に関するデータ・分析結果をより多 く得られるようになっています。それらのデータ・分析結果は、 お客様の船舶と陸上の接続コストとパフォーマンスの改善に 役⽴ちます。 コストパフォーマンスに優れたプロアクティブなサービスを 提供 今後発⽣しそうな機器の障害、予兆を検知し、予防保守 を⾏う必要があれば、修理内容を特定し、部品を迅速に ⼿配することで費⽤を抑えながら効果的な対応をご⽀援し ます。 安全で効率的な航⾏を実現 古野電気は、Elastic Cloud の Elasticsearch Service を活⽤することで、ライフサイクルソリューションを効 果的に多くのお客様へ展開することができます。また、お客 様のニーズにより最適なサービスプランをパッケージ化し販売 することで、安全で効率的な航⾏へ貢献します。 https://www.elastic.co/jp/customers/furuno