はてだBlog(仮称)

私的なブログど真ん中のつもりでしたが、気づけばWebサイト系のアプリケーション開発周りで感じたこと寄りの自分メモなどをつれづれ述べています。2020年6月現在、Elasticsearch、pandas、CMSなどに関する話題が多めです。...ですが、だんだんとより私的なプログラムのスニペット置き場になりつつあります。ブログで述べている内容は所属組織で販売している製品などに関するものではなく、また所属する組織の見解を代表するものではありません。

Processor@IngestNodeについての一覧(Elasticsearch)

はじめに

ElasticsearchのIngestNodeでのProcessorについて、現在のバージョン6.xで提供されている各編集機能を一覧にして逆引きしやすいようにしてみました。

寄り道の補足1

  IngestNodeはインフラや非機能要件的にはポイントとなるお話があるとは思いますが、自分のようなヒトにとっては、ひとまずは、logstashの代わり、あるいはreindexの際に型変換などを宣言的やってしまえる仕組みと捉えておけば良いのではないでしょうか。

つまるところ、インデックスの更新前に、元のデータソースから取得したドキュメントの元ネタを実際にインデックスに取り込むにあたり、変換したりある種の標準化などをしてしまいましょうというところの仕組みになります。

もう少し深掘りするなら、下記のリンクをはじめ有識者の方の記事等を参考にしましょう。

ElasticsearchのIngest Nodeを試してみた | DevelopersIO

LogstashとElasticsearchのIngestノード、どちらを使うべき? | Elastic

logstashの代わりというところの範疇なので、ひょっとすると用途によっては帯に短し的なところがあるかもしれませんので、今回ビルトインの編集機能を表にしてまとめてみた次第です。

なお、襷に長しというように言いましたが、painless scriptも使えたり、ジョブの分岐や制御的なこともできる構文が用意されているので、相当なことができるのも事実かと思います。

寄り道の補足2

実際のProcessorの説明の前にここまでで少し話が飛躍していそうなので、もう一点補足します。

IngestNodeというか、ここではIngestNode自体がどうというよりは、pipelineと呼ばれる変換テンプレートのようなものと、今回説明しようとしているProcessorの関係、およびそれらにより、通常のインデックスへの更新(POST)とは違うカタチで、事前のドキュメント変換ができるのかという絵はこうなります。

f:id:azotar:20181202161506p:plain
IngestNode(_ingestエンドポイント)を使ったインデックス更新のテンプレートによるドキュメントの前処理

Processorのまとめ(チートシート風)

チートシート風というか公式Rはアルファベット順になっているので、用途別に逆引きしやすいように用途別に並び替えてみました。

こうやってみるとlogstashの置き換えにもなるという方向性どおり、ログの変換に便利なものが揃っていますね。

f:id:azotar:20181202153032p:plain
ElasticsearchのProcessor

Processorのまとめ(前項のテキスト)

上記の表と同じもの。 コピペやリンク先に飛べるようにテキストでの表にしたがmarkdownの使い方が悪く、幅の調整がうまくいかないので、皆様のお手元では総崩れしているかもしれません。

