joshdevins/log4j-scribe-appender をつかったログ集約の設定備忘録
- A log4j network appender for Scribe - https://github.com/joshdevins/log4j-scribe-appender
上記を使ったアプリサーバのログをログサーバに格納させる方法と設定について調べたことの備忘録。
どうやら、ログは /usr/local/scribe/scribe.conf の file_path で指定したパスの下に log4j.xml の scribe_category で指定した名前のディレクトリがつくられ、そこにログが書かれるようだ。
たとえば MyModuleAbc というクラスからなるモジュールについてのログを /usr/local/scribe/logs/MyModuleAbcLog というディレクトリの下に書かれるようにしたい場合は以下のようにすればいい。
MyModuleAbcLogger というロガー・クラスを定義する
LoggerFactory.getLogger() で MyModuleAbcLogger のインスタンスをつくる。
Logger logger = org.slf4j.LoggerFactory.getLogger(MyModuleAbcLogger.class);
で、「MyModuleAbc というクラスからなるモジュール」の中で、logger#info(log_message) のようにログを書いてやる。
(log4j.xmlとscribe.confが正しく設定されていれば)このログは Scribe を介してログサーバの /usr/local/scribe/logs/myModulesAbcLog に格納される。
log4j.xmlの設定
一部抜粋。
<appender name="mymoduleabc_log" class="org.apache.log4j.scribe.ScribeAppender"> <param name="scribe_category" value="myModuleAbcLog" /> <param name="scribe_host" value="localhost" /> <param name="scribe_port" value="1463" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] %m%n" /> </layout> </appender> <category name="com.example.MyModuleAbcLogger" additivity="false"> <priority value="INFO" /> <appender-ref ref="mymoduleabc_log" /> </category>
ログサーバの /usr/local/scribe/scribe.conf
一部抜粋。
port=1463 ... # DEFAULTcategory=default type=buffer ... file_path=/usr/local/scribe/logs type=file fs_type=std file_path=/usr/local/scribe/secondary
アプリサーバの /usr/local/scribe/scribe.conf
一部抜粋。remote_host にログサーバのIPアドレス 192.168.202.xx を指定している。
...type=network remote_host=192.168.202.xx remote_port=1463 ...
ログサーバの 1463 ポートを空ける
/etc/sysconfig/iptables に下記を追加して 1463 ポートを空ける。
-A INPUT -p tcp -m tcp --dport 1463 -j ACCEPT
iptables を再起動する。
$ sudo /etc/init.d/iptables restart
ちなみに、ポートが空いていないとアプリサーバ側で以下のようなエラーログが出る。
Thrift: Wed Aug 7 17:54:59 2013 TSocket::open() error on socket (after poll) <Host: 192.168.62.168 Port: 1463>No route to host [Wed Aug 7 17:54:59 2013] "failed to open connection to remote scribe server <192.168.62.168:1463> thrift error <socket open() error: No route to host>" [Wed Aug 7 17:54:59 2013] "[myModuleAbcLog] choosing new retry interval <26> seconds" [Wed Aug 7 17:54:59 2013] "[myModuleAbcLog] Changing state from <DISCONNECTED> to <DISCONNECTED>"