ロギングの構成

ロギング機能では、ログバックをバックエンドにしてSimple Logging Facade for Java(SLF4J)を使用します。

logback.xml

logback.xmlファイルの場所は、インストールのタイプによって異なります。
パッケージ・インストール /etc/dse/cassandra/logback.xml
tarボール・インストール installation_location/resources/cassandra/conf/logback.xml

ロギング機能では、ログバックをバックエンドにしてSimple Logging Facade for Java(SLF4J)を使用します。ログは、ロギング・ディレクトリーのsystem.logdebug.logに書き込まれます。ロギングは、プログラムで、あるいは手動で設定できます。手動でロギングを設定するには:

  • nodetool setlogginglevelコマンドを実行します。
  • DataStax Enterpriseでインストールされるlogback-test.xmlまたはlogback.xml ファイルを構成します。
  • JConsoleツールを使用して、JMXからロギングを設定します。

ログバックは最初にlogback-test.xmlを探し、次にlogback.xml ファイルを探します。

次の例では、logback.xmlファイルのXML構成について詳しく説明します。
<configuration scan="true">
  <jmxConfigurator />

<!-- SYSTEMLOG rolling file appender to system.log (INFO level) -->

 <appender name="SYSTEMLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
     <level>INFO</level>
  </filter>
     <file>${cassandra.logdir}/system.log</file>
  <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
     <fileNamePattern>${cassandra.logdir}/system.log.%i.zip</fileNamePattern>
     <minIndex>1</minIndex>
     <maxIndex>20</maxIndex>
  </rollingPolicy>
  <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
     <maxFileSize>20MB</maxFileSize>
  </triggeringPolicy>
  <encoder>
     <pattern>%-5level [%thread] %date{ISO8601} %X{service} %F:%L - %msg%n</pattern>
  </encoder>
 </appender>

<!-- DEBUGLOG rolling file appender to debug.log (all levels) -->

 <appender name="DEBUGLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
     <file>${cassandra.logdir}/debug.log</file>
  <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
     <fileNamePattern>${cassandra.logdir}/debug.log.%i.zip</fileNamePattern>
     <minIndex>1</minIndex>
     <maxIndex>20</maxIndex>
  </rollingPolicy>
  <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
     <maxFileSize>20MB</maxFileSize>
  </triggeringPolicy>
  <encoder>
     <pattern>%-5level [%thread] %date{ISO8601} %X{service} %F:%L - %msg%n</pattern>
  </encoder>
 </appender>

<!-- ASYNCLOG assynchronous appender to debug.log (all levels) -->

 <appender name="ASYNCDEBUGLOG" class="ch.qos.logback.classic.AsyncAppender">
     <queueSize>1024</queueSize>
     <discardingThreshold>0</discardingThreshold>
     <includeCallerData>true</includeCallerData>
     <appender-ref ref="DEBUGLOG" />
 </appender>

<!-- STDOUT console appender to stdout (INFO level) -->

 <if condition='isDefined("dse.console.useColors")'>
   <then>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
      <withJansi>true</withJansi>
      <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>INFO</level>
      </filter>
      <encoder>
        <pattern>%highlight(%-5level) [%thread] %green(%date{ISO8601}) %yellow(%X{service}) %F:%L - %msg%n<$
      </encoder>
    </appender>
   </then>
  </if>
 <if condition='isNull("dse.console.useColors")'>
  <then>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
      <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>INFO</level>
     </filter>
     <encoder>
        <pattern>%-5level [%thread] %date{ISO8601} %X{service} %F:%L - %msg%n</pattern>
     </encoder>
    </appender>
  </then>
 </if>

 <include file="${SPARK_SERVER_LOGBACK_CONF_FILE}"/>
 <include file="${GREMLIN_SERVER_LOGBACK_CONF_FILE}"/>

  <!-- Uncomment the LogbackMetrics appender and the corresponding appender-ref in the root to activate
  <appender name="LogbackMetrics" class="com.codahale.metrics.logback.InstrumentedAppender" />
  -->

 <root level="${logback.root.level:-INFO}">
   <appender-ref ref="SYSTEMLOG" />
   <appender-ref ref="STDOUT" />
 <!-- Comment out the ASYNCDEBUGLOG appender to disable debug.log -->
   <appender-ref ref="ASYNCDEBUGLOG" />
 <!-- Uncomment LogbackMetrics and its associated appender to enable metric collecting for logs. -->
 <!-- <appender-ref ref="LogbackMetrics" /> -->
   <appender-ref ref="SparkMasterFileAppender" />
   <appender-ref ref="SparkWorkerFileAppender" />
   <appender-ref ref="GremlinServerFileAppender" />
 </root>

