2022年2月24日木曜日

【大規模な時系列トラフィック分析】ClickHouseをntopngに採用しました

 本ブログ記事は、ntop社のブログ「Historical Traffic Analysis at Scale: Using ClickHouse with ntopng」を意訳してご紹介しております。

文:ジュピターテクノロジー よしひろ


昨年、オープンソースの高速データベースであるClickHouseと、高速フロー収集と保存のためのnProbeとの統合を発表しました。

数年前、ntopngに統合した列型データインデックスシステムであるnIndexを開発しましたが、これは単なるインデックスであり、実際のデータベースではありませんでした。

ClickHouseを選択した理由はいくつかあります。

  • オープンソースであり、活気のあるコミュニティによって開発されている
  • nIndexを開発した主な理由である、速度とサイズ両方で非常に効率的です。これは、単一のSSDで数十億レコードを単一のホストに保存でき、コストと複雑さを増大させるマルチノードホストクラスターを必要とする同様のソリューションとは対照的に、1秒未満のクエリを処理することができるため非常に重要です
  • MySQLと互換性があります。つまり、MySQLでntopngを使用したことがある人は、新しいことを学ぶ必要がなく、この新しいソリューションにすぐに慣れることができます(ClickHouseはMySQLの3389ポートではなくポート9004でリッスンすることを忘れないでください)

本日、以前のMySQLおよびnIndex統合を置き換えるntopngでのClickHouseの統合を発表します(作成したユーティリティを使用して既存のデータを移行できます)。

ntopngでのClickHouseのインストールと有効化

ClickHouseを有効にするには、次のことを行う必要があります。
  • 最新のntopng開発バージョンに更新します。
  • こちらで説明するように、バイナリパッケージを使用してClickHouseをインストールします。ClickHouse-clientツールはntopngが実行されているホストにインストールする必要がありますが、データはntopngが実行されているのと同じボックスまたはリモートホストに構築することができます。ほとんどの人はすべてを同じホストに置くことができますが、大規模なインストールの場合は、別のClickHouseホスト(またはクラスター)の方が適しています。
  • ntopng.confファイルを変更し、"-F=clickhouse"を追加して、ntopngがデフォルトのユーザー(デフォルトの名前)と(空の)パスワードを使用して同じボックスにインストールされたClickHouseインスタンスにデータを送信できるようにします。-Fオプションは、"-F clickhouse; <host [@port] | socket>; <dbname>; <user>; <pw>"形式のいくつかの追加オプションをサポートします。

ClickHouseを使用する場合、データベースはflowとalertの両方に使用されることに注意してください。つまり、alertは、ClickHouse以外のセットアップで引き続き使用される組み込みのSQLiteバックエンドよりもはるかに効率的です。

ClickHouseでntopngを使用する

ClickHouseは、データベースだけが提供できる多くの新機能をもたらします。また、前述したように、nIndexの代わりとなるミドルウェアです。

既存の時系列フローエクスプローラーを拡張し、最終的にサポートされるようになった複雑なクエリ演算子の恩恵を受けることができるようになりました。

ClickHouseを有効にすると、alertとflowは、設定ページから指定可能な保持時間を使用してデータベースに永続的に保存されます。


ClickHouseにデータが定期的に保存されます。
その性質上、標準データベースの場合のようにデータを継続的にプッシュすることはできません。これは、データが最大1分のバッチで挿入されるため、時系列データがリアルタイムに対してわずかに遅れることを意味します。アラートビューでは、カーディナリティと全体的な速度のほかに、SQLiteに関して違いは見られません。



主な違いは、代わりにダッシュボードメニューの下にある時系列フローエクスプローラーにあります。



左上のプルダウンメニューでわかるように、データに対して実行できるいくつかのクエリがあります。これらは、こちらにある単純なJSONスクリプトを介して拡張できます。

ご覧のとおり、新しいレポートを追加するのは非常に簡単です。スクリプトを時系列フォルダーにドロップするだけで、プログラミングなしでntopngインスタンスに表示されます。

ページ下部に、実行されたばかりのクエリに関する統計が表示されます。上記の例では、回転ドライブを備えた単一のホストで0.15秒で130万レコードが返されるため、フラッシュストレージで何ができるかを想像できます。

右上隅には、設定されたフィルターを保持したまま、上記で説明したようにJSONスクリプトを介して拡張可能な分析ビューにジャンプすることで同じ結果をグラフィカルに表示できるボタンがあります。



比較演算子または文字列を含む使用可能なすべてのフィールドにフィルターを設定できます。



以下は、フィルタの例です。

ストレージ容量

"Health"-> "ClickHouse"のシステムインターフェイスの下に、使用されているストレージを示すページがあります。私たちのテストでは、レコードの平均サイズ(flowとalert基本的に同じです)は、flowの場合は約30バイト、alertの場合は88バイトです。



これは、約100ユーロ/ドルのSSD 512 GBを使用すると、150億のフローと1500万のアラートを保存しながら、空きディスク容量を確保できることを意味します。とても良いですね。レコードは日ごとに分割されるため、保持期間が長い場合(たとえば、6か月または1年)、1日ごとにデータを分割するため、検索または挿入のパフォーマンスに影響はありません。したがって、本質的には、数日/週にまたがるクエリを実行した場合にのみパフォーマンスの低下に気付くでしょう。そうでない場合、3日間のデータまたは3か月のデータを保存してもパフォーマンスはあまり変わりません。

最後に

ntopngでのClickHouseサポートの詳細については、ユーザーガイドを参照してください。
これ以外に、実装したこの新機能を試して、次の安定したリリースまでに対応できると思われるエラーや改善点を報告してください。

Enjoy!

本記事で扱っているntop社のnProbe, ntopng製品にご興味のある方は、以下のリンクから弊社までお問い合わせください!