SlideShare une entreprise Scribd logo
1  sur  29
Télécharger pour lire hors ligne
1Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Ingest Node
Scripting Deep Dive
Acroquest Technology株式会社
Senior Consultant / Elastic Certified Engineer
吉岡 洋 @Hirosh_Yoshioka
はじめに
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
1.今日話すこと
①Ingest Nodeの例外処理グッドプラクティス
2.今日話さないこと
①Ingest APIの解説
目次
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
1.Ingest Nodeとは
2.例外処理
3.Circuit Breaker
自己紹介
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
1. Acroquest Technology株式会社
2. 吉岡 洋(@Hirosh_Yoshioka)
3. 業務
− Elastic Stackのコンサルティング全般
(全文検索/ログ分析/セキュリティ分析/可視化)
4. その他
− 世界初のElastic Certified Engineer
− 日本初のElastic社認定コンサルタント
− Elastic User Group Tokyo運営
Acroquest Technology株式会社
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
1. 新横浜にあるITベンチャー
①Great Place To Work(R) Institute Japan実施
働きがいのある会社ランキング第1位(3回受賞)
2. 事業(データ活用ビジネス)
①Elastic Stack活用コンサルティングサービス
– 検証/設計/構築/運用支援など
– Elastic Certified Engineer:5名
②IoTデータ分析プラットフォーム
③機械学習/AI
1. Ingest Nodeとは
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
1-1. Ingest Nodeとは?
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
1. 特徴
①Elasticsearchにドキュメントをインデクシングする際の
前処理として、様々なデータ加工を行う機能。
②Ingest Nodeの役割を持ったノードで実行される。
2. メリット
①ローコード開発(各種Processor+Painless Script)
②加工処理のSimulationが可能(Simulate pipeline API)
③加工処理をスケール可能(複数台Ingest Node)
1-2. Ingest Nodeの利用シーン
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
1. Logstashと異なり、既存データの加工が可能
2. データ保守で利用シーンが多い
No 概要 利用API Logstashによる代替
1 新規投入データの加工 ・Index API
・Bulk API
可能
2 既存データの加工
・フィールド追加や値の変更
・Update By Query API 不可能
3 既存データの加工
・マッピング構造の変更
・Analyzer関連の変更
・Reindex API 不可能
1-3. Ingest Nodeで可能な加工処理
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
1. Document操作
①特定条件でDrop
2. フィールド操作
①追加/削除/リネーム/値セット
3. Index名操作
①日付を付与、投入先インデックスを変更
4. 文字列操作
①CSV/JSONパース、文字列置換/正規表現抽出
②大文字/小文字化
1-3. Ingest Nodeで可能な加工処理
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
5. 配列操作
①Split/Append/Join/Sort
6. データ付与
①GeoIP/Enrich
7. 教師あり機械学習モデルの推論
①言語判定
②回帰/分類
8. Painless Script
①例)文字列配列に対して正規表現で文字列を抽出する
2. 例外処理
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
2-1. エラー発生時の挙動
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
1. Processorでエラーが発生するとインデクシングはSkipされる
① 正しいデータ加工/デバッグのため、例外処理は重要
POST _ingest/pipeline/_simulate
{
"pipeline": {
"processors": [{
"rename": {
"field": "server_name",
"target_field": "host.name"
}
}]
},
"docs": [
{ "_source":{ "xxx": "vega" } }
]
}
{
"docs" : [{
"error" : {
"root_cause" : [
{
"type" : "illegal_argument_exception",
"reason" : "field [server_name] doesn't exist"
}
],
"type" : "illegal_argument_exception",
"reason" : "field [server_name] doesn't exist"
}
}]
}
server_nameフィールドが存在しない
2-2. 例外処理パターン
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
1. 代表的な5つの例外処理パターン
No 概要 利用機能
1 各Processorを対象にエラーをCatchする
(エラー発生時にリカバリする処理)
on_failureパラメータ
2 Pipeline全体を対象にエラーをCatchする
(想定外エラー発生時の処理)
on_failureブロック
3 エラーが発生しても処理を継続する
(例外をCatchして何もしない)
ignore_failureパラメータ
4 Processorの実行条件を記述する
(主にNullチェックで利用)
ifパラメータ
5 Nullチェックを簡易化する
(スクリプト記述量が減る)
Null Safeオペレータ(?.)
2-2. 例外処理パターン
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
2. Pipeline全体を対象にエラーをCatchする(on_failureブロック)
"on_failure" : [{
"set" : {
"field" : "error.message",
"value" : "{{ _ingest.on_failure_message }}"
},
"set" : {
"field" : "_index",
"value" : "error-index"
}
}]
想定外のエラーが発生した場合、
①error.messageにエラー内容を設定
②投入先をerror-indexに変更
※https://www.elastic.co/guide/en/elasticsearch/reference/current/handling-failure-in-pipelines.html
2-2. 例外処理パターン
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
4. Processorの実行条件を記述する(ifパラメータ)
PUT _ingest/pipeline/remove_temp
{
"processors": [
{
"remove": {
"field": "temp"
"if": "ctx.temp != null"
}
}
]
}
tempフィールドが存在する場合、
削除する
※https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest-conditionals.html
2-2. 例外処理パターン
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
5. Nullチェックを簡易化する(Null Safeオペレータ)
PUT _ingest/pipeline/drop_guests_network
{
"processors": [
{
"drop": {
"if": "ctx.network?.name == 'Guest'"
}
}
]
}
network階層が存在しない場合、
左辺はnullを返す
※https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest-conditional-nullcheck.html
3. Circuit breaker
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Ingest Nodeを実装して
いざ、データを投入!
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
データを投入すると
Circuit Breakerが
発動してデータ登録失敗
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
3-1. Script compilation circuit breaker(~7.8)
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
1. すべてのスクリプト処理を1つの閾値で判定
2. スクリプトCompileは5分間に75回まで
①script.max_compilations_rate
②あまり上げ過ぎると、OOMEのリスクが高まる
3. スクリプトCacheは100(Compile結果が入る)
①script.cache.max_size
②Elastic Cloudでは変更不可
4. Ingest Nodeでスクリプトにカウントされるもの
①Pipeline Processor/Script Processor/ifパラメータ
3-2. Circuit breaker対策
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
1. Script ProcessorをStored Script(事前コンパイル)にする
POST _ingest/pipeline/_simulate
{
"pipeline": {
"processors": [
{
"script": {"id": "double"}
}
]
},
"docs": [
{
"_source":{"number": 33}
}
]
}
POST _scripts/double/
{
"script": {
"lang": "painless",
"source": "ctx.number2 = ctx.number * 2"
}
}
3-2. Circuit breaker対策
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
{
"docs" : [
{
"doc" : {
"_index" : "_index",
"_type" : "_doc",
"_id" : "_id",
"_source" : {
"number" : 33,
"number2" : 66
},
"_ingest" : {
"timestamp" : "2020-08-25T17:57:16.391823Z"
}
}
}
]
}
データを投入すると
再びCircuit Breakerが
発動してデータ登録失敗
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Processor毎に
存在するifパラメータは
Stored Scriptに
登録できない
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Elastic Stack 7.9で改善
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
3-3. Script compilation circuit breaker(7.9~)
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
1. Circuit breakerの設定はContext単位に設定可能
①script.context.$CONTEXT.max_compilations_rate
②script.context.$CONTEXT.cache_max_size
$CONTEXT
Cache
(デフォルト)
Compile Rate
(デフォルト)
ingest 200 制限なし
processor_conditional 200 制限なし
aggs 100 75/5m
bucket_aggregation 100 75/5m
field 100 75/5m
score 100 75/5m
: : :
3-4. Ingest Node Pipelines(7.9~)
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
Kibana UIで
Ingest Nodeを
簡単に編集
まとめ
Copyright © Acroquest Technology Co., Ltd. All rights reserved.
1. Ingest Nodeはローコード開発のデータ加工基盤
2. 5つの例外処理パターンを利用する
3. Ingest Nodeで多数のScriptを利用する場合は
Circuit Breakerが発生しやすい
4. 解決策は以下
①Stored Scriptを積極利用する
②Ver.7.9以上を利用する
ご清聴ありがとうございました。
Evolve the Earth with Emotion of Technology
Copyright © Acroquest Technology Co., Ltd. All rights reserved.