<!--audit log-->
 <appender name="SLF4JAuditWriterAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
   <file>${cassandra.logdir}/audit/audit.log</file>
   <encoder>
     <pattern>%-5level [%thread] %date{ISO8601} %X{service} %F:%L - %msg%n</pattern>
     <immediateFlush>true</immediateFlush>
     </encoder>
   <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
     <fileNamePattern>${cassandra.logdir}/audit/audit.log.%i.zip</fileNamePattern>
     <minIndex>1</minIndex>
     <maxIndex>5</maxIndex>
   </rollingPolicy>
   <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
     <maxFileSize>200MB</maxFileSize>
   </triggeringPolicy>
 </appender>

 <logger name="SLF4JAuditWriter" level="INFO" additivity="false">
   <appender-ref ref="SLF4JAuditWriterAppender"/>
 </logger>

 <appender name="DroppedAuditEventAppender" class="ch.qos.logback.core.rolling.RollingFileAppender" prudent=$
   <file>${cassandra.logdir}/audit/dropped-events.log</file>
   <encoder>
     <pattern>%-5level [%thread] %date{ISO8601} %X{service} %F:%L - %msg%n</pattern>
     <immediateFlush>true</immediateFlush>
   </encoder>
   <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
     <fileNamePattern>${cassandra.logdir}/audit/dropped-events.log.%i.zip</fileNamePattern>
     <minIndex>1</minIndex>
     <maxIndex>5</maxIndex>
   </rollingPolicy>
   <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
     <maxFileSize>200MB</maxFileSize>
   </triggeringPolicy>
 </appender>

 <logger name="DroppedAuditEventLogger" level="INFO" additivity="false">
   <appender-ref ref="DroppedAuditEventAppender"/>
 </logger>

 <logger name="org.apache.cassandra" level="DEBUG"/>
 <logger name="com.datastax.bdp.db" level="DEBUG"/>
 <logger name="com.datastax.driver.core.NettyUtil" level="ERROR"/>
 <logger name="com.datastax.bdp.search.solr.metrics.SolrMetricsEventListener" level="DEBUG"/>
 <logger name="org.apache.solr.core.CassandraSolrConfig" level="WARN"/>
 <logger name="org.apache.solr.core.SolrCore" level="WARN"/>
 <logger name="org.apache.solr.core.RequestHandlers" level="WARN"/>
 <logger name="org.apache.solr.handler.component" level="WARN"/>
 <logger name="org.apache.solr.search.SolrIndexSearcher" level="WARN"/>
 <logger name="org.apache.solr.update" level="WARN"/>
 <logger name="org.apache.lucene.index" level="INFO"/>
 <logger name="com.cryptsoft" level="OFF"/>
 <logger name="org.apache.spark.rpc" level="ERROR"/>
</configuration>
アペンダー構成は、ログとその構成をどこに印刷するかを指定します。各アペンダーはappendername="appender"として定義され、以下のように記述されます。
SYSTEMLOG
ログを管理し、警告メッセージとエラー・メッセージを同時に/var/log/cassandra/system.logファイルに書き込みます。
DEBUGLOG | ASYNCDEBUGLOG
/var/log/cassandra/debug.logファイルを生成します。このファイルには、system.logファイルに書き込まれるイベントの非同期ログと、デバッグ問題発生時に役立つプロダクション・ロギング情報が格納されます。
STDOUT
ユーザーが読み取れる形式でログをコンソールに誘導します。
LogbackMetrics
ロギング・レベル別に記録されたイベントの割合を記録します。
SLF4JAuditWriterAppender | DroppedAuditEventAppender
監査ロギング機能で使用します。詳細については、「データベース監査の設定」を参照してください。
以下のロギング機能を構成できます。
  • ローリング・ポリシー
    • ログをアーカイブにローリングするためのポリシー
    • ログ・ファイルの場所と名前
    • アーカイブの場所と名前
    • ローリングをトリガーする最小ファイル・サイズと最大ファイル・サイズ
  • メッセージの形式
  • ログ・レベル

ログ・レベル

ログ・レベル設定の有効値には、すべてのレベルの情報をロギングする「ALL」、「TRACE」から「ERROR」まで、さらにロギングなしの「OFF」があります。TRACEで最も冗長なログが作成され、ERRORで最も低いレベルのログが作成されます。
  • ALL
  • TRACE
  • DEBUG
  • INFO(デフォルト)
  • WARN
  • ERROR
  • OFF
注: TRACEまたはDEBUGに設定されると、出力はdebug.logにのみ表示されます。INFOに設定すると、debug.logは無効になります。
注: ロギング・レベルを上げると、トラフィックの少ないクラスターでも、大量のログ出力が生成されることがあります。
nodetool getlogginglevelsコマンドを使用して、現在のロギング構成を確認します。
bin\nodetool getlogginglevels
Logger Name                                        Log Level
ROOT                                               INFO
com.thinkaurelius.thrift                           ERROR
ログバック・フレームワークを使用してクラスにデバッグ・ロギングを恒久的に追加するには、nodetool setlogginglevelをコンポーネントまたはクラスがあることを確認してから、installation_location/confのlogback.xmlファイルで設定します。ファイルの末尾に以下のような行を含めます。
<logger name="org.apache.cassandra.gms.FailureDetector" level="DEBUG"/>
変更を有効にするには、ノードを再起動します。

log4jからログバックへの移行

log4jを使用していた前のバージョンからアップグレードしている場合は、ログバックPropertiesTranslator Webアプリケーションを使用してlog4j.propertiesファイルをlogback.xmlに変換することができます。

ログ・ファイルのローテーションの使用

デフォルトのポリシーでは、サイズが20MBを超えると、system.logファイルをローリングします。アーカイブはzip形式で圧縮されます。ログバックは、ログ・ファイルにsystem.log.1.zipsystem.log.2.zipなどの名前を付けます。詳細については、ログバックのドキュメントを参照してください。

拡張コンパクション・ロギングの有効化

ノードのコンパクション・アクティビティーに関する詳細な情報収集の構成と、専用ログ・ファイルへの書き込みについては、「コンパクションのlog_allプロパティ」を参照してください。