openTSDB查看日志
1.问题
openTSDB程序运行的日志在哪里呢?
今天发现自己的windows磁盘一直飙高100%,仔细定位之后,猜测是虚拟机中运行的openTSDB出现了问题,于是想查找openTSDB的运行日志,但却一直没有找到。
2.原因
定位问题的过程如下:
- 搜索openTSDB安装目录下的日志文件
[root@server4 opentsdb-2.3.0]# find . -name "*log*"
./src/logback.xml
./build-aux/rpm/logback.xml
./third_party/slf4j/log4j-over-slf4j-1.7.7.jar.md5
./third_party/slf4j/log4j-over-slf4j-1.7.7.jar
./third_party/jexl/commons-logging-1.1.1.jar.md5
./third_party/jexl/commons-logging-1.1.1.jar
./third_party/logback
./third_party/logback/logback-core-1.0.13.jar
./third_party/logback/logback-classic-1.0.13.jar.md5
./third_party/logback/logback-classic-1.0.13.jar
./third_party/logback/logback-core-1.0.13.jar.md5
./build/third_party/slf4j/log4j-over-slf4j-1.7.7.jar.md5
./build/third_party/slf4j/log4j-over-slf4j-1.7.7.jar
./build/third_party/jexl/commons-logging-1.1.1.jar.md5
./build/third_party/jexl/commons-logging-1.1.1.jar
./build/third_party/logback
./build/third_party/logback/logback-core-1.0.13.jar
./build/third_party/logback/logback-classic-1.0.13.jar.md5
./build/third_party/logback/logback-classic-1.0.13.jar
./build/third_party/logback/logback-core-1.0.13.jar.md5
./build/config.log
./build/gwt/queryui/gwt/opentsdb/images/ie6/corner_dialog_topleft.png
./build/gwt/queryui/gwt/opentsdb/images/ie6/corner_dialog_topright.png
[root@server4 opentsdb-2.3.0]# find . -name "*.log*"
./build/config.log
[root@server4 opentsdb-2.3.0]# find . -name "*.log"
./build/config.log
[root@server4 opentsdb-2.3.0]# cd ./build-aux/rpm/logback.xml
-bash: cd: ./build-aux/rpm/logback.xml: Not a directory
[root@server4 opentsdb-2.3.0]#
大致猜测每个文件名之后,觉得./src/logback.xml
最可疑,于是查看:
[root@server4 opentsdb-2.3.0]# cat ./src/logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--<jmxConfigurator/>-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{ISO8601} %-5level [%thread] %logger{0}: %msg%n
</pattern>
</encoder>
</appender>
<!-- This appender is responsible for the /logs endpoint. It maintains MaxSize
lines of the log file in memory. If you don't need the endpoint, disable
this appender (by removing the line "<appender-ref ref="CYCLIC"/>" in
the "root" section below) to save some cycles and memory. -->
<appender name="CYCLIC" class="ch.qos.logback.core.read.CyclicBufferAppender">
<MaxSize>1024</MaxSize>
</appender>
<!-- Appender to write OpenTSDB data to a set of rotating log files -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/opentsdb/opentsdb.log</file>
<append>true</append>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>/home/y/logs/opentsdb2/opentsdb.log.%i</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>4</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>512MB</maxFileSize>
</triggeringPolicy>
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%date{ISO8601} [%thread] %-5level [%logger{0}.%M] - %msg%n</pattern>
</encoder>
</appender>
<!-- Appender for writing full and completed queries to a log file. To use it, make
sure to set the "level" to "INFO" in QueryLog below. -->
<appender name="QUERY_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/opentsdb/queries.log</file>
<append>true</append>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>/var/log/opentsdb/queries.log.%i</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>4</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>128MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%date{ISO8601} [%logger.%M] %msg%n</pattern>
</encoder>
</appender>
<!-- Per class logger levels -->
<logger name="QueryLog" level="OFF" additivity="false">
<appender-ref ref="QUERY_LOG"/>
</logger>
<logger name="org.apache.zookeeper" level="INFO"/>
<logger name="org.hbase.async" level="INFO"/>
<logger name="com.stumbleupon.async" level="INFO"/>
<!-- Fallthrough root logger and router -->
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="CYCLIC"/>
<!-- Uncomment to log to file -->
<!--<appender-ref ref="FILE"/>-->
</root>
</configuration>
甚是惊讶,这不就是源码中的.xml配置文件嘛,于是顺便学习一下logback.xml文件的配置要素。主要如下:
2.1logback简介
logback的语法十分灵活。所以无法使用DTD或者XML schema进行定义。尽管如此,可以这样描述配置文件的基本结构:以开头,后面有零个或多个元素,有零个或多个元素,有最多一个元素。
2.2logback的默认配置
- 01.尝试在 classpath下查找文件logback-test.xml;
- 02.如果文件不存在,则查找文件logback.xml;
- 03.如果两个文件都不存在,logback用BasicConfigurator自动对自己进行配置,这会导致记录输出到控制台。
2.1logback 组件
- 子节点:负责写日志的组件,它有两个必要属性name和class。name指定appender名称,class指定appender的全限定名
- ConsoleAppender 把日志输出到控制台,有以下子节点:
:对日志进行格式化。(具体参数稍后讲解 )
:字符串System.out(默认)或者System.err(区别不多说了) - FileAppender:把日志添加到文件,有以下子节点:
:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。
:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。
:对记录事件进行格式化。(具体参数稍后讲解 )
:如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。 - RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。有以下子节点:
:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。
:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。
:当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类
class=“ch.qos.logback.core.rolling.TimeBasedRollingPolicy”: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动。有以下子节点:
:必要节点,包含文件名及“%d”转换符,“%d”可以包含一个java.text.SimpleDateFormat指定的时间格式,如:%d{yyyy-MM}。
- 子节点:用来设置某一个包或具体的某一个类的日志打印级别、以及指定。仅有一个name属性,一个可选的level和一个可选的addtivity属性。可以包含零个或多个元素,标识这个appender将会添加到这个loger
通过上面的logback.xml文件,可以看到这个默认的openTSDB的日志目录是在/var/log/opentsdb/opentsdb.log
中。查看结果如下:
[root@server4 opentsdb-2.3.0]# cd /var/log/opentsdb/
[root@server4 opentsdb]# ll
total 0
-rw-r--r--. 1 root root 0 Jul 9 22:30 opentsdb.log
-rw-r--r--. 1 root root 0 Jul 9 22:30 queries.log
同时,可以注意到这里面的日志大小是0,因为logback.xml文件中的配置有如下一行
<!-- Fallthrough root logger and router -->
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="CYCLIC"/>
<!-- Uncomment to log to file -->
<!--<appender-ref ref="FILE"/>-->
</root>
其中<appender-ref ref="FILE"/>
表示的就是将日志记录到文件中,但是却被注释掉了。去掉注释,启动openTSDB,再查看日志,如下:
[root@server4 opentsdb]# ll
total 36
-rw-r--r--. 1 root root 33932 Oct 28 22:25 opentsdb.log
-rw-r--r--. 1 root root 0 Jul 9 22:30 queries.log
[root@server4 opentsdb]#
3.解决办法
看来只能是修改logback.xml文件来输出日志了。
将<!--<appender-ref ref="FILE"/>-->
修改成<appender-ref ref="FILE"/>
即可