SlideShare a Scribd company logo
1 of 29
Download to read offline
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.

More Related Content

What's hot

JJUGCCC2022spring_連続画像処理による位置情報計算を支えるマイクロサービスアーキテクチャ
JJUGCCC2022spring_連続画像処理による位置情報計算を支えるマイクロサービスアーキテクチャJJUGCCC2022spring_連続画像処理による位置情報計算を支えるマイクロサービスアーキテクチャ
JJUGCCC2022spring_連続画像処理による位置情報計算を支えるマイクロサービスアーキテクチャ
Kaname Motoyama
 

What's hot (20)

VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
 
モダンフロントエンド開発者に求められるスキルとは
モダンフロントエンド開発者に求められるスキルとはモダンフロントエンド開発者に求められるスキルとは
モダンフロントエンド開発者に求められるスキルとは
 
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦
 
OSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係についてOSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係について
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
 
JJUGCCC2022spring_連続画像処理による位置情報計算を支えるマイクロサービスアーキテクチャ
JJUGCCC2022spring_連続画像処理による位置情報計算を支えるマイクロサービスアーキテクチャJJUGCCC2022spring_連続画像処理による位置情報計算を支えるマイクロサービスアーキテクチャ
JJUGCCC2022spring_連続画像処理による位置情報計算を支えるマイクロサービスアーキテクチャ
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
 
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
チケット駆動開発の解説~タスク管理からプロセス改善へ
チケット駆動開発の解説~タスク管理からプロセス改善へチケット駆動開発の解説~タスク管理からプロセス改善へ
チケット駆動開発の解説~タスク管理からプロセス改善へ
 

Similar to Ingest node scripting_deep_dive

デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~
デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~
デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~
Takanori Suzuki
 

Similar to 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
 
インメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギインメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギ
 
はじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタはじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタ
 
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例
 

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.