見出し画像

LogstashのGrok filterとCSV filterの性能の比較

こんにちは! 
Airitechビッグデータ・AI活用グループのタンルインウーです。Elasticsearch、Kibanaを使ったデータの可視化や、データ分析用Logstashの設定やメンテナンスなどを担当しております。

先日、先輩社員のニャンリンさんが、Logstashのgrok filterの性能についての記事を書きました。

今回は、ニャンリンさんの記事の続きで、csv filterを使った場合の性能も比較したいと思います。

LogstashのCSV filterとは

csv形式のデータを処理するためのfilterです。設定でカラム名を指定することができます。

また、区切り文字や引用符の記号が変更できることから、例えばカンマではなくタブ文字を区切り文字に指定すれば、tsv形式のデータも扱うことができます。

grok filterの記事で扱った、スペース区切りのデータも同様に扱うことができます。

grok filterとの違いとしては、例えば、

aaa,"bbb,bbb",ccc

のように、「引用符で囲まれている中に区切り文字が入る」という場合でも適切に処理してくれる点があります。

このようなデータが想定されるケースでは、grok filterではなくcsv filterを使った方が良いです。

LogstashのCSV filterとGrok filterの性能の比較

同じデータをInputとして、CSV filterとGrok filterの結果を比較しました。
スペース区切りのfield数が

● 5個の場合
● 10個の場合
● 20個の場合
● 20個だが、データの中に1%だけfield数が足りない不正なデータが混ざっている場合

の4つのパターンでそれぞれ計測しました。
(計測は、AWS のEC2インスタンス t3.medium で、Logstash7.12.0を用いました)

スペース区切りのfield数が5個の場合、データはこのような形になります。

 aaaaaaaaaa bbbbbbbbbb cccccccccc dddddddddd eeeeeeeeee
csv {
       columns => ["field1", "field2", "field3", "field4", "field5"]
       separator => " "
   }

計測結果は以下の通りです。

キャプチャ

今回の結果から以下が分かります。
1. 適切な正規表現で書かれたGrok filterの方が、CSV filterよりも性能がよい
2. マッチしないログが来た場合もCSV filterは性能が劣化しない

CSV filterの方が遅い?

正規表現でパターンを指定するGrok filterよりCSV filterの方が遅い結果を意外に感じた方も多いかもしれません。ですが、今回のような単純なケースではGrok filterの方が速くなります。

このような結果になる理由として一つ考えられるのは、CSV filterの方が今回使ったGrok patternよりも複雑な処理していることです。

CSV filterは、以下のケースを想定した作りになっています。

● 引用符で囲まれている場合もあるし、そうでない場合もある
● 引用符で囲まれている場合、その中には区切り文字が入ることもある
● 引用符で囲まれている中に、引用符の記号がエスケープされた状態で入ることもある

こういった条件を正確に正規表現で表すのは困難です。今回比較対象としたGrok filterのパターンは、これらの3つのケースは考慮しておらず、単に区切り文字で分割するだけのものになっています。引用符やエスケープの考慮が必要な、一般的なCSV形式のデータを取り扱う場合は、CSV filterを使うようにしましょう。

なお、単純に区切り文字で分割するだけの処理であれば、一般的にはGrok filterよりもDissect filterの方が速いと言われています。また別の機会に、Dissect filterとも比較して、ご紹介したいと思います。

まとめ

今回はLogstashのGrok filterとCSV filterの性能の比較結果をご紹介しました。

単純に区切り文字で分割するだけならGrok filterの方が速い場合があります。

CSV filterは、処理速度がやや遅いですが、引用符やエスケープを考慮した複雑なケースに対応しています。

Logstashでデータを加工する場合、似たような処理を実現する方法が複数存在する場合があるため、要求される機能と処理性能を考慮して、適切な方法を選ぶようにしましょう。

Airitechではビッグデータ解析ツール導入・支援のほか、トラブルシュートやシステム性能サービスなど、さまざまなサービスを提供しております。

UiPathユーザー向けElasticsearch・Kibanaのオンライントレーニングも行っています。Elasticsearch・Kibanaに興味のある方は、ぜひご参加ください。

Elasticsearch・Kibanaトレーニング(オンライン)

また、Elasticsearchエンジニアの募集も行っていますので興味のある方はぜひご応募ください。

Airitechの採用情報はこちら

ホームページ



この記事が気に入ったらサポートをしてみませんか?