Storm0.9.0-rc系がリリースされてから正式版が出るのを待っている今日この頃ですが、
Storm0.9.0はApacheプロジェクトに入る前の最終リリースとなるということで、かなり大きなマイルストーンになりそうです。
そのため、検証のためまだ正式版が出るまでにはかかりそうです。
なので、正式版が出る前ですが、Storm0.9.0で追加/変更された機能を順に試してみることにします。
今回は、実際にStormを使っている方にとっては非常にありがたく感じる
「Topology毎のログ出力切り分け」について。
1.StormのTopologyログ出力はわかりにくい?
実際にStormを使ったことがある方だとわかるかと思いますが、StormTopologyのログ出力先はわかりにくいです。
理由は、以下の2点。
- どのTopologyがどのログに出力されているか」がファイル名からではわからない
- 同じファイルに複数のTopologyのログが混在して出力される
1点目の理由ですが、StormTopologyのログはログ出力先ディレクトリ配下に以下のようにworker-XXXX.logとして出力されます。
名前からではどのTopologyのログが出力されているかはわかりません。
> ls -l -rw-r--r-- 1 root root 6966 10月 30 07:03 2013 drpc.log -rw-r--r-- 1 root root 27424 10月 31 08:27 2013 nimbus.log -rw-r--r-- 1 root root 36220 10月 31 07:43 2013 supervisor.log -rw-r--r-- 1 root root 3348 10月 31 07:43 2013 ui.log -rw-r--r-- 1 root root 42834753 10月 31 07:43 2013 worker-6701.log -rw-r--r-- 1 root root 86293078 10月 31 07:43 2013 worker-6702.log -rw-r--r-- 1 root root 86295346 10月 31 07:43 2013 worker-6703.log
Storm-UIのコンポーネント詳細画面の以下の部分を見て、どのログがどのTopologyのものかわかる・・・
という形になっています。
2点目の理由ですが、StormではWorkerプロセスのIDは使いまわされます。
そのため、後で起動したTopologyのログが過去に起動したTopologyのログに追記されてしまい、
複数Topologyのログが1ファイル内に存在してしまう・・・という状態になります。
結果、Stormのログは見にくく、問題が発生した際に追うのが困難となってきます。
2.Storm0.9.0でのTopologyログ出力
同じようなことを考えていた方が他にもいたようで、Storm0.9.0からはログ出力先がTopology毎にログの出力先が切り分けられるようになっています。
但し、デフォルトでは有効になっていません。
そのため、実際に設定をして試してみますね。
ログ出力先の切り分け用設定
設定は簡単で、【Stormのインストール先】/logback/cluster.xmlの設定を以下のように修正するだけです。
■cluster.xml(修正前)
<!-- 省略 --> <file>${storm.home}/logs/${logfile.name}</file> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <fileNamePattern>${storm.home}/logs/${logfile.name}.%i</fileNamePattern> <minIndex>1</minIndex> <maxIndex>9</maxIndex> </rollingPolicy> <!-- 省略 -->
↓
■cluster.xml(修正後)
<!-- 省略 --> <file>${storm.home}/logs/${storm.id:-}${logfile.name}</file> <!-- storm.id追記 --> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <fileNamePattern>${storm.home}/logs/${storm.id:-}${logfile.name}.%i</fileNamePattern> <!-- storm.id追記 --> <minIndex>1</minIndex> <maxIndex>9</maxIndex> </rollingPolicy> <!-- 省略 -->
Storm0.9.0からWorkerのJVMオプションにはTopologyのIDが"storm.id"として含まれるようになったため、それを利用しています。
Worker以外のプロセスで名称がおかしくならないよう、「デフォルト値は空」として設定しています。
動作確認
では、この状態でTopologyを実際に起動してみます。
Storm-UIで確認してみると、以下の画面の通り、「ExclamationTopology-2-1383257328」というTopologyが起動しているのがわかります。
では、ログ出力先を確認してみると、以下のようになっています。
Workerのログ名称にTopologyのIDが付与され、どのTopologyのログかがすぐ分かるようになっていますね!
かつ、これなら複数のTopologyのログが1ファイル中に混在することもありません。
> ls -l -rw-r--r-- 1 root root 10555253 11月 1 07:27 2013 ExclamationTopology-2-1383257328worker-6701.log -rw-r--r-- 1 root root 21257836 11月 1 07:27 2013 ExclamationTopology-2-1383257328worker-6702.log -rw-r--r-- 1 root root 21258738 11月 1 07:27 2013 ExclamationTopology-2-1383257328worker-6703.log -rw-r--r-- 1 root root 0 10月 31 08:31 2013 access.log -rw-r--r-- 1 root root 7046 10月 31 08:32 2013 drpc.log -rw-r--r-- 1 root root 3897 10月 31 08:36 2013 logviewer.log -rw-r--r-- 1 root root 0 10月 31 08:31 2013 metrics.log -rw-r--r-- 1 root root 17817 11月 1 07:08 2013 nimbus.log -rw-r--r-- 1 root root 35318 11月 1 07:08 2013 supervisor.log -rw-r--r-- 1 root root 2022 11月 1 07:24 2013 ui.log
3.何が嬉しいの?
「StormTopologyのログ出力先はわかりにくい」の裏返しになりますが、以下の2点です。
実際にStormを使ったことがある方にはありがたさがわかっていただけると思います。
- どのTopologyがどのログに出力されているか」がファイル名からすぐわかるようになった
- 1ファイルには1Topologyのログが出力されるようになった
と、今回はこういった地味な機能でしたが、次回以降もStorm0.9.0で追加された機能について紹介していこうと思います。
それでは。
Acroquest Technologyでは、キャリア採用を行っています。
- 日頃勉強している成果を、Hadoop、Storm、NoSQL、HTML5/CSS3/JavaScriptといった最新の技術を使ったプロジェクトで発揮したい。
- 社会貢献性の高いプロジェクトに提案からリリースまで携わりたい。
- 書籍・雑誌等の執筆や対外的な勉強会の開催を通した技術の発信や、社内勉強会での技術情報共有により、技術的に成長したい。
- OSSの開発に携わりたい。
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
キャリア採用ページ