7

複数のデータセンターの多数のマシンに多数のアプリケーションが分散されています。

1 日を通して、シグナル (内部または外部のいずれか) を受信し、各アプリケーション全体でイベントのカスケードを引き起こします。

したがって、各シグナルは膨大な量のイベント ログ データを生成します。ログライン自体は特に構造化されておらず、アプリケーション間でもかなり異なります。ただし、基本的な規則に従います。

<timestamp> <calling function/method> <payload>

ログラインには、イベントをシグナルにリンクするのに役立つ ID 番号がありますが、これらは絶対確実というわけではなく、イベントをつなぎ合わせるために他の方法を使用する必要がある場合もあります。

私は Twitter の Storm システムについて読んでいて、この大量のログ データをリアルタイムで分析し、それらをつなぎ合わせるために試してみることに非常に興味があります。

私は次のようなことをしたいと思います:

  • リアルタイムのデータからの傾向に基づいて、レポートとストリーミング グラフを生成します。
  • 信号をクエリし、チェーン内のステップ間の遅延を含め、すべてのアプリケーションでその信号に関連するイベントのチェーン全体を表示します。(これは重要)。
  • 相関するイベントを表示し、特定のイベントの前後にアプリケーションが何をしていたかを掘り下げます。

データを取得しますか?

ログ データはローカルのログ ファイルに格納されます (これが変更される可能性はほとんどありません)。そのため、Storm 自体にデータを丸呑みする方法が必要になります。ログファイルは圧縮されている場合もあります。私は Flume や Logstash の使用について検討しましたが、これらについて人々はどのように考えていますか? または、Storm でうまく機能する別の方法はありますか?

イベントの保存?

また、イベント データ自体だけでなく、ライブ レポートとグラフのデータを保存する方法も必要です。

少しトリッキーだと思う 2 番目の部分です。ストレージ イベントに適したストレージ バックエンドと、それらの間のリンクは何ですか? ある種のグラフ データベース、新しいスキーマレス NoSQL のいずれか、またはもう少し従来型のグラフ データベースが適切でしょうか?

ストームは適していますか?

最後に、Storm はこの役割に適していますか、それとも他に適した役割がありますか?

また、Storm を使用する場合、これに取り組むためにどのようなアプローチを取ることができますか? 他の人が同様の問題セットを経験したことを願っています。

乾杯、ビクター

4

2 に答える 2

3

リアルタイムのデータからの傾向に基づいて、レポートとストリーミング グラフを生成します

これはフィット感が抜群に良さそうです。

信号をクエリし、チェーン内のステップ間の遅延を含め、すべてのアプリケーションでその信号に関連するイベントのチェーン全体を表示します。(これは重要)。

クエリが最近のデータ (= 大量のデータではない) に限定されており、データの損失を許容できる場合は、Storm のみを使用してこれを行うことを想像できます。そうでない場合は、Storm をデータベースと組み合わせて、Storm を主にデータの前処理とデータベースへの保存に使用します。この場合、クエリはおそらくデータベースを使用して処理する方が適切です。

相関するイベントを表示し、特定のイベントの前後にアプリケーションが何をしていたかを掘り下げます。

Storm は、実行するクエリがわかっている場合に最適であり、クエリのために大量のデータにアクセスする必要はありません。たとえば、相関するイベントを表示するフィードを提供することは最適です。アドホック クエリ (ドリル ダウン) を実行する手段を提供することは、データベースを使用する方がおそらく簡単です。また、ユーザーが大量のデータ (たとえば、1 時間分のデータではなく 1 週間分のデータなど) をクエリできるようにする場合は、おそらくデータベースが必要になります。

データのフィードに関しては、ログ集中化製品を使用します。製品が提供するあらゆるインターフェースと対話するスパウトを作成できます。あるいは、ソケットや JMS など (log4j など) を介してログを送信できるロギング フレームワークを使用している場合は、そのソケット/JMS キューなどからスパウトを読み取ることができます。

DB の選択に関しては、何をしたいかによって異なります。ログに記録するアクティビティの種類がわからず、イベントを相互に関連付けたい場合は、イベントのトラバースが簡単になるため、グラフ データベースに賭けます。

于 2013-02-23T21:33:51.917 に答える
2

これは、私が現在取り組んでいるケースと非常によく似ているように聞こえるので、何ができるかについていくつかのアイデアを示します。

データを取得するには、Apache Kafkaを参照してください。このメッセージング システムは、ログをアプリケーションから中間ストレージに取得できます。そこから、さまざまなシステムをコンシューマーとしてアタッチできます。Storm は、特別な Storm-Kafka スパウトを使用して適切に統合するシステムの 1 つです。

私たちのケースでは、Kafka ブローカーから、Storm による処理が必要なモニタリング/ダッシュボードやその他のデータ ストリームに直接消費されるリアルタイム データがいくつかあります。後者は、データの性質に応じて分散 DB (MongoDB、Cassandra、または Couchbase) に保存され、ダッシュボードやその他のシステムに読み込まれます。

バッチ ジョブの場合、Kafka から Hadoop にデータをロードすることもできます。これはすべて、Kafka から複数のシステムに同じデータをプルして、互いに独立して実行できます。

Kafka は、ミラー メーカーを通じて複数のデータ センターもサポートします。

于 2013-03-21T19:42:51.757 に答える