Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

kibanaのURL drilldownを使ってログ管理を効率化する

こんにちは。@Ssk1029Takashiです。
この記事は、Elastic Stack (Elasticsearch) Advent Calendar 2020の11日目です。
qiita.com

はじめに

Kibanaでアプリのログ管理をしていると、KibanaのDashboardだけを見ているだけではなく、実際のWebアプリの画面も確認することが多いです。
例えば、検索アプリの検索ログをKibanaでダッシュボードしている場合、急に検索回数が増えた単語などは、ユーザーがどんなコンテンツを探しているのか知るために実際の検索結果画面が見たくなります。

このような時に、DashboardとWebアプリの画面を行き来するのは、オペレーションの中で意外とストレスになります。
f:id:acro-engineer:20201206203709p:plain

そこで、Kibana 7.10から追加されたURL drilldownという機能を使うことで、より手軽にDashboardからWebページを参照できるようなります。

今回書かないこと

今回以下のことは記事の対象外にしています。

  • App Search・Elastic Stackの構築方法
  • Visualizeの作成方法

URL Drilldownとは

簡単に言うと、DashboardからクリックしたVisualizeの値をもとにしたURLへ遷移できる機能です。
URLはテンプレートを使って、クリックした値やVisualizeのタイトルなどを参照できます。

使い方として、以下のようにケースがあります。

  • 問題を絞り込んでクリックする際に、チケット管理システムのURLの特定フィールドに渡して起票する
  • ログ管理で表示したIPアドレスを外部のReputationサイトに渡して、そのページで結果を見てさらに詳しい情報を参照する。

IPアドレスをReputationサイトで調査する機能はSIEM UIに標準で実装されていますが、Dashboardからでも実現可能になります。

詳しくは以下のドキュメントを参照してください。
www.elastic.co

実際に試してみる

環境

今回はElastic Cloud上のApp Searchを検索アプリとして、URL drilldownを使った画面遷移を試してみます。
Elasticsearch:7.10
Kibana:7.10
App Search:7.10

また、今回は事前にApp Searchでこのブログのデータを検索できるようにしています。
構成としては以下のようになっています。
f:id:acro-engineer:20201211004519p:plain

Dashboardを作成する

まずは、App Searchのログを参照して、検索されたキーワードの頻度を出すVisualizeを作成して、Dashboardに設定します。
今回はLensのTreeMapを使用しています。
f:id:acro-engineer:20201207001405p:plain

URL drilldownを設定する

それではDashboardにURL drilldownを設定していきます。
Dashboardの編集画面から、URL drilldownを設定したいVisualizeを選択すると、「Create drilldown」というメニューが出てきます。
f:id:acro-engineer:20201207004241p:plain
選択すると、drilldown作成メニューが表示されます。
まず、Dashboard drilldownかURL drilldownのどちらを作成するかを選択する必要があるので、「Go to URL」を選択します。
f:id:acro-engineer:20201209231824p:plain
drilldown名とURLテンプレートを設定する画面なので、任意の名前と、URLを設定しましょう。
URLは以下のように検索サイトのURLにテンプレート文字列で選択した値がURLパラメータになるように設定します。
App Searchでは、URL引数にq=<検索キーワード>の形式で指定することで、検索できるので、以下のようにテンプレートを設定します

https://<検索サイトのURL>?q={{event.value}}

上記の{{event.value}}の部分にDashboardで選択した部分が表示している値が入ります。

上記を設定後、「Create drilldown」を選択して、URL drilldownを作成します。
設定後は、Dashboardを保存する必要があるので、忘れないようにしましょう。

Dashboardから検索ページに遷移する

保存後に、Dashbaord上でデータがある場所をクリックすると、以下のように、ポップアップが表示されるようになります。
f:id:acro-engineer:20201209234437p:plain

ポップアップのうち、URL drilldownをクリックすることで、Dashboard上で選択した値で検索されたページに飛ぶことができます。
f:id:acro-engineer:20201209235755p:plain

このように、Dashboard上でログを見ながら、スムーズにアプリでより詳細な情報を確認することができます。
無駄な画面移動や入力が減って、効率的になりましたね。

まとめ

本記事では、Kibanaの新機能であるURL drilldownを利用して、DashboardからWebアプリの画面にスムーズに移動できるようにすることで、日々の運用の効率化を図りました。
別のページを開きなおす、再度入力し直すなどの手間が減って、効率的になりそうです。
皆さんもDashboardでアプリログを運用するときにはぜひ参考にしてみてください。

Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

世界初のElastic認定エンジニアと一緒に働きたい人Wanted! - Acroquest Technology株式会社のデータサイエンティストの求人 - Wantedlywww.wantedly.com

超爆速なcuDFとPandasを比較した

皆さんこんにちは。
@tereka114です。
今年末はKaggleで開催される面白いコンペも多くて日々、エンジョイしています。

最近は巨大なデータを扱うことが増えており、Pandasだと時間がかかりすぎて効率が悪いと感じています。
そのため、データを高速に処理できるcuDFを利用することも多くなってきました。
この記事ではcuDFの魅力と扱う際の注意点を説明していきます。

※この記事は「Pythonその2 アドベントカレンダー」10日目の記事です。
qiita.com

cuDFとは

cuDFはNVIDIAさんが開発している、Pandasの代わりに利用することができるGPUのライブラリです。
最も大きな特徴はGPUで計算するため、高速であることです。
主に、カテゴリ変数ごとの平均計算や、テーブル同士の結合といった、時間のかかるテーブル処理で、効果を発揮します。

github.com

cuDFは特徴量を簡単に作れるライブラリであるxfeatでもサポートされています。

github.com

cuDFとPandasの性能比較

cuDFがどの程度強力なライブラリなのかを評価します。
今回は利用頻度の多い、次の2点に関して性能を計測しました。

  • カテゴリごとの平均値の計算
  • テーブルの結合

前準備

Colaboratory上での準備

cuDFは手元にGPU環境がなくとも、Google Colaboratoryを利用すれば、簡単に試せます。
今回の性能計測もGoogle Colaboratory上で実施しました。
Google ColaboratoryでcuDFを動かすためには、次のコマンドを最初に実行してください。

!git clone https://github.com/rapidsai/rapidsai-csp-utils.git
!bash rapidsai-csp-utils/colab/rapids-colab.sh stable

