Apache Stormのデバッグ方法
はじめに
本記事はバージョン1.0以上です。
Apache Stormは分散リアルタイム処理システムであります。 分散システムである以上、デバッグが付きまといますが、どのようにすれば良いのかわからないケースがあります。
そこで、いろんなレベルに分けて解説しようと思います。
また、ログを設定するにはtopology.eventlogger.executor
の値が0以上に設定しないといけません。
1. 動的ログレベル
Storm UIとCLIからログレベルをシステムを止めることなく、変えることができます。 たとえば、InfoからWarningといったような感じです。
また、自動的に戻るまでの時間を決めることができます。
ログレベルは設定は標準的なlog4j
で想定するのとまったく一緒だと考えることができます。
1.0 Topologyをデプロイする
実際にStormクラスタにデプロイして確認するのが一番だと思うので以下の記事で何かしらtopologyをデプロイしてみるのがいいと思います。
1.1 Storm UIから変更する
まず、"Topology Summary"の中のtopologyを選択してください。 自分の場合は、ローカルモードで起動しているので、以下のような名前です。
するとtopologyの詳細に遷移できるので、"Change Log Level"を選択しましょう。
すると以下のようにドロップダウンのメニューが降りてくると思います。
ここでは、以下の項目を選択できます。
logger
: 不明。level
: ログレベルの設定timeout
: どのぐらいで戻るか。自動的に戻す必要がないなら0
で良いです。expires at
: 特に設定項目はないです。actions
:add
のボタンがあって、nimbus
と通信して行います。
2. イベントログを可視化
ログビューアーを起動させなければならなく、以下のコマンドで起動することができます。
bin/storm logviewer
ログビューアーはログしているタプルが見える。 特定のSpoutかBoltを選択してください。
ここでは、Boltを選択して確認してみます。 クリックして遷移したあとのものを表示しています。
上記の画面でevent
を表示してみてください。
ここで先ほどのlogviewer
を起動させていないとエラーが出ますので、もう一度確認してみてください。
ログのフォーマットは以下の通りです。
Timestamp, Component name, Component task-id, MessageId (in case of anchoring), List of emitted values
ログを停止するにはtopologyを選択して、"Stop Debugging"を設定してください。
仕組みとしては、eventlogger bolt
にイベントタプルが送信されます。
3. 分散ログサーチ
分散環境でもログを選択することができます。
検索することで実行できます。
4. 動的ワーカープロファイリング
Storm UIからワーカーの状態を取得することができます。ファイルにダウンロードもすることができます。
クリーンアップ
Topology Summaryで特定のtopologyを選択した後に、"Kill"を選択すると消去することができます。
そして、サーバーを落としてください。
まとめ
Apache Storm 1.0になって、機能が大幅に追加されていて、デバッグが非常に簡単になりました。