複数のデータセンターの多数のマシンに多数のアプリケーションが分散されています。
1 日を通して、シグナル (内部または外部のいずれか) を受信し、各アプリケーション全体でイベントのカスケードを引き起こします。
したがって、各シグナルは膨大な量のイベント ログ データを生成します。ログライン自体は特に構造化されておらず、アプリケーション間でもかなり異なります。ただし、基本的な規則に従います。
<timestamp> <calling function/method> <payload>
ログラインには、イベントをシグナルにリンクするのに役立つ ID 番号がありますが、これらは絶対確実というわけではなく、イベントをつなぎ合わせるために他の方法を使用する必要がある場合もあります。
私は Twitter の Storm システムについて読んでいて、この大量のログ データをリアルタイムで分析し、それらをつなぎ合わせるために試してみることに非常に興味があります。
私は次のようなことをしたいと思います:
- リアルタイムのデータからの傾向に基づいて、レポートとストリーミング グラフを生成します。
- 信号をクエリし、チェーン内のステップ間の遅延を含め、すべてのアプリケーションでその信号に関連するイベントのチェーン全体を表示します。(これは重要)。
- 相関するイベントを表示し、特定のイベントの前後にアプリケーションが何をしていたかを掘り下げます。
データを取得しますか?
ログ データはローカルのログ ファイルに格納されます (これが変更される可能性はほとんどありません)。そのため、Storm 自体にデータを丸呑みする方法が必要になります。ログファイルは圧縮されている場合もあります。私は Flume や Logstash の使用について検討しましたが、これらについて人々はどのように考えていますか? または、Storm でうまく機能する別の方法はありますか?
イベントの保存?
また、イベント データ自体だけでなく、ライブ レポートとグラフのデータを保存する方法も必要です。
少しトリッキーだと思う 2 番目の部分です。ストレージ イベントに適したストレージ バックエンドと、それらの間のリンクは何ですか? ある種のグラフ データベース、新しいスキーマレス NoSQL のいずれか、またはもう少し従来型のグラフ データベースが適切でしょうか?
ストームは適していますか?
最後に、Storm はこの役割に適していますか、それとも他に適した役割がありますか?
また、Storm を使用する場合、これに取り組むためにどのようなアプローチを取ることができますか? 他の人が同様の問題セットを経験したことを願っています。
乾杯、ビクター