storm源码分析-日志服务
来源:互联网 发布:越狱iphone抹除数据 编辑:程序博客网 时间:2024/06/06 05:12
本文为作者原创,转载请标明出处。原作者:Tony_老七
原文链接:http://blog.csdn.net/tonylee0329/article/details/40081723
以下基于storm的版本: 0.9.0.1
storm中各种日志是排查问题的有效工具,但是这些日志是怎么形成的呢?
storm使用logback作为日志服务插件,配置文件见$STORM_HOME/logback/cluster.xml
我们目前主要关心worker、nimbus、ui、supervisor日志,METRICS、ACCESS这些比较简单
worker-xxxx.log
nimbus.log
supervisor.log
ui.log
这些日志都是使用了A1这个appender
<appender name="A1" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${storm.home}/logs/${logfile.name}</file> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <fileNamePattern>${storm.home}/logs/${logfile.name}.%i</fileNamePattern> <minIndex>1</minIndex> <maxIndex>9</maxIndex> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>100MB</maxFileSize> </triggeringPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n</pattern> </encoder></appender>
采用了logback的日志轮转功能,但是这里的${storm.home}、${logfile.name}这个是在哪定义的呢?
从bin/storm脚本中,可以看到nimbus、ui、supervisor是在启动的时候传入了变量logfile.name
如nimbus启动的时候
def nimbus(klass="backtype.storm.daemon.nimbus"): """Syntax: [storm nimbus] Launches the nimbus daemon. This command should be run under supervision with a tool like daemontools or monit. See Setting up a Storm cluster for more information. (https://github.com/nathanmarz/storm/wiki/Setting-up-a-Storm-cluster) """ cppaths = [CLUSTER_CONF_DIR] jvmopts = parse_args(confvalue("nimbus.childopts", cppaths)) + [ <span style="color:#ff0000;"> "-Dlogfile.name=nimbus.log",</span> "-Dlogback.configurationFile=" + STORM_DIR + "/logback/cluster.xml", ] exec_storm_class( klass, jvmtype="-server", extrajars=cppaths, jvmopts=jvmopts)
阅读源码,可以看到在supervisor.clj的launch-worker方法中生成了logfile.name
在启动worker进程的时候,根据worker所在port,形成变量名logfile.name,logback中据此引用变量,形成名称worker-6700.log
(defmethod launch-worker :distributed [supervisor storm-id port worker-id] (let [conf (:conf supervisor) storm-home (System/getProperty "storm.home") stormroot (supervisor-stormdist-root conf storm-id) stormjar (supervisor-stormjar-path stormroot) storm-conf (read-supervisor-storm-conf conf storm-id) classpath (add-to-classpath (current-classpath) [stormjar]) childopts (.replaceAll (str (conf WORKER-CHILDOPTS) " " (storm-conf TOPOLOGY-WORKER-CHILDOPTS)) "%ID%" (str port)) <span style="color:#ff0000;">logfilename (str "worker-" port ".log")</span> command (str "java -server " childopts " -Djava.library.path=" (conf JAVA-LIBRARY-PATH) " -Dlogfile.name=" logfilename " -Dstorm.home=" storm-home " -Dlogback.configurationFile=" storm-home "/logback/cluster.xml" " -cp " classpath " backtype.storm.daemon.worker " (java.net.URLEncoder/encode storm-id) " " (:assignment-id supervisor) " " port " " worker-id)] (log-message "Launching worker with command: " command) (launch-process command :environment {"LD_LIBRARY_PATH" (conf JAVA-LIBRARY-PATH)}) ))
以上便是strom的几种日志生成方式。
在storm的开发中,我们通常会自定义日志路径,方便管理
如定义路径为${storm.home}/logs/${topo_name}/${logfile.name}
0 0
- storm源码分析-日志服务
- Storm-源码分析汇总
- Storm-源码分析汇总
- Storm源码分析<转>
- storm源码分析--TimeCacheMap
- Storm-源码分析汇总
- Storm源码分析汇总
- Storm-源码分析汇总
- storm 源码分析
- storm-kafka源码分析
- Storm实时日志分析实战
- Storm-源码分析- Scheduler (backtype.storm.scheduler)
- Storm-源码分析-LocalState (backtype.storm.utils)
- Storm源码目录结构分析
- Storm源码分析--Nimbus-data
- storm 实时日志分析导图
- Squid服务日志分析
- twisted日志源码分析
- Android软件开发之获取通讯录联系人信息
- 通过.git文件夹来看git设计
- hdu 3076 ssworld VS DDD 概率dp
- MYSQL教程:检查数据表和修复数据表
- android蓝牙文件传输的实现(建议与蓝牙精典结合起来看)
- storm源码分析-日志服务
- 浅析HTTP协议
- 2014阿里巴巴web前端实习生试题分析(1)
- Maven使用(二)——使用archetype/m2eclipse创建maven项目
- 老码农教你学英语:补充一些英语学习素材
- 如何为嵌入式开发建立交叉编译环境
- java 全角字符转半角字符
- php-isset
- #define中##连接符、#符以及#@符的使用