import sys, os

dist_package_index = sys.path.index('/usr/local/lib/python3.6/dist-packages')
sys.path = sys.path[:dist_package_index] + ['/usr/local/lib/python3.6/site-packages'] + sys.path[dist_package_index:]
sys.path
exec(open('rapidsai-csp-utils/colab/update_modules.py').read(), globals())
データ作成

本検証では擬似データとして2つのテーブルを作成します。
作成条件は次の通りです。

  • メインテーブル:2000万レコード、カテゴリを2つ100000種類
  • 結合用テーブル:100万レコード、カテゴリを100000種類
import numpy as np
import pandas as pd
import cudf

N = 20000000
MERGE_N = 1000000

df = pd.DataFrame([{"Category": np.random.randint(0,100000), "Category2":np.random.randint(0,100000), "Value": np.random.rand()} for _ in range(N)])
right_df = pd.DataFrame([{"Category": np.random.randint(0,100000), "Value2": np.random.rand()} for _ in range(MERGE_N)])
cudf_table = cudf.from_pandas(df)
cudf_right_table = cudf.from_pandas(right_df)

試したこと

カテゴリごとの平均値の計算

巨大データからカテゴリごとの平均を計算する(df.groupby.mean)ケースで試してみます。
この場合Pandasだと非常に長時間の計算が必要です。
先程作成した「メインテーブル」で平均を計算します。実装は次の通りです。(時間計算部は省略しています)

df.groupby(["Category", "Category2"]).mean() # Pandas
cudf_table.groupby(["Category", "Category2"]).mean() # cuDF

結果はcuDFが50倍高速でした。(驚異的なスピード)

  • Pandas:50.92s
  • cuDF:1.02s
テーブルの結合

次に巨大ファイルの結合を試します。
作成した「メインテーブル」と「結合用テーブル」を"Category"列で結合します。実装は次の通りです。

df.merge(right_df, on="Category", how="left") # Pandas
cudf_table.merge(cudf_right_table, on="Category", how="left") # cuDF

結果、cuDFが37.5倍高速です。(早い!)

  • Pandas:20.65s
  • cuDF:0.55s

cuDFを扱う上での注意点

Pandasと比較して爆速なcuDFですが、3点注意点があります。

1. mergeの並び順が異なる。

Pandasのmergeは元のテーブルと順番が変わりません。
しかし、cuDFの出力結果は並列計算の都合で元のテーブルと順番が異なります。
そのため、順番に依存する処理(ex:インデックス番号でデータを分ける)を記載している場合に期待しない動作になるので注意が必要です。

2. 平均の結果がPandasと異なる。

巨大なデータを扱うときにはPandasと平均値の結果が異なる場合があります。
現在Kaggleで開催されている「Riiid! Answer Correctness Prediction」では、平均値を取ったときに計算結果がpandasとcuDFで異なる結果が返ってきます。
本件についてはオープンに議論しており、議論している場所は次の箇所です。

www.kaggle.com

原因は不明ですが、色々と検証した結果、cuDFの値が正しそうです。
何らかの事情で計算環境が異なりPandasとcuDFの実装が混ざる状況の場合はテストコードを書いて検知するなど、対策が必要だと思っています。

3. 未実装/IFが異なる関数がある

cuDFは全てのPandasの関数をサポートできておらず、未実装関数やIFがPandasと合わないものがいくつかあります。
df.unstackのIFが若干異なることでプログラムで例外が発生したり、df.applyを対応していなかったりします。
その場合は一時的にPandasに変換(df.to_pandas())を行い、計算するなどで回避可能です。

最後に

ここまでcuDFが爆速であることをお伝えしてきました。
しかし、挙動を把握しながら実装していかないと思わぬ罠にハマり、苦労することがあります。
個人的にcuDFの性能が最高なので、挙動のクセを正しく理解、評価した上で、使っていきたいと思います!

Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

【データ分析】
Kaggle Masterと働きたい尖ったエンジニアWanted! - Acroquest Technology株式会社のデータサイエンティストの求人 - Wantedlywww.wantedly.com

ソースからビルドしてElastic Stackの最新バージョンを触ってみる

こんにちは、ノムラです。
この記事はElastic Stack (Elasticsearch) Advent Calendar 2020 の7日目になります。

目次は以下です。

はじめに

Elastic Stackはご存じの通り、OSSの製品であるため、ソースコードがGit上に公開されています。
github.com
github.com

このソースをビルドすることで開発中の最新バージョンもお試しで触ることができます。
そこで今回は、実際にビルドしてみて、Elastic Stack 8.0を触ってみたいと思います。

環境情報

環境:AWS
OS:Amazon Linux 2 AMI (HVM)
インスタンスタイプ:t2.large
Java:14.0.2

Elasticsearchをビルドする

Elasticsearchのビルドにはgradleを利用します。
まずはgradleのインストールから、と思うところですが、gradlewが作成されているため、実際はgit cloneをしてコマンドを実行するだけです。

ソースを github から clone する

$ sudo yum install -y git
$ git clone https://github.com/elastic/elasticsearch.git

Elasticsearchをビルドする

$ cd elasticsearch/
$ ./gradlew :distribution:archives:linux-tar:assemble

ビルドされたファイルは distribution ディレクトリに出力されます。

$ ls distribution/archives/linux-tar/build/install/elasticsearch-8.0.0-SNAPSHOT
bin     data  lib          logs     NOTICE.txt  README.asciidoc
config  jdk   LICENSE.txt  modules  plugins

Elasticsearchを起動する

