読者です 読者をやめる 読者になる 読者になる

Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

Storm0.9.0の新機能(Topology毎のログ出力)を試してみます

Storm Java

こんにちは。kimukimuです。

Storm0.9.0-rc系がリリースされてから正式版が出るのを待っている今日この頃ですが、
Storm0.9.0はApacheプロジェクトに入る前の最終リリースとなるということで、かなり大きなマイルストーンになりそうです。
そのため、検証のためまだ正式版が出るまでにはかかりそうです。

なので、正式版が出る前ですが、Storm0.9.0で追加/変更された機能を順に試してみることにします。
今回は、実際にStormを使っている方にとっては非常にありがたく感じる
「Topology毎のログ出力切り分け」について。

1.StormのTopologyログ出力はわかりにくい?

実際にStormを使ったことがある方だとわかるかと思いますが、StormTopologyのログ出力先はわかりにくいです。
理由は、以下の2点。

  1. どのTopologyがどのログに出力されているか」がファイル名からではわからない
  2. 同じファイルに複数の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のものかわかる・・・
という形になっています。
f:id:acro-engineer:20131101071248j:plain

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が起動しているのがわかります。
f:id:acro-engineer:20131101072803j:plain
では、ログ出力先を確認してみると、以下のようになっています。
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を使ったことがある方にはありがたさがわかっていただけると思います。

  1. どのTopologyがどのログに出力されているか」がファイル名からすぐわかるようになった
  2. 1ファイルには1Topologyのログが出力されるようになった

と、今回はこういった地味な機能でしたが、次回以降もStorm0.9.0で追加された機能について紹介していこうと思います。
それでは。
 
 

Acroquest Technologyでは、キャリア採用を行っています。


  • 日頃勉強している成果を、Hadoop、Storm、NoSQL、HTML5/CSS3/JavaScriptといった最新の技術を使ったプロジェクトで発揮したい。
  • 社会貢献性の高いプロジェクトに提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や対外的な勉強会の開催を通した技術の発信や、社内勉強会での技術情報共有により、技術的に成長したい。
  • OSSの開発に携わりたい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
 キャリア採用ページ