バーチャルテナントでのログ運用¶
バーチャルテナント環境におけるログの運用について説明します。
テナント単位にログを分割する¶
標準のログ設定では、システムログ・特定用途ログには各テナントの情報が混在して出力されます。テナントを複数運用する場合、情報が混在しログの解析や問題の切り分けが困難になる場合があります。その場合、ログファイルをテナント単位で分割することを検討してください。ログファイルの分割は、「 MDCに格納されている値でログを分割する 」で紹介している方法を用い、MDCのテナントIDをキーとして設定することで可能です。以下にセキュリティログの設定例を示します。<included> <!-- appender "SECURITY_FILE" の設定を省略しています。 --> <appender name="SECURITY_BY_TENANT" class="ch.qos.logback.classic.sift.SiftingAppender"> <discriminator> <key>tenant.id</key> <defaultValue>_NO_TENANT_</defaultValue> </discriminator> <timeout>30 minutes</timeout> <sift> <appender name="SECURITY_FILE-${tenant.id}" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${im.log}/platform/${tenant.id}/security.log</file> <append>true</append> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <fileNamePattern>${im.log}/platform/${tenant.id}/security%i.log</fileNamePattern> <minIndex>1</minIndex> <maxIndex>5</maxIndex> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>10MB</maxFileSize> </triggeringPolicy> <encoder> <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %X{log.report.sequence} %-5level %logger{255} %X{tenant.id} %X{log.id} - %X{security.id.session} %X{security.id.account} %X{security.id.usertype} [%X{log.message.code}] %msg %X{request.id}%nopex%n</pattern> </encoder> </appender> </sift> </appender> <logger name="SECURITY_LOG" additivity="false"> <level value="warn" /> <appender-ref ref="STDOUT" /> <appender-ref ref="SECURITY_FILE" /> <appender-ref ref="SECURITY_BY_TENANT" /> </logger> </included>注意
テナント毎にログを分割して出力する場合、出力するログの数×テナント数でファイルのオープンが行われます。その為、設定によっては多くのログファイルがオープンされ、ファイルディスクリプタが不足してしまう可能性があります。これを回避するためには、OSレベルで利用可能なファイルディスクリプタ数の上限を変更するといった対応を検討してください。