More Related Content
Similar to Ingest node scripting_deep_dive (20)
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の解説
- 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
- 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
①例)文字列配列に対して正規表現で文字列を抽出する
- 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
- 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"
}
}
}
]
}
- 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以上を利用する