Contenu connexe

Tendances

コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話Yuta Shimada
 
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)NTT DATA Technology & Innovation
 
第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep Dive
第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep Dive第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep Dive
第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep DiveAmazon Web Services Japan
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜 リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜 Yugo Shimizu
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with KarateTakanori Suzuki
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションMasahiko Sawada
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法Tetsutaro Watanabe
 
DeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a ServiceDeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a ServiceMakoto Haruyama
 
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26Yahoo!デベロッパーネットワーク
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線Motonori Shindo
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことAmazon Web Services Japan
 
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門Yoshimura Soichiro
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NETterurou
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...NTT DATA Technology & Innovation
 
Yahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSS
Yahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSSYahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSS
Yahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSSYahoo!デベロッパーネットワーク
 

Tendances (20)

コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
 
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
Kubernetes環境に対する性能試験(Kubernetes Novice Tokyo #2 発表資料)
 
第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep Dive
第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep Dive第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep Dive
第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep Dive
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜 リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 
DeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a ServiceDeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a Service
 
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
 
Yahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSS
Yahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSSYahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSS
Yahoo! JAPANのプライベートRDBクラウドとマルチライター型 MySQL #dbts2017 #dbtsOSS
 

Similaire à Ingest node scripting_deep_dive

Packetbeatの基礎から、IoTデバイス異常検知への応用まで
Packetbeatの基礎から、IoTデバイス異常検知への応用までPacketbeatの基礎から、IoTデバイス異常検知への応用まで
Packetbeatの基礎から、IoTデバイス異常検知への応用までSatoyuki Tsukano
 
マイクロサービスにおけるテスト自動化 with Karate
マイクロサービスにおけるテスト自動化 with Karateマイクロサービスにおけるテスト自動化 with Karate
マイクロサービスにおけるテスト自動化 with KarateTakanori Suzuki
 
Elastic Community Conference
Elastic Community ConferenceElastic Community Conference
Elastic Community ConferenceHiroshi Yoshioka
 
Uniform indexing load with cluster reroute api
Uniform indexing load with cluster reroute apiUniform indexing load with cluster reroute api
Uniform indexing load with cluster reroute apiHiroshi Yoshioka
 
デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~
デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~
デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~Takanori Suzuki
 
第45回elasticsearch勉強会 BERTモデルを利用した文書分類
第45回elasticsearch勉強会 BERTモデルを利用した文書分類第45回elasticsearch勉強会 BERTモデルを利用した文書分類
第45回elasticsearch勉強会 BERTモデルを利用した文書分類shinhiguchi
 
2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet ServicesNaoto Gohko
 
Karateによる UI Test Automation 革命
Karateによる UI Test Automation 革命Karateによる UI Test Automation 革命
Karateによる UI Test Automation 革命Takanori Suzuki
 
2015RTミドルウエア講習会
2015RTミドルウエア講習会2015RTミドルウエア講習会
2015RTミドルウエア講習会openrtm
 
ochacafe#6 人にもマシンにもやさしいAPIのエコシステム
ochacafe#6 人にもマシンにもやさしいAPIのエコシステムochacafe#6 人にもマシンにもやさしいAPIのエコシステム
ochacafe#6 人にもマシンにもやさしいAPIのエコシステムオラクルエンジニア通信
 
Elasticsearch workshop 23_sql
Elasticsearch workshop 23_sqlElasticsearch workshop 23_sql
Elasticsearch workshop 23_sqlshinhiguchi
 
20211209 lt runtime_field
20211209 lt runtime_field20211209 lt runtime_field
20211209 lt runtime_fieldNomura Yuta
 
RTミドルウエア: OpenRTM-aist概要
RTミドルウエア: OpenRTM-aist概要 RTミドルウエア: OpenRTM-aist概要
RTミドルウエア: OpenRTM-aist概要 openrtm
 
iREX2015 RTM講習会
iREX2015 RTM講習会iREX2015 RTM講習会
iREX2015 RTM講習会openrtm
 
OpenStack本番環境の作り方 - Interop 2016
OpenStack本番環境の作り方 - Interop 2016OpenStack本番環境の作り方 - Interop 2016
OpenStack本番環境の作り方 - Interop 2016VirtualTech Japan Inc.
 
20180704 soracom discovery_ug#11
20180704 soracom discovery_ug#1120180704 soracom discovery_ug#11
20180704 soracom discovery_ug#11Haruka Yamashita
 
インメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギインメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギMasaki Yamakawa
 
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例Hironobu Isoda
 
Supervised Machine Learning of Elastic Stack
Supervised Machine Learning of Elastic StackSupervised Machine Learning of Elastic Stack
Supervised Machine Learning of Elastic StackHiroshi Yoshioka
 

Similaire à Ingest node scripting_deep_dive (20)

Packetbeatの基礎から、IoTデバイス異常検知への応用まで
Packetbeatの基礎から、IoTデバイス異常検知への応用までPacketbeatの基礎から、IoTデバイス異常検知への応用まで
Packetbeatの基礎から、IoTデバイス異常検知への応用まで
 
マイクロサービスにおけるテスト自動化 with Karate
マイクロサービスにおけるテスト自動化 with Karateマイクロサービスにおけるテスト自動化 with Karate
マイクロサービスにおけるテスト自動化 with Karate
 
Elastic Community Conference
Elastic Community ConferenceElastic Community Conference
Elastic Community Conference
 
Elastic ML Introduction
Elastic ML IntroductionElastic ML Introduction
Elastic ML Introduction
 
Uniform indexing load with cluster reroute api
Uniform indexing load with cluster reroute apiUniform indexing load with cluster reroute api
Uniform indexing load with cluster reroute api
 
デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~
デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~
デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~
 
第45回elasticsearch勉強会 BERTモデルを利用した文書分類
第45回elasticsearch勉強会 BERTモデルを利用した文書分類第45回elasticsearch勉強会 BERTモデルを利用した文書分類
第45回elasticsearch勉強会 BERTモデルを利用した文書分類
 
2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services2015 0228 OpenStack swift; GMO Internet Services
2015 0228 OpenStack swift; GMO Internet Services
 
Karateによる UI Test Automation 革命
Karateによる UI Test Automation 革命Karateによる UI Test Automation 革命
Karateによる UI Test Automation 革命
 
2015RTミドルウエア講習会
2015RTミドルウエア講習会2015RTミドルウエア講習会
2015RTミドルウエア講習会
 
ochacafe#6 人にもマシンにもやさしいAPIのエコシステム
ochacafe#6 人にもマシンにもやさしいAPIのエコシステムochacafe#6 人にもマシンにもやさしいAPIのエコシステム
ochacafe#6 人にもマシンにもやさしいAPIのエコシステム
 
Elasticsearch workshop 23_sql
Elasticsearch workshop 23_sqlElasticsearch workshop 23_sql
Elasticsearch workshop 23_sql
 
20211209 lt runtime_field
20211209 lt runtime_field20211209 lt runtime_field
20211209 lt runtime_field
 
RTミドルウエア: OpenRTM-aist概要
RTミドルウエア: OpenRTM-aist概要 RTミドルウエア: OpenRTM-aist概要
RTミドルウエア: OpenRTM-aist概要
 
iREX2015 RTM講習会
iREX2015 RTM講習会iREX2015 RTM講習会
iREX2015 RTM講習会
 
OpenStack本番環境の作り方 - Interop 2016
OpenStack本番環境の作り方 - Interop 2016OpenStack本番環境の作り方 - Interop 2016
OpenStack本番環境の作り方 - Interop 2016
 
20180704 soracom discovery_ug#11
20180704 soracom discovery_ug#1120180704 soracom discovery_ug#11
20180704 soracom discovery_ug#11
 
インメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギインメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギ
 
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例
 
Supervised Machine Learning of Elastic Stack
Supervised Machine Learning of Elastic StackSupervised Machine Learning of Elastic Stack
Supervised Machine Learning of Elastic Stack
 

Ingest node scripting_deep_dive

  • 1. 1Copyright © Acroquest Technology Co., Ltd. All rights reserved. Ingest Node Scripting Deep Dive Acroquest Technology株式会社 Senior Consultant / Elastic Certified Engineer 吉岡 洋 @Hirosh_Yoshioka
  • 2. はじめに Copyright © Acroquest Technology Co., Ltd. All rights reserved. 1.今日話すこと ①Ingest Nodeの例外処理グッドプラクティス 2.今日話さないこと ①Ingest APIの解説
  • 3. 目次 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 1.Ingest Nodeとは 2.例外処理 3.Circuit Breaker
  • 4. 自己紹介 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 1. Acroquest Technology株式会社 2. 吉岡 洋(@Hirosh_Yoshioka) 3. 業務 − Elastic Stackのコンサルティング全般 (全文検索/ログ分析/セキュリティ分析/可視化) 4. その他 − 世界初のElastic Certified Engineer − 日本初のElastic社認定コンサルタント − Elastic User Group Tokyo運営
  • 5. Acroquest Technology株式会社 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 1. 新横浜にあるITベンチャー ①Great Place To Work(R) Institute Japan実施 働きがいのある会社ランキング第1位(3回受賞) 2. 事業(データ活用ビジネス) ①Elastic Stack活用コンサルティングサービス – 検証/設計/構築/運用支援など – Elastic Certified Engineer:5名 ②IoTデータ分析プラットフォーム ③機械学習/AI
  • 6. 1. Ingest Nodeとは Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 7. 1-1. Ingest Nodeとは? Copyright © Acroquest Technology Co., Ltd. All rights reserved. 1. 特徴 ①Elasticsearchにドキュメントをインデクシングする際の 前処理として、様々なデータ加工を行う機能。 ②Ingest Nodeの役割を持ったノードで実行される。 2. メリット ①ローコード開発(各種Processor+Painless Script) ②加工処理のSimulationが可能(Simulate pipeline API) ③加工処理をスケール可能(複数台Ingest Node)
  • 8. 1-2. Ingest Nodeの利用シーン Copyright © Acroquest Technology Co., Ltd. All rights reserved. 1. Logstashと異なり、既存データの加工が可能 2. データ保守で利用シーンが多い No 概要 利用API Logstashによる代替 1 新規投入データの加工 ・Index API ・Bulk API 可能 2 既存データの加工 ・フィールド追加や値の変更 ・Update By Query API 不可能 3 既存データの加工 ・マッピング構造の変更 ・Analyzer関連の変更 ・Reindex API 不可能
  • 9. 1-3. Ingest Nodeで可能な加工処理 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 1. Document操作 ①特定条件でDrop 2. フィールド操作 ①追加/削除/リネーム/値セット 3. Index名操作 ①日付を付与、投入先インデックスを変更 4. 文字列操作 ①CSV/JSONパース、文字列置換/正規表現抽出 ②大文字/小文字化
  • 10. 1-3. Ingest Nodeで可能な加工処理 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 5. 配列操作 ①Split/Append/Join/Sort 6. データ付与 ①GeoIP/Enrich 7. 教師あり機械学習モデルの推論 ①言語判定 ②回帰/分類 8. Painless Script ①例)文字列配列に対して正規表現で文字列を抽出する
  • 11. 2. 例外処理 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 12. 2-1. エラー発生時の挙動 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 1. Processorでエラーが発生するとインデクシングはSkipされる ① 正しいデータ加工/デバッグのため、例外処理は重要 POST _ingest/pipeline/_simulate { "pipeline": { "processors": [{ "rename": { "field": "server_name", "target_field": "host.name" } }] }, "docs": [ { "_source":{ "xxx": "vega" } } ] } { "docs" : [{ "error" : { "root_cause" : [ { "type" : "illegal_argument_exception", "reason" : "field [server_name] doesn't exist" } ], "type" : "illegal_argument_exception", "reason" : "field [server_name] doesn't exist" } }] } server_nameフィールドが存在しない
  • 13. 2-2. 例外処理パターン Copyright © Acroquest Technology Co., Ltd. All rights reserved. 1. 代表的な5つの例外処理パターン No 概要 利用機能 1 各Processorを対象にエラーをCatchする (エラー発生時にリカバリする処理) on_failureパラメータ 2 Pipeline全体を対象にエラーをCatchする (想定外エラー発生時の処理) on_failureブロック 3 エラーが発生しても処理を継続する (例外をCatchして何もしない) ignore_failureパラメータ 4 Processorの実行条件を記述する (主にNullチェックで利用) ifパラメータ 5 Nullチェックを簡易化する (スクリプト記述量が減る) Null Safeオペレータ(?.)
  • 14. 2-2. 例外処理パターン Copyright © Acroquest Technology Co., Ltd. All rights reserved. 2. Pipeline全体を対象にエラーをCatchする(on_failureブロック) "on_failure" : [{ "set" : { "field" : "error.message", "value" : "{{ _ingest.on_failure_message }}" }, "set" : { "field" : "_index", "value" : "error-index" } }] 想定外のエラーが発生した場合、 ①error.messageにエラー内容を設定 ②投入先をerror-indexに変更 ※https://www.elastic.co/guide/en/elasticsearch/reference/current/handling-failure-in-pipelines.html
  • 15. 2-2. 例外処理パターン Copyright © Acroquest Technology Co., Ltd. All rights reserved. 4. Processorの実行条件を記述する(ifパラメータ) PUT _ingest/pipeline/remove_temp { "processors": [ { "remove": { "field": "temp" "if": "ctx.temp != null" } } ] } tempフィールドが存在する場合、 削除する ※https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest-conditionals.html
  • 16. 2-2. 例外処理パターン Copyright © Acroquest Technology Co., Ltd. All rights reserved. 5. Nullチェックを簡易化する(Null Safeオペレータ) PUT _ingest/pipeline/drop_guests_network { "processors": [ { "drop": { "if": "ctx.network?.name == 'Guest'" } } ] } network階層が存在しない場合、 左辺はnullを返す ※https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest-conditional-nullcheck.html
  • 17. 3. Circuit breaker Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 18. Ingest Nodeを実装して いざ、データを投入! Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 20. 3-1. Script compilation circuit breaker(~7.8) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 1. すべてのスクリプト処理を1つの閾値で判定 2. スクリプトCompileは5分間に75回まで ①script.max_compilations_rate ②あまり上げ過ぎると、OOMEのリスクが高まる 3. スクリプトCacheは100(Compile結果が入る) ①script.cache.max_size ②Elastic Cloudでは変更不可 4. Ingest Nodeでスクリプトにカウントされるもの ①Pipeline Processor/Script Processor/ifパラメータ
  • 21. 3-2. Circuit breaker対策 Copyright © Acroquest Technology Co., Ltd. All rights reserved. 1. Script ProcessorをStored Script(事前コンパイル)にする POST _ingest/pipeline/_simulate { "pipeline": { "processors": [ { "script": {"id": "double"} } ] }, "docs": [ { "_source":{"number": 33} } ] } POST _scripts/double/ { "script": { "lang": "painless", "source": "ctx.number2 = ctx.number * 2" } }
  • 22. 3-2. Circuit breaker対策 Copyright © Acroquest Technology Co., Ltd. All rights reserved. { "docs" : [ { "doc" : { "_index" : "_index", "_type" : "_doc", "_id" : "_id", "_source" : { "number" : 33, "number2" : 66 }, "_ingest" : { "timestamp" : "2020-08-25T17:57:16.391823Z" } } } ] }
  • 25. Elastic Stack 7.9で改善 Copyright © Acroquest Technology Co., Ltd. All rights reserved.
  • 26. 3-3. Script compilation circuit breaker(7.9~) Copyright © Acroquest Technology Co., Ltd. All rights reserved. 1. Circuit breakerの設定はContext単位に設定可能 ①script.context.$CONTEXT.max_compilations_rate ②script.context.$CONTEXT.cache_max_size $CONTEXT Cache (デフォルト) Compile Rate (デフォルト) ingest 200 制限なし processor_conditional 200 制限なし aggs 100 75/5m bucket_aggregation 100 75/5m field 100 75/5m score 100 75/5m : : :
  • 27. 3-4. Ingest Node Pipelines(7.9~) Copyright © Acroquest Technology Co., Ltd. All rights reserved. Kibana UIで Ingest Nodeを 簡単に編集
  • 28. まとめ Copyright © Acroquest Technology Co., Ltd. All rights reserved. 1. Ingest Nodeはローコード開発のデータ加工基盤 2. 5つの例外処理パターンを利用する 3. Ingest Nodeで多数のScriptを利用する場合は Circuit Breakerが発生しやすい 4. 解決策は以下 ①Stored Scriptを積極利用する ②Ver.7.9以上を利用する
  • 29. ご清聴ありがとうございました。 Evolve the Earth with Emotion of Technology Copyright © Acroquest Technology Co., Ltd. All rights reserved.