Solr5.4のログの設定

Solr 5.4 の環境構築で、ログ周りの設定が意外につまったので、整理としてのメモ。

# ログの種類

おおむね、次の三つ

1. gcログ
2. solr本体
3. jetty（アクセスログ）

アクセスログは標準では出力されないですし、大体の場合は不要でしょうが、solr 3.x 以前はtomcatにデプロイした形だとtomcatのアクセスログがあったので、それも残しておきたいケースもあるかと思い、あわせてとりあげます。

## 起動時の設定ファイル

公式サイトにあるように、インストールスクリプトでやったものとします。
https://cwiki.apache.org/confluence/display/solr/Taking+Solr+to+Production#TakingSolrtoProduction-Logsettings

`/etc/init.d/solr` が起動スクリプトで、その中のSOLR_ENVに指定されているファイルが、ヒープやgcなどの設定値を持つファイルです。

公式サイトでは`/var/solr/solr.in.sh` になってましたが、CentOS 6.4でやったときは`/etc/default/solr.in.sh` になってました。

gcとsolr本体のログはインストールスクリプトで指定したデータディレクトリのlogs以下に生成されます。
データディレクトリを指定していなければ`/var/solr/logs` になるはずです。

## gcログ

`/etc/default/solr.in.sh` の下記部分がgcログの設定です。gcログがいらない場合は、この変数をコメントアウトすればよいです。有効な場合は、solr_gc.logが生成されます。 

```
# Enable verbose GC logging
GC_LOG_OPTS="-verbose:gc -XX:+PrintHeapAtGC -XX:+PrintGCDetails \
-XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime \
-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=3 -XX:GCLogFileSize=5M"
```

ローテーションの設定をすると、`solr_gc.log.<n>.current` が現在のログファイル名になります。
標準では、起動のたびにsolr_gc.logを日付を付与してリネームしてバックアップされます。ローテーションの設定をすれば、バックアップ対象の名前とは違ってくるので、起動のたびにsolr_gc_log_yyyyMMdd_HHmmが生成されることがなくなります。

## solr本体

log4jで出力されます。管理画面からもログレベルを指定できるようですが、`/var/solr/log4j.properties` でローテーションが設定できます。

デフォルトであるCONSOLEのログは大抵は必要ないので、コメントアウトしてしまいます。

```
log4j.rootLogger=INFO, file

#log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
#log4j.appender.CONSOLE.layout=org.apache.log4j.EnhancedPatternLayout
#log4j.appender.CONSOLE.layout.ConversionPattern=%-4r %-5p (%t) [%X{collection} %X{shard} %X{replica} %X{core}] %c{1.} %m%n
```

solr.logのローテーションの設定は下記部分になります。

```
#- size rotation with log cleanup.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=2KB
log4j.appender.file.MaxBackupIndex=3

#- File to log to and log format
log4j.appender.file.File=${solr.log}/solr.log
log4j.appender.file.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%X{collection} %X{shard} %X{replica} %X{core}] %c{1.} %m\n
```

このsolr.logも、起動のたびにタイムスタンプが付与されてバックアップされるようになっています。それが本番環境などでは不要な場合は、ログファイル名を変えることで、log4jのローテーションだけに任せることができます。

```
log4j.appender.file.File=${solr.log}/solr-test.log
```

## jetty

jettyのアクセスログは出力させるには、`${SOLR_HOME}/server/etc/jetty.xml`（デフォルトは/opt/solr）のアクセスログの部分のコメントアウトをはずせばよいです。

```lang:jetty.xml
<!-- =========================================================== -->
    <!-- Configure Request Log                                       -->
    <!-- =========================================================== -->
    <!-- ←　はずす
    <Ref id="Handlers">
      <Call name="addHandler">
        <Arg>
          <New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler">
            <Set name="requestLog">
              <New id="RequestLogImpl" class="org.eclipse.jetty.server.NCSARequestLog">
                <Set name="filename">
                   logs/request.yyyy_mm_dd.log
                </Set>
                <Set name="filenameDateFormat">yyyy_MM_dd</Set>
                <Set name="retainDays">90</Set>
                <Set name="append">true</Set>
                <Set name="extended">false</Set>
                <Set name="logCookies">false</Set>
                <Set name="LogTimeZone">UTC</Set>
                <Set name="LogLatency">true</Set>
              </New>
            </Set>
          </New>
        </Arg>
      </Call>
    </Ref>
    -->　←　はずす

```

そのままはずせば、`${SOLR_HOME}/server/logs`に、下記のようなおなじみのアクセスログが出力されるようになります。

```
10.0.2.2 - - [01/Feb/2016:07:14:16 +0000] "GET /solr HTTP/1.1" 302 -
10.0.2.2 - - [01/Feb/2016:07:14:16 +0000] "GET /solr/ HTTP/1.1" 200 -
10.0.2.2 - - [01/Feb/2016:07:14:16 +0000] "GET /solr/admin/cores?wt=json&indexInfo=false&_=1454310856396 HTTP/1.1" 200 -
10.0.2.2 - - [01/Feb/2016:07:14:16 +0000] "GET /solr/admin/info/system?wt=json&_=1454310856675 HTTP/1.1" 200 -
10.0.2.2 - - [01/Feb/2016:07:14:16 +0000] "GET /solr/tpl/index.html?_=1454310856717 HTTP/1.1" 200 6141
```

レスポンスタイムを出すにはこちらを参照。
http://qiita.com/iorionda/items/10d6a5e8bbc9eae3aa15

# 参考サイト

http://qiita.com/YN0314/items/5e5c57d52ac1379daf6d

http://d.hatena.ne.jp/miyakawa_taku/20150131/1422696243

https://cwiki.apache.org/confluence/display/solr/Configuring+Logging

https://cwiki.apache.org/confluence/display/solr/Taking+Solr+to+Production#TakingSolrtoProduction-Logsettings