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

分散トレーシングAWS:X-Rayとの上手い付き合い方
分散トレーシングAWS:X-Rayとの上手い付き合い方分散トレーシングAWS:X-Rayとの上手い付き合い方
分散トレーシングAWS:X-Rayとの上手い付き合い方Recruit Lifestyle Co., Ltd.
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)NTT DATA Technology & Innovation
 
超簡単! Payara ServerをWindowsにインストール
超簡単! Payara ServerをWindowsにインストール超簡単! Payara ServerをWindowsにインストール
超簡単! Payara ServerをWindowsにインストールShin Tanigawa
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションMasahiko Sawada
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) Hironobu Isoda
 
Spring Boot + Netflix Eureka
Spring Boot + Netflix EurekaSpring Boot + Netflix Eureka
Spring Boot + Netflix Eureka心 谷本
 
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDayマイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay都元ダイスケ Miyamoto
 
Hinemos Deep Dive~ジョブ編~
Hinemos Deep Dive~ジョブ編~Hinemos Deep Dive~ジョブ編~
Hinemos Deep Dive~ジョブ編~Hinemos
 
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG:  process 12345 still waiting for ShareLock on transaction 710 afte...行ロックと「LOG:  process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...Masahiko Sawada
 
GitLab CI/CD パイプライン
GitLab CI/CD パイプラインGitLab CI/CD パイプライン
GitLab CI/CD パイプラインTetsurou Yano
 
エンジニア必見!Sreへの第一歩
エンジニア必見!Sreへの第一歩エンジニア必見!Sreへの第一歩
エンジニア必見!Sreへの第一歩Takuya Tezuka
 
Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Hiroyuki Wada
 
モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜
モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜
モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜KLab Inc. / Tech
 
Datadog による Container の監視について
Datadog による Container の監視についてDatadog による Container の監視について
Datadog による Container の監視についてMasaya Aoyama
 
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜Akira Nakagawa
 
"はじめてのKong Konnect" APIゲートウェイと Service Meshについて学ぼう!
"はじめてのKong Konnect" APIゲートウェイと Service Meshについて学ぼう! "はじめてのKong Konnect" APIゲートウェイと Service Meshについて学ぼう!
"はじめてのKong Konnect" APIゲートウェイと Service Meshについて学ぼう! Junji Nishihara
 
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選Takuya Ueda
 

What's hot (20)

分散トレーシングAWS:X-Rayとの上手い付き合い方
分散トレーシングAWS:X-Rayとの上手い付き合い方分散トレーシングAWS:X-Rayとの上手い付き合い方
分散トレーシングAWS:X-Rayとの上手い付き合い方
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
 
Spring Cloud Data Flow の紹介 #streamctjp
Spring Cloud Data Flow の紹介  #streamctjpSpring Cloud Data Flow の紹介  #streamctjp
Spring Cloud Data Flow の紹介 #streamctjp
 
超簡単! Payara ServerをWindowsにインストール
超簡単! Payara ServerをWindowsにインストール超簡単! Payara ServerをWindowsにインストール
超簡単! Payara ServerをWindowsにインストール
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
 
Spring Boot + Netflix Eureka
Spring Boot + Netflix EurekaSpring Boot + Netflix Eureka
Spring Boot + Netflix Eureka
 
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDayマイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
 
Hinemos Deep Dive~ジョブ編~
Hinemos Deep Dive~ジョブ編~Hinemos Deep Dive~ジョブ編~
Hinemos Deep Dive~ジョブ編~
 
OAuth 2.0のResource Serverの作り方
OAuth 2.0のResource Serverの作り方OAuth 2.0のResource Serverの作り方
OAuth 2.0のResource Serverの作り方
 
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG:  process 12345 still waiting for ShareLock on transaction 710 afte...行ロックと「LOG:  process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
 
GitLab CI/CD パイプライン
GitLab CI/CD パイプラインGitLab CI/CD パイプライン
GitLab CI/CD パイプライン
 
エンジニア必見!Sreへの第一歩
エンジニア必見!Sreへの第一歩エンジニア必見!Sreへの第一歩
エンジニア必見!Sreへの第一歩
 
Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介
 
モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜
モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜
モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜
 
Datadog による Container の監視について
Datadog による Container の監視についてDatadog による Container の監視について
Datadog による Container の監視について
 
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
 
Argo CD Deep Dive
Argo CD Deep DiveArgo CD Deep Dive
Argo CD Deep Dive
 
"はじめてのKong Konnect" APIゲートウェイと Service Meshについて学ぼう!
"はじめてのKong Konnect" APIゲートウェイと Service Meshについて学ぼう! "はじめてのKong Konnect" APIゲートウェイと Service Meshについて学ぼう!
"はじめてのKong Konnect" APIゲートウェイと Service Meshについて学ぼう!
 
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
 

Similar to 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
 
はじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタはじめてのElasticsearchクラスタ
はじめてのElasticsearchクラスタSatoyuki Tsukano
 
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例Hironobu Isoda
 

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.