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
...
# DEFAULT

category=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>"