Kekeの日記

エンジニア、読書なんでも

Apache Stormのデバッグ方法

f:id:bobchan1915:20180817215541p:plain

はじめに

本記事はバージョン1.0以上です。

Apache Stormは分散リアルタイム処理システムであります。 分散システムである以上、デバッグが付きまといますが、どのようにすれば良いのかわからないケースがあります。

そこで、いろんなレベルに分けて解説しようと思います。

また、ログを設定するにはtopology.eventlogger.executorの値が0以上に設定しないといけません。

1. 動的ログレベル

Storm UIとCLIからログレベルをシステムを止めることなく、変えることができます。 たとえば、InfoからWarningといったような感じです。

また、自動的に戻るまでの時間を決めることができます。

ログレベルは設定は標準的なlog4jで想定するのとまったく一緒だと考えることができます。

github.com

1.0 Topologyをデプロイする

実際にStormクラスタにデプロイして確認するのが一番だと思うので以下の記事で何かしらtopologyをデプロイしてみるのがいいと思います。

www.1915keke.com

1.1 Storm UIから変更する

まず、"Topology Summary"の中のtopologyを選択してください。 自分の場合は、ローカルモードで起動しているので、以下のような名前です。

f:id:bobchan1915:20180817213519p:plain

するとtopologyの詳細に遷移できるので、"Change Log Level"を選択しましょう。

f:id:bobchan1915:20180817213830p:plain

すると以下のようにドロップダウンのメニューが降りてくると思います。

f:id:bobchan1915:20180817214014p:plain

ここでは、以下の項目を選択できます。

  • logger: 不明。
  • level: ログレベルの設定
  • timeout: どのぐらいで戻るか。自動的に戻す必要がないなら0で良いです。
  • expires at: 特に設定項目はないです。
  • actions: addのボタンがあって、nimbusと通信して行います。

2. イベントログを可視化

ログビューアーを起動させなければならなく、以下のコマンドで起動することができます。

bin/storm logviewer

ログビューアーはログしているタプルが見える。 特定のSpoutかBoltを選択してください。

f:id:bobchan1915:20180817220238p:plain

ここでは、Boltを選択して確認してみます。 クリックして遷移したあとのものを表示しています。

f:id:bobchan1915:20180817220508p:plain

上記の画面でeventを表示してみてください。

ここで先ほどのlogviewerを起動させていないとエラーが出ますので、もう一度確認してみてください。

f:id:bobchan1915:20180817220726p:plain

ログのフォーマットは以下の通りです。

Timestamp, Component name, Component task-id, MessageId (in case of anchoring), List of emitted values

f:id:bobchan1915:20180821013230p:plain

ログを停止するにはtopologyを選択して、"Stop Debugging"を設定してください。

仕組みとしては、eventlogger boltにイベントタプルが送信されます。

3. 分散ログサーチ

分散環境でもログを選択することができます。

検索することで実行できます。

4. 動的ワーカープロファイリング

Storm UIからワーカーの状態を取得することができます。ファイルにダウンロードもすることができます。

クリーンアップ

Topology Summaryで特定のtopologyを選択した後に、"Kill"を選択すると消去することができます。

f:id:bobchan1915:20180817222259p:plain

そして、サーバーを落としてください。

まとめ

Apache Storm 1.0になって、機能が大幅に追加されていて、デバッグが非常に簡単になりました。