$ cd distribution/archives/linux-tar/build/install/elasticsearch-8.0.0-SNAPSHOT
$ bin/elasticsearch
$ curl localhost:9200
{
  "name" : "es-sample",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "tQl8J8LZQPOCfqESKImJRQ",
  "version" : {
    "number" : "8.0.0-SNAPSHOT",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "966189fa6a42882c127742c43c52d29f668c3f48",
    "build_date" : "2020-12-05T16:13:39.509805Z",
    "build_snapshot" : true,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "7.11.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}

無事起動できました。
次はKibanaを構築したいと思います。

Kibanaを構築する

Kibanaのソースからの起動方法は公式ドキュメントの開発者ガイドに記載されています。
www.elastic.co

ソースを github から clone する

$ git clone https://github.com/elastic/kibana.git

nvm をインストールする

公式ドキュメントに従ってnvmをインストールします。
github.com

$ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
$ nvm use
$ nvm install 14.15.1

yarn をインストールする

同様に公式ドキュメントに従ってyarnをインストールします。
classic.yarnpkg.com

$ curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
$ curl --silent --location https://rpm.nodesource.com/setup_12.x | sudo bash -
$ sudo yum install -y yarn

bootstrapを実行し必要なパッケージをインストールする

bootstrap実行の前にgccをインストールします。
後述のyarnコマンド実行のために必要です。

$ sudo yum -y install -y gcc*

yarnコマンドを実行し、パッケージをインストールします。

$ yarn kbn bootstrap

Kibanaを起動する

$ yarn start

Kibanaが起動できました。
f:id:acro-engineer:20201207025620p:plain:w400f:id:acro-engineer:20201207071254p:plain:w400

おまけ

今回は利用しませんでしたが、以下のコマンドを実行することで、Kibanaプロジェクトのみで動作確認をすることもできます。便利ですね。

$ yarn es snapshot --license trial

まとめ

ソースからビルドして、Elastic Stack 8.0を触ってみました。
これで、今後いち早く気になる最新機能を触ることができそうです。

それでは。

Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

世界初のElastic認定エンジニアと一緒に働きたい人Wanted! - Acroquest Technology株式会社のデータサイエンティストの求人 - Wantedlywww.wantedly.com

Elastic Stack Advent Calendar 2020(2020年のElastic Stackを振り返る)

こんにちは、アクロクエストテクノロジー株式会社でElastic Stackのコンサルティング業務を担当している吉岡です。本記事は、Elastic Stack (Elasticsearch) Advent Calendar 2020 の1日目の内容になります。

目次は以下です。

Elastic Stackリリース概要

  • Elastic Stack Version 7.6.0リリース(2020年2月)
  • Elastic Stack Version 7.7.0リリース(2020年5月)
  • Elastic Stack Version 7.8.0リリース(2020年6月)
  • Elastic Stack Version 7.9.0リリース(2020年8月)
  • Elastic Stack Version 7.10.0リリース(2020年11月)

2020年1月時点での最新バージョンはVer.7.5.1、2020年12月1日時点での最新版はVer.7.10.0です。メジャーバージョンは変わっていないので、たった5回マイナーバージョンアップしただけのように見えますが、マイナーチェンジとは思えない多くの機能が盛り込まれています。

Elastic Stackのユースケース

Elastic Stackは、Search(検索)、Observe(ログ監視)、Protect(セキュリティ)という3つのユースケースで利用されます。以降は、ユースケース別に特徴的な機能強化/新機能をまとめてみます。

■Search(1)検索機能

検索の高速化

  • Ver.7.0で一部のクエリに導入されたblock-max WANDが、Ver.7.6では日付や数値のソート処理にも適用されました。結果、ソート付きクエリのパフォーマンスが10倍以上になりました。Elasticsearchの根幹である検索が速くなるのは、クエリを利用するKibanaや各種アプリにとっても嬉しいですね。

ヒープメモリ使用量の大幅削減(同時検索性能の向上)

  • セグメント内のTerm Indexはすべての検索可能フィールドの情報を含みますが、相対的に「_id」フィールドの占めるサイズが大きくなります。Ver.7.7では「_id」のTerm Indexがヒープからディスクへ移動。ヒープメモリ使用量を大幅に削減しました。その結果、Ver.7.6以前と7.7以降ではクエリの同時検索性能が大きく改善しています。

非同期検索のサポート

  • Elasticsearchは高速検索が求められるケースでよく利用されますが、高速検索を必要としないユースケースも存在します。例えば、大量データをフィルタリングなしで集計するような重いバッチ統計処理であったり、安価なストレージ(HDD)を搭載したDataNodeに対する検索などです。Ver.7.7で登場した非同期検索は、これらのユースケースに最適です。
  • 非同期検索のタイムアウトはデフォルトで5日間(長い!)。クエリが完了しなくても途中までの結果を部分的に取得することも可能。ちなみに、Kibana Ver.7.7から、DashboardとDiscoverは非同期検索に対応しています。(一定時間内にクエリが完了しないと、処理が完了するまで非同期検索を続けるかどうかの確認ダイアログが表示される)

■Search(2)エンタープライズ検索

エンタープライズ検索ソリューションの整理

  • Ver.7.6において、SaaSサービス検索を実現する「Enterprise Search」を「Workplace Search」に名称変更。
  • エンタープライズ検索のソリューション名を「Elastic Enterprise Search」とし、これまでバラバラだった3つの製品をElastic Enterprise Searchの下に位置付けるように変更。(ようやくElasticの検索製品群がきれいに整理されました)

- App Search(アプリ検索)
- Site Search(Webサイト検索)
- Workplace Search(SaaSサービス検索)

Enterprise SearchがKibana UIと統合

  • Kibana Ver.7.9から、Enterprise SearchがKibana UIから利用可能になりました。(Kibanaのメニューがさらに縦長に・・・)

■Observe(1)ログ監視/可視化

新アラートフレームワークの統合

  • これまでElastic StackのAlertingはすべてWatcherが担っていました。が、利用した方は分かると思いますが、シンプルな閾値通知以外は複雑なJsonを実装する必要があり、生産性も保守性も高くありません。そこで、Kibanaに新しいアラートフレームワークが導入されました。このアラートフレームワークは、Kibanaの各種機能と統合され、SIEM、APM、Metrics、Uptimeなどの各機能画面からアラートをUIから簡易に作成することができるため非常に便利です。

ダッシュボード連携機能

  • Kibana Ver.7.8でダッシュボード間のドリルダウン機能が実装され、複数ダッシュボードを活用したデータ分析が容易になりました。また、Ver.7.10ではドリルダウン機能にWebアプリへのURL連携機能が追加されました。

■Observe(2)機械学習による異常検知

教師あり機械学習の強化

  • これまではモデル構築/評価までしか対応できませんでしたが、Ver.7.6で「Inference Processor」が実装され、推論も可能になりました。例えば、Ver.7.6で標準搭載の109言語に対応した「言語識別モデル」を利用すると、多言語のテキストデータをElasticsearchに登録するタイミングで言語を推論し、言語毎に別のインデックスに登録するなどが非常に簡単に実現できます。

サービスヘルス監視機能

  • Ver.7.8から、Elastic APM機械学習が算出するヘルス指標を各種サービスマップに追加する機能が新規追加。

■Protect(1)セキュリティ分析

プレビルド検知ルール

  • Elastic SIEMはVer.7.6から大きく進化します。このバージョンでは機械学機能が統合されたSIEM検知エンジンおよびMITRE ATT&CK™ナレッジベース準拠のプレビルド検知ルールがリリース。クエリ/モデルベースの異常検知によりマルウェア等の自動検知ができるようになりました。以降、バージョンアップの度に様々なルールが追加され、Ver.7.10時点で316個のプレビルドルールが搭載されています。

ケースマネジメント機能

  • SIEMのTimeline機能で脅威の調査を行い、必要に応じてKibanaから外部のインシデント管理システムに起票や更新ができます。Ver.7.7では対応ツールはServiceNowITSMだけですが、以降のバージョンでJIRA/IBM Resilientにも対応します。

Elastic Agent

既存のBeatsの統合エージェントとして、Ver.7.9からElastic Agentが導入されました。Elastic AgentはElastic Securityの要となる重要機能で、3つの特徴があります。

  1. セットアップコストが低い:1種類のエージェントで40種類以上のデータを収集可能であり、1コマンドでセットアップ可能(収集データに合わせて必要ファイルを自動ダウンロード)
  2. メンテナンスコストが低い:全てのエージェントをKibanaで一元管理可能であり、Kibanaからエージェントのバージョンアップ/設定変更(例:取得データの追加)が可能
  3. データ加工処理を自動実行: データ送信時にElastic Common Schemaへ自動でデータ加工し、多様なデータソースを横断的に検索可能

Endpoint Securityの一部がBASICライセンスで利用可能に

  • Ver.7.9から、Endpoint Securityの一部がBASICライセンスで利用可能になりました。

Event Query Language(EQL)の導入

  • Ver.7.9でセキュリティイベント検索用言語としてEQLを導入。EQLは時系列の複数ドキュメントに跨った条件を検索することができ、サイバー攻撃をしかけるマルウェア等の特徴的な活動をルール化/検知が可能になります。Ver.7.10では検知ルールの定義にEQLがサポートされ、柔軟に検知ルールをカスタマイズすることができます。

まとめ

2020年のElastic Stackを振り返って、特徴的な機能強化/新機能をピックアップしてみました。Search(検索)、Observe(ログ監視)、Protect(セキュリティ)、3つのユースケースが満遍なく強化されていますが、特にセキュリティに関しては機能追加のスピードが速く、目が離せません。

Elastic Stack

Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

【データ分析】
Kaggle Masterと働きたい尖ったエンジニアWanted! - Acroquest Technology株式会社のデータサイエンティストの求人 - Wantedlywww.wantedly.com

Azure Cognitive Searchのコグニティブスキルを使った自動でフィルタ検索

皆さんこんにちは。@Ssk1029Takashiです。
気づけば今年もあとわずかになってきて、一年の早さを感じますね。

以前、GiNZA+Elasticsearchを使って固有表現抽出を使ったタグ検索のデモを作成しました。
acro-engineer.hatenablog.com

ただ、デモというのは何より早さが必要な場合もあります。
その場合だと、なるべくプログラミングを減らして、作成したいと思うこともあります。
今回は、Azure Cognitive Searchを使って、上記のような内容を、一切プログラミングせずに実現してみます。

Azure Cognitive Searchとは

Azure Cognitive Searchとは、名前の通りAzure上の検索サービスです。
特長としては、AIエンリッチメントという拡張機能を備えており、機械学習を活用したリッチな検索システムを簡単に実現できます。
docs.microsoft.com

AIエンリッチメントについて

この機能は、データソースから検索データを投入するときに、コグニティブスキルというAzure上の機械学習連携機能を使って、データから検索に使うデータを抽出できる拡張機能です。
例えば、エンティティ認識スキルを使えば、文書から自動で場所や人などを抽出して、データに持たせることができます。
f:id:acro-engineer:20201108211428p:plain
docs.microsoft.com

データ投入準備

Azure Cognitive SearchはAzure Blob StorageやCosmos DBなどのデータ連携がサポートされています。
詳細な連携先サービスは以下のURLのページに記載されています。
docs.microsoft.com

今回は、Blob Storageにファイルを配置して、その内容を検索できるようにします。
Blob Storageにこのブログの内容を張り付けたテキストファイルをアップロードします。
f:id:acro-engineer:20201109004757p:plain

検索データを投入する

検索データの連携は基本的なものならGUIから操作することが可能です。
Azure PortalのAzure Cognitive Searchの画面から「データのインポート」を選択することで、設定画面に移行します。
f:id:acro-engineer:20201109010824p:plain

ここから、以下の項目を設定することで、インデックスを作成することができます。

連携するBlob Storageのコンテナ

検索対象のファイルが配置してあるBlob Storageの場所を設定します。
f:id:acro-engineer:20201109013409p:plain

適用するコグニティブスキル

データ投入時に機械学習を使って抽出したい内容を選択します。
f:id:acro-engineer:20201109020246p:plain
組み込みのコグニティブスキルは以下のURLで一覧が示されています。
docs.microsoft.com

インデックスのフィールドと型

どのようなデータ構造でデータを投入するかを設定します。
各フィールドの名前・検索対象可能か・フィルター可能か・集計可能か・ソート可能かを設定します。
変更点としては、locationsなどのコグニティブスキルで抽出したフィールドは、フィルターで表示したいので、フィルター可能・ファセット可能に設定します。
f:id:acro-engineer:20201109233603p:plain

ここまで設定すれば、後はインデクサー名とスケジュールを設定すればデータのインポートが実行されます。

作成されたデータを見てみる

それでは投入された結果のデータを一部見てみましょう。
Searchサービスの「概要」から「検索エクスプローラー」を選択することで、簡易的にクエリを打ってデータを確認することができます。
f:id:acro-engineer:20201127010457p:plain

    {
            "@search.score": 1,
            "content": "皆さんこんにちは。\r\n@tereka114です。\r\n\r\n今週からCVPR2020がはじまりました。\r\n本記事では初日と2日目に参加したWorkshop/Turtorialを紹介します。\r\n\r\nf:id:acro-engineer:20200616135912p:plain\r\nCVPR2020\r\nCVPR2020の正式名称は「Computer Vision and Pattern Recognition」です。\r\n6月14日〜19日まで開催されています(時間はPDT)\r\nこれは、アメリカのコンピュータビジョンの国内学会で、毎年非常に盛り上がっています。\r\n\r\n今回、私は1年ぶりに参加しています。\r\nコロナウィルスの影響で現地開催ではなく、バーチャル開催になりました。\r\nPDT(日本から16時間遅れ)の時間とそれから12時間後に動画が放送されています。\r\n\r\n日本にいながら、私はシアトル時間で参加しています。\r\n普段の現地参加と異なり、太陽の時間がずれているので、体調を整えるのが難しい感覚です。\r\n\r\n\r\ncvpr2020.thecvf.com\r\n\r\n自動運転技術の基本を学べるチュートリアル\r\n初日はチュートリアル「All About Self-Driving」に参加しました。\r\n\r\nwww.allaboutselfdriving.com\r\n\r\nこのチュートリアルでは、Zoomのセミナー機能を利用し、既に収録されている動画が放映されます。\r\n途中でSlidoから質問を拾い、質疑応答を行っていました。\r\n\r\nこのチュートリアルは、自動運転技術に必要なことを包括的に紹介していました。\r\n例えば、ハードウェア(LiDAR、RADERなど)からソフトウェア(物体検出、予測、コントロール方法など)のそれぞれの種類と長短の説明がありました。\r\n私自身、自動運転技術の細かいハードウェアや方式にはあまり馴染みがないところもあったので、新しく得られた学びも多かったです。\r\n\r\nf:id:acro-engineer:20200615102403p:plain:w720\r\n2日目:深度推定と最適化\r\n2日目は午前と午後で異なるセッションに参加していました。\r\n\r\nLearning and understanding single image depth estimation in the wild\r\n公式ページで動画が公開されているので、それを見てました。\r\n質問は発表時間中にリアルタイムで受け付けていました。\r\n\r\n単眼深度推定のチュートリアルで、深度推定を行う上での仕組み(視差)、データセット、そして、各種アルゴリズムの紹介が行われていました。\r\n新しい分野でも包括的に学べて、資料も公開され、後で振り返られるのが良いところです。\r\n\r\n\r\nsites.google.com\r\n\r\nf:id:acro-engineer:20200616142257p:plain:w720\r\nFrom NAS to HPO: Automated Deep Learning\r\nこのチュートリアルはハイパーパラメータとアーキテクチャのチューニングの話です。\r\n機械学習には多くのハイパーパラメータが存在し、そのパラメータを調整する方法も知られています。\r\nまた、最近だと、ニューラルネットワークの構造を自動的に計算する方式もあるので、その件も紹介されていました。\r\n\r\nハンズオン付きで実装もあるので、いざ試してみたい!と思った時に便利そうなのはありがたいことです。\r\n\r\nhangzhang.org\r\n\r\nf:id:acro-engineer:20200616142437p:plain:w720\r\n最後に\r\n明日からCVPRのメインカンファレンスです。\r\n前年よりも論文数が多く、盛り上がっているなぁと感じています。\r\nぱっと見面白そうな論文も見られるので、きちんと読んで楽しみたいと思います!\n",
            "metadata_storage_path": "aHR0cHM6Ly9zZWFyY2hzb3VyY2UuYmxvYi5jb3JlLndpbmRvd3MubmV0L3NvdXJjZS1maWxlL0NWUFIyMDIwJUU1JThGJTgyJUU1JThBJUEwJUU4JUE4JTk4JUUzJTgwJThDJUU1JTg4JTlEJUUzJTgyJTgxJUUzJTgxJUE2JUUzJTgxJUFFJUUzJTgzJTkwJUUzJTgzJUJDJUUzJTgzJTgxJUUzJTgzJUEzJUUzJTgzJUFCJUU5JTk2JThCJUU1JTgyJUFDJUUzJTgwJTgxJUUzJTgzJTgxJUUzJTgzJUE1JUUzJTgzJUJDJUUzJTgzJTg4JUUzJTgzJUFBJUUzJTgyJUEyJUUzJTgzJUFCJUUzJTgxJThDJUU1JTg1JTg1JUU1JUFFJTlGJUUzJTgwJThEJTIwJTIzY3ZwcjIwMjAudHh00",
            "people": [],
            "organizations": [],
            "locations": [
                "アメリカ","日本","シアトル"
            ],
            "keyphrases": [
                "まし","チュートリアル","acro-engineer","plain","現地参加","紹介","自動運転技術","w720","シアトル時間","動画","CVPR2020","ハイパーパラメータ","現地開催","単眼深度推定","発表時間中","質問","初日","ハードウェア","方式","バーチャル開催","こと","公開","PDT","日本","ところ","コントロール方法","楽しみたい","論文数","Automated Deep Learning","Learning and understanding single image depth estimation in the wild","Computer Vision and Pattern Recognition","リアルタイム","From NAS to HPO","物体検出","All About Self-Driving","国内学会","利用","データセット","ソフトウェア","予測","仕組み","名称","アーキテクチャ","受け付け","20200615102403p","20200616142257p","20200616142437p","コンピュータビジョン","セミナー機能","質疑応答","アメリカ","視差","構造","拾い","RADER","各種アルゴリズム","Zoom","コロナウィルス","影響","チューニング","存在","太陽","基本","20200616135912p","毎年","種類","計算","LiDAR","Slido","収録","ずれ","調整","馴染み","Workshop","Turtorial","自身","ニューラルネットワーク","機械学習","新しく得","学び","ハンズオン付き","実装","体調","長短","説明","思い","本記事","ページ","放送","最適化","セッション","カンファレンス","感じ","感覚","資料","はじまり","放映","分野","皆さん","tereka114","最後"
            ],
            "language": "ja"
        }

これを見ると、locationsで国名などを拾えていることがわかります。

キーフレーズは、「チュートリアル」や「CVPR2020」などの重要単語は拾えていますが、「こと」や「はじまり」などの意味のない単語も拾ってしまっているようです。
この辺は今後の精度改善に期待ですね。

デモアプリを作成する

Azure Cognitive Searchでは、GUI操作だけで検索画面を見るためのデモアプリを作成することができます。
Cognitive Searchの概要の画面から、「インデックス」→「デモアプリの作成」を選択することで、作成画面に移動します。
以下の項目を表示したい内容に沿って、設定します
1. 検索結果に表示する内容
f:id:acro-engineer:20201127012818p:plain
2. フィルターに表示する内容
ここでコグニティブスキルで抽出したフィールドを設定します。
f:id:acro-engineer:20201109234119p:plain
3. ドロップダウンで表示する内容
f:id:acro-engineer:20201109234208p:plain

これらを設定すると、HTMLファイルをダウンロードすることができます。
ブラウザで表示すると、簡易的なデモアプリを表示することができます。
f:id:acro-engineer:20201127012300p:plain

この画面で、キーワード検索・フィルターでの絞り込みが可能です。

ここまでで、一切プログラミングをすることなく、フィルターで絞り込みができるデモアプリが作成できました。
ほぼGUIの操作のみで、作成できたので、非常に簡単でした。

まとめ

今回はAzure Cognitive Searchの機能を使いながら、簡単に機械学習によるテキスト抽出を使ったタグ検索デモを作成しました。
サービスの機能を使うことで、一切プログラミングすることなくデモまで作成することができました。
もちろん、あくまでデモは簡易的な画面なので、画面開発は必要かと思いますが、検索結果のイメージをなるべく早く見せたいなどのケースでは重宝しそうです。
皆さんもぜひ使ってみてはいかがでしょうか?

それではまた。

Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

【データ分析】
Kaggle Masterと働きたい尖ったエンジニアWanted! - Acroquest Technology株式会社のデータサイエンティストの求人 - Wantedlywww.wantedly.com

Azure Cognitive SearchとComputer Vision APIを使って類似の画像を検索してみる

こんにちは、@shin0higuchiです😊

今回のテーマは、「Azure Cognitive Searchでの画像検索」ということで、
写真から似たものを探す類似検索
の仕組みを作ってみます。
背景として、アクロクエストではElasticsearchを使い込んでおり、テキスト検索を扱う機会は多いのですが、
近頃は画像による検索ニーズも高まってきており、手早く実現するにはどうするのが良いかを知りたいという課題感がありました。

どういったユースケースでニーズがあるかというと、例えば買い物時の商品検索です。
買い物をする時、「画像で類似検索ができたら」と思うことがあります。
棚に並んでいるものの名前がわからなくても、写真で探せたらとても便利ですよね?

今回は、Azure と 簡単なPythonコードで実装してみました。
大まかに下記の流れで進めます。

1. Blobストレージアカウント/コンテナを作成し、画像をアップロードする
2. Cognitive Searchのインデックスを作成し、Blobコンテナのデータを取り込む
3. Computer Vision API を準備する
4. 各APIを叩くための簡単なPython スクリプトを書く

前提:Azure Cognitive Search とは

Azureであらゆるデータを取り込み、大規模検索をするためのクラウドサービスです。
AI機能も組み込まれており、複雑な検索を簡単に実現できることが売りとなっています。
下図のように、Azure上の様々なデータソースからドキュメントを生成し、検索できるようにしてくれます。
構造化されていないデータや、PDFなどの文書まで簡単に検索できるのは嬉しいですね。

https://docs.microsoft.com/ja-jp/azure/search/media/cognitive-search-intro/cogsearch-architecture.png
azure.microsoft.com

1. Blobストレージアカウント/コンテナを作成し、画像をアップロードする

Blobコンテナの作成

Azure Portal からストレージアカウントを作成し、Blobコンテナを作成します。
ここでは、"images" という名前のコンテナを作成しています。
f:id:acro-engineer:20201108230909p:plain:w500


今回はサンプルとして、次の画像18枚をアップロードしてみます。(画像は全て PNG 画像となっています)
ホームセンターで探し物が見つからず歩き回ったことがあったので、そのイメージです。
(その時は所定の場所ではなく、入口前の特別コーナーにあったというオチでした)
f:id:acro-engineer:20201108224313p:plain:w500

f:id:acro-engineer:20201108230543p:plain:w500

2. Cognitive Searchのインデックスを作成し、Blobコンテナのデータを取り込む

ここからが、Cognitive Search の準備になります。
Cognitive Search はLuceneベースの検索エンジンとなっており、
「インデックス」と呼ばれるデータ構造で取り込んだデータを保持し、検索する形です。

3インデックスまでは無料プランで利用できるようなので、今回はそちらで試すことにします。

あとは、「データのインポート」のメニューから取り込み時の設定を行います。

データソース (Blobコンテナ) を選び...
f:id:acro-engineer:20201115024459p:plain:w800
エンリッチメントの追加を選択します。
f:id:acro-engineer:20201115024617p:plain:w800

するとOCR を有効にし、すべてのテキストを merged_content フィールドにマージする」といったチェックボックスや、
「画像の認知技術」というチェックボックスが表示されるので選択します。
ここで、内部的にはCognitive ServeicesのComputer Vision APIが利用されています。
f:id:acro-engineer:20201115024737p:plain:w400


最後に、それぞれのフィールドに対するAnalyzerを選択するとインデックスが作成されます。
なお、日本語Analyzerには「Lucene」と「Microsoft」の2種類がありましたが、その辺りの確認はしていません。今回は本題ではないので割愛します。
f:id:acro-engineer:20201115025206p:plain:w800



自動的に検索用のエンドポイントも作成されるので、実際にインデクシングされたドキュメントを確認してみます。
たとえばサンダルの画像は、次のようなJSONになっています。 OCRを有効化したので画像中の文字列を抽出してくれているほか、imageTagsを良い塩梅に振ってくれています。(imageCaption はイマイチ。物が単体で映っている画像には不適?)
画像中にある "HAMMER" という文字列を、OCRチェックボックスを選んでおくだけで抽出してくれるのは凄いですね。
f:id:acro-engineer:20201108235910j:plain

{
            "@search.score": 1,
            "content": "\n",
            "metadata_storage_content_md5": "v90y4cHYAZDVfbz0smxplw==",
            "metadata_storage_name": "16.jpg",
            "metadata_storage_path": "aHR0cHM6Ly9zYW1wbGUyMDIwMTEuYmxvYi5jb3JlLndpbmRvd3MubmV0L2ltYWdlcy8xNi5qcGc1",
            "merged_content": " HAMMER \n",
            "text": [
                "HAMMER"
            ],
            "layoutText": [
                "{\"language\":\"en\",\"text\":\"HAMMER\",\"lines\":[{\"boundingBox\":[{\"x\":67,\"y\":102},{\"x\":103,\"y\":91},{\"x\":106,\"y\":102},{\"x\":70,\"y\":112}],\"text\":\"HAMMER\"}],\"words\":[{\"boundingBox\":[{\"x\":68,\"y\":103},{\"x\":103,\"y\":92},{\"x\":107,\"y\":102},{\"x\":70,\"y\":112}],\"text\":\"HAMMER\"}]}"
            ],
            "imageTags": [
                "black",
                "shoe",
                "footwear",
                "sneaker"
            ],
            "imageCaption": [
                "{\"tags\":[\"table\",\"sitting\",\"keyboard\",\"computer\",\"desk\",\"phone\",\"mouse\",\"laying\",\"cat\"],\"captions\":[{\"text\":\"a close up of a keyboard\",\"confidence\":0.64379424287271192}]}"
            ],
            "imageCelebrities": []
        }

3. Computer Vision API を準備する

これで画像検索の準備はできました。
ただし、検索APIが受け付けるクエリは文字列形式であるという問題があります。
今回は、Azure Cognitive Serviceの一つであるComputer Vision API を用いて、検索したい画像のタグやキャプションを取得し、それをCognitive Searchに投げる作戦で行きます。

さて、Computer Vision APIについても、Azure Portalから作成しました。
特に難しい設定もないので楽チンです。
気になる料金ですが、無料のプランでもそれなりに遊んでみることができそうです(執筆時点では、"20 Calls per minute, 5K Calls per month" だそうです)。

f:id:acro-engineer:20201109000917p:plain

4. 各APIを叩くための簡単なPython スクリプトを書く

今回はGoogle Colaboratory上で動かしてみました(Azure じゃないんかい!という突っ込みが聞こえてきそうですが、特にGoogleにした理由はありません。好みの問題です。)
各サービスを呼び出すサンプルコードは、公式のドキュメントに載っているのでそちらを参考にするのが良いと思います。

4-1 ライブラリのインストール

Cognitive Search および Blob Storageを扱うためのライブラリをインストールします。

!pip install azure-search-documents
!pip install azure-storage-blob

4-2 Computer Vision API による解析

ここでは検索したい軍手の画像 (sample.jpg) を Computer Vision APIに食わせて、タグとキャプションを取得します。

import os
import requests
import sys
%matplotlib inline
import matplotlib.pyplot as plt
from io import BytesIO
from PIL import Image

# colaboratory上での画像パスは /content/sample.jpg
local_path = "/content/"
local_file_name = "sample.jpg"
image_path = os.path.join(local_path, local_file_name)
image_data = open(image_path, "rb").read()
image = Image.open(BytesIO(image_data))
plt.imshow(image)

sample.jpg(軍手の画像)が表示されることを確認し...
f:id:acro-engineer:20201115030225p:plain


Computer Vision APIを呼び出してsample.jpgの解析結果を受け取ります。

# Compouter Vision APIを呼び出し、画像解析結果(タグやキャプション)を得る
subscription_key = "<Computer Vision APIのキー (ポータルで確認する)>"
endpoint = "https://sample202011.cognitiveservices.azure.com/"
analyze_url = endpoint + "vision/v3.1/analyze"
headers = {'Ocp-Apim-Subscription-Key': subscription_key, 'Content-Type': 'application/octet-stream'}
params = {'visualFeatures': 'Categories,Description'}  # 今回はCategories使わないですが、使いたい場合もあると思うので。
response = requests.post(analyze_url, headers=headers, params=params, data=image_data)

# 結果をパース
analysis = response.json()
tags = analysis['description']['tags']
image_caption = analysis["description"]["captions"][0]["text"].capitalize()

# 解析結果の表示
print("tags: {}".format(tags))
print("caption: {}".format(image_caption))

結果が取れました。タグは 'handwear' で良い感じですね。キャプションは。。。うん、ユーモラスですね。嫌いじゃないです(違う)。
f:id:acro-engineer:20201115030343p:plain

4-3 Cognitive Search での検索

いよいよCognitive Searchで検索結果を取得してみます。
ここでは先ほどの画像解析で得られた 'handware' で検索をかけて見ましょう。

from azure.core.credentials import AzureKeyCredential
from azure.search.documents import SearchClient

# cognitive search の検索クライアントを定義
index_name = "azureblob-index";
endpoint = 'https://cognitive-search-sample.search.windows.net/'
key = '<Cognitive Searchのアクセスキー>'
credential = AzureKeyCredential(key)
client = SearchClient(endpoint=endpoint,
                      index_name=index_name,
                      credential=credential)

# 検索結果の上位5件のファイル名を取得する
results = client.search(search_text=tags, top=5) # 今回はタグ (handware)で検索

# 検索結果をBlobから取得するための設定
container_name = "images"
connect_str = "<コンテナの接続文字列>"
blob_service_client = BlobServiceClient.from_connection_string(connect_str)

# 検索結果のファイル名を使って、Blobから画像を取得して表示する
for result in results:
    blob_client = blob_service_client.get_blob_client(container=container_name, blob=result['metadata_storage_name'])
    image = Image.open(BytesIO(blob_client.download_blob().readall()))
    plt.imshow(image)
    print(result['metadata_storage_name'])
    plt.axis("off")
    plt.show()

f:id:acro-engineer:20201109002803p:plain

しっかり軍手が取得できていますね。
めでたしめでたし。

まとめ

  • Azure Cognitive Searchを用いて、類似した画像の検索を手軽に実装することができた。(サンプル探しも含めて2,30分くらい)
  • 実際にスマホで写真を撮るなら、背景に他の物が写るケースが多いと思うので、対応できるか要確認です
  • 今回はimageTagsを使いましたが、HAMMERのように画像中の文字列で検索するのも面白いかもしれません
  • 細かいスコアリングや、Analyzerの設定にはフォーカスしなかったが、もっと突き詰めると良い検索が実現できそう
  • ドキュメントを読み切れていないので、もっと良い使い方などはありそうです。お気づきの点があったら是非教えてください


以上です。お読みいただきありがとうございました。

Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

【データ分析】
Kaggle Masterと働きたい尖ったエンジニアWanted! - Acroquest Technology株式会社のデータサイエンティストの求人 - Wantedlywww.wantedly.com

ElasticON Security Japanに参加してきました!

こんにちは、ノムラです。

Elastic社のイベントである、「ElasticON Security Japan」が11/05に開催されました。
最近は各ソリューション毎のElastic社のイベントが多く開催されており、新しい知識や刺激を得る機会が多く、とても充実しています。

今回のイベントもオンライン上の開催となり、専用のウェブサイト上で配信を観たりコミュニケーションを取れる形式となっています。
f:id:acro-engineer:20201106053845p:plain:w800

増大するセキュリティリスクに対して、どのようにElastic Stackを活用していくかについて、
テクニカルセッションとユーザ事例のセッションの発表がありました。

カンファレンス概要

アジェンダ

  1. オープニング
  2. 基調講演 Elastic Security その進化とビジョン
  3. Elastic Security 包括的な可視性の確立
  4. 脅威検知を自動化する
  5. Elastic Security Operationalize
  6. ユーザ事例
  7. クロージング

今回はその中で、

  • 基調講演 Elastic Security その進化とビジョン
  • Elastic Security 包括的な可視性の確立
  • ユーザ事例

についてご紹介します。

セッション内容

1. 基調講演 Elastic Security その進化とビジョン

Elastic Securityの概要や、今後のビジョンについてのセッションでした。

概要

昨今のセキュリティ課題に対して、Elastic Securityがどのように対応していくかについての紹介でした。
f:id:acro-engineer:20201106055956p:plain:w460f:id:acro-engineer:20201106060011p:plain:w460

今後のビジョン

既存のWindowsLinuxの端末のOSに追加して、より広域なユースケースへの適用を打ち出していくそうです。
f:id:acro-engineer:20201106061431p:plain:w800

DNSやネットワーク機器等の社内に構築されたセキュリティ基盤からクラウドサービス等へも適用可能なため、非常に広いユースケースに対応していると思いました。

2. Elastic Security 包括的な可視性の確立

次は、セキュリティのデータ分析に関する4つの課題に対して、どのようにElastic Securityを活用し対応するかについてのセッションでした。
f:id:acro-engineer:20201106063202p:plain:w800

どんなデータを収集するか/どのようにデータを収集するか

データ収集はElastic Agentを活用することで、よく利用されるプロダクトのログは簡単に収集を開始することができます。
もちろんECS(Elastic Common Schema)に合わせてデータを登録することで、オリジナルフォーマットのログであっても分析することが可能です。
f:id:acro-engineer:20201106064627p:plain:w800

私自身試しに触ってみた際に、端末へのエージェントのインストールから収集開始までが非常に簡単だったこと(Windows OSへの適用は5分位で可能でした)はとても驚きました。

どのようにデータを管理するのか?

Hot-Warmアーキテクチャを有効に活用することで、効率的にデータを管理することが可能です。
また去年からFreezeインデックスも利用可能となり、より大量のデータを保持/管理することが可能となりました。
詳しくは下記ブログをご参照ください。
www.elastic.co

どのように実行可能にしていくか?

現状で200以上標準で用意されている、検知ルールを活用することで、多様な攻撃を検知することが可能です。
またカスタマイズルールも作成可能なため、標準機能だけでは網羅できない部分もカバーできるようになっています。
f:id:acro-engineer:20201106071143p:plain:w800

3. ユーザ事例の紹介

①Elastic Cloud を利用したセキュリティ監視の事例(横河電機株式会社 塩崎氏)

外部委託していたセキュリティ監視業務を、Elastic Cloud + Elastic Securityを活用することでグローバルで統合した事例の紹介でした。
グローバルの各拠点毎に異なるソリューションを利用しセキュリティ監視を行っていたため、統合的に監視することが可能なElastic Stackを採用したとのことです。
f:id:acro-engineer:20201106073505p:plain:w460f:id:acro-engineer:20201106075001p:plain:w460

また個人的に気になったのは収集したデータの可視化/分析の部分です。
全てのリージョンを一覧で可視化した、Overviewのダッシュボードから各リージョン、各製品毎のダッシュボードへドリルダウンしていく構成は、
先日のElasticON Globalのブログでも記載したダッシュボード同士を移動できるドリルダウン機能が活用されているのかな、と想像を膨らませていました。
(ElasticON Globalについては下記のブログをご覧ください)
acro-engineer.hatenablog.com
acro-engineer.hatenablog.com

②大規模スレットインテリジェンス基盤の運用事例 Elasticセキュリティ活用ケース紹介(株式会社ラック 山城氏、ザナシル アマル氏)

グローバルに設置したハニーポッドへの攻撃ログの分析基盤として、Elastic Stackを採用した事例についての紹介でした。

この事例紹介では特になぜElastic Stackを採用したのか?という点についての話が勉強になりました。
f:id:acro-engineer:20201106080556p:plain:w800

コスト面だけでなく、様々な切り口からの可視化、データ投入後のデータ加工が可能であるため、Elastic Stackを採用したとのことでした。
私自身も普段Elastic Stackを活用している中で感じるメリットの1つです。

まとめ

今回ご紹介できなかった、他セッションではElastic Securityの検知ルールの詳細や、検知ワークフローについて紹介されているので気になった方は後日ビデオが公開されると思いますので、是非ご覧ください。

簡易にデータ収集/分析を始めることができ、かつ非常に多くの検知ルール、検知用機械学習ジョブが標準で利用可能なElastic Securityは非常に強力なソリューションだと思いました。
現場で実際に活用できるように、引き続き情報を仕入れていきたいと思います。

それでは。

Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

世界初のElastic認定エンジニアと一緒に働きたい人Wanted! - Acroquest Technology株式会社のデータサイエンティストの求人 - Wantedlywww.wantedly.com