項番 アルファベット順項番 プロパティ     編集              用途目線の分類         公式RのURL
1 20 Script Processor painless scriptによる変換。 painless script https://www.elastic.co/guide/en/elasticsearch/reference/current/script-processor.html
2 5 Date Index Name Processor ログを日付を含むインデックスで管理している際に便利そう... 制御 https://www.elastic.co/guide/en/elasticsearch/reference/current/date-index-name-processor.html
3 7 Drop Processor 条件に合致したらそのドキュメントを捨てる(インデックスに取り込まない)。 制御 https://www.elastic.co/guide/en/elasticsearch/reference/current/drop-processor.html
4 17 Pipeline Processor 別のパイプラインを呼び出す。 制御 https://www.elastic.co/guide/en/elasticsearch/reference/current/pipeline-processor.html
5 18 Remove Processor 指定のフィールドを削除する。 制御 https://www.elastic.co/guide/en/elasticsearch/reference/current/remove-processor.html
6 22 Set Security User Processor 説明略。 ユーザー権限関連の制御? https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest-node-set-security-user-processor.html
7 9 Fail Processor 指定の条件にマッチしたら例外を上げる。 制御 https://www.elastic.co/guide/en/elasticsearch/reference/current/fail-processor.html
8 3 Convert Processor 型変換する。元のフィールドを残して新たに型変換後の別名フィールドを定義することもできる。 型変換 https://www.elastic.co/guide/en/elasticsearch/reference/current/convert-processor.html
9 4 Date Processor 日付を良しなに扱う。 日付 https://www.elastic.co/guide/en/elasticsearch/reference/current/date-processor.html
10 1 Append Processor "固定の文字列やあるフィールドの項目の内容の配列の新たなフィールドを作る。新項目 = [ タイトル, ディスクリプション, キーワード] " 複数項目の1項目への集約 https://www.elastic.co/guide/en/elasticsearch/reference/current/append-processor.html
11 21 Set Processor あるフィールドに別のフィールドの値を加工(template snippetsによる)して設定。 複数項目にまたがる変換 https://www.elastic.co/guide/en/elasticsearch/reference/current/set-processor.html
12 8 Dot Expander Processor フィールド名がfoo.barのようなものを、ネストオブジェクトに変換する。 フォーマット変更や構造化⇔フラット化 https://www.elastic.co/guide/en/elasticsearch/reference/current/dot-expand-processor.html
13 14 JSON Processor JSON文字列をJSONオブジェクトに変換する。 フォーマット変更や構造化⇔フラット化 https://www.elastic.co/guide/en/elasticsearch/reference/current/json-processor.html
14 19 Rename Processor フィールド名を変更する。 フォーマット変更や構造化⇔フラット化 https://www.elastic.co/guide/en/elasticsearch/reference/current/rename-processor.html
15 12 Gsub Processor gsub(置換)する 文字列編集:GSUB https://www.elastic.co/guide/en/elasticsearch/reference/current/gsub-processor.html
16 10 Foreach Processor "配列型のフィールドに、他のプロセッサーを一つずつ適用した配列を返す。mapっぽい処理になる。" 文字列編集:MAP https://www.elastic.co/guide/en/elasticsearch/reference/current/foreach-processor.html
17 13 Join Processor 配列を区切り文字で区切った一つの文字列に変換する。 文字列編集:JOIN https://www.elastic.co/guide/en/elasticsearch/reference/current/join-processor.html
18 23 Split Processor 文字列のフィールドを区切り文字単位で配列に分割 文字列編集:SPRIT https://www.elastic.co/guide/en/elasticsearch/reference/current/split-processor.html
19 25 Trim Processor 文字列中の前後の空白を削除する 文字列編集:TRIM https://www.elastic.co/guide/en/elasticsearch/reference/current/trim-processor.html
20 26 Uppercase Processor 大文字に変換する。 文字列編集:UPPERCASE https://www.elastic.co/guide/en/elasticsearch/reference/current/uppercase-processor.html
21 16 Lowercase Processor 小文字に変換する。 文字列編集:LOWERCASE https://www.elastic.co/guide/en/elasticsearch/reference/current/lowercase-processor.html
22 24 Sort Processor 配列のフィールドをソートする 文字列編集:配列とみなしてSORT https://www.elastic.co/guide/en/elasticsearch/reference/current/sort-processor.html
23 27 URL Decode Processor URLをデコードする。 文字列編集:URLDECODE https://www.elastic.co/guide/en/elasticsearch/reference/current/urldecode-processor.html
24 6 Dissect Processor apacheのLogFormat設定のような(※互換ではありません)形式を指定すると、元のフィールドをその形式で解析し、指定の名称のプロパティに格納。 Log処理に嬉しいsPrintf https://www.elastic.co/guide/en/elasticsearch/reference/current/dissect-processor.html
25 11 Grok Processor "Dissect Processor正規表現版。https://github.com/kkos/oniguruma/blob/master/doc/RE" Log処理に嬉しいsPrintf https://www.elastic.co/guide/en/elasticsearch/reference/current/grok-processor.html
26 15 KV Processor LTSV形式(相当)の文字列のフィールドを複数のフィールドに分解する。 Log処理に嬉しいsPrintf https://www.elastic.co/guide/en/elasticsearch/reference/current/kv-processor.html
27 2 Bytes Processor "1kb"のような値が入っているフィールドを1024のようなbyte値に変換 ログによくあるバイト数ユースケース https://www.elastic.co/guide/en/elasticsearch/reference/current/bytes-processor.html