Apache Storm 1.1.1 - 在哪里可以找到我的日志文件?
Apache Storm 1.1.1 - where to find my log files?
我检查了这些问题:
Logging from a storm bolt - where is it going?
解决方案不再有效。
理论上,storm.log.dir
的系统变量是在我们启动storm jar
的时候设置的。正如解决方案所建议的那样,您可以使用 ps aux | grep storm.log.dir
来搜索参数的值。
显示:
java -client -Ddaemon.name= -Dstorm.options= -Dstorm.home=/opt/apache-storm-1.1.1 -Dstorm.log.dir=/opt/apache-storm-1.1.1/logs .....
但是,当我去那里时,我有:
[root@xxx ~]# ls -la /opt/apache-storm-1.1.1/logs
total 58272
drwxr-xr-x 3 root root 4096 Jan 15 01:21 .
drwxr-xr-x 14 root root 4096 Oct 31 10:09 ..
-rw-r--r-- 1 root root 0 Nov 3 10:46 access-logviewer.log
-rw-r--r-- 1 root root 0 Oct 31 10:09 access-nimbus.log
-rw-r--r-- 1 root root 0 Oct 31 10:09 access-supervisor.log
-rw-r--r-- 1 root root 0 Nov 23 14:36 access-ui.log
-rw-r--r-- 1 root root 8916 Nov 27 17:34 access-web-logviewer.log
-rw-r--r-- 1 root root 0 Oct 31 10:09 access-web-nimbus.log
-rw-r--r-- 1 root root 0 Oct 31 10:09 access-web-supervisor.log
-rw-r--r-- 1 root root 31661 Nov 27 17:40 access-web-ui.log
-rw-r--r-- 1 root root 2247 Nov 3 11:34 logviewer.log
-rw-r--r-- 1 root root 0 Nov 3 10:46 logviewer.log.metrics
-rw-r--r-- 1 root root 20690 Oct 31 10:09 nimbus.log
-rw-r--r-- 1 root root 0 Oct 31 10:09 nimbus.log.metrics
-rw-r--r-- 1 root root 46713727 Feb 6 17:13 supervisor.log
-rw-r--r-- 1 root root 3143062 Jan 10 08:23 supervisor.log.1.gz
-rw-r--r-- 1 root root 3104009 Jan 11 22:06 supervisor.log.2.gz
-rw-r--r-- 1 root root 3103550 Jan 13 11:43 supervisor.log.3.gz
-rw-r--r-- 1 root root 3103899 Jan 15 01:21 supervisor.log.4.gz
-rw-r--r-- 1 root root 0 Oct 31 10:09 supervisor.log.metrics
-rw-r--r-- 1 root root 401456 Nov 27 17:40 ui.log
-rw-r--r-- 1 root root 0 Nov 23 14:36 ui.log.metrics
drwxr-xr-x 48 root root 4096 Feb 12 18:08 workers-artifacts
进入workers-artifacts
,我有以节点命名的目录,在里面,我有worker.yaml
.
[root@mq1-acustats-process KafkaStormRadius-1-1518455061]# cd 1027
[root@mq1-acustats-process 1027]# ls -la
total 4
drwxr-xr-x 2 root root 24 Feb 12 18:04 .
drwxr-xr-x 8 root root 72 Feb 12 18:04 ..
-rw-r--r-- 1 root root 109 Feb 12 18:04 worker.yaml
[root@mq1-acustats-process 1027]# cat worker.yaml
worker-id: 33e6e77d-8a7b-48b2-b2d4-1be0af726c52
logs.users: []
logs.groups: []
topology.submitter.user: root
所以,这里没有日志。他们在哪里?
我在 {STORM_DIR}/log4j2
下有这个 worker.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<configuration monitorInterval="60" shutdownHook="disable">
<properties>
<property name="pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} %c{1.} %t [%p] %msg%n</property>
<property name="patternNoTime">%msg%n</property>
<property name="patternMetrics">%d %-8r %m%n</property>
</properties>
<appenders>
<RollingFile name="A1"
fileName="${sys:workers.artifacts}/${sys:storm.id}/${sys:worker.port}/${sys:logfile.name}"
filePattern="${sys:workers.artifacts}/${sys:storm.id}/${sys:worker.port}/${sys:logfile.name}.%i.gz">
<PatternLayout>
<pattern>${pattern}</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="100 MB"/> <!-- Or every 100 MB -->
</Policies>
<DefaultRolloverStrategy max="9"/>
</RollingFile>
<RollingFile name="radius"
fileName="${sys:storm.log.dir}/radius.log"
filePattern="${sys:storm.log.dir}/radius.log.%i.gz">
<PatternLayout>
<pattern>${pattern}</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="50 MB"/> <!-- Or every 20 MB -->
</Policies>
<DefaultRolloverStrategy max="9"/>
</RollingFile>
<RollingFile name="STDOUT"
fileName="${sys:storm.log.dir}/radius.out"
filePattern="${sys:storm.log.dir}/radius.out.%i.gz">
<PatternLayout>
<pattern>${patternNoTime}</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="50 MB"/> <!-- Or every 100 MB -->
</Policies>
<DefaultRolloverStrategy max="4"/>
</RollingFile>
<RollingFile name="STDERR"
fileName="${sys:storm.log.dir}/radius.err"
filePattern="${sys:storm.log.dir}/radius.err.%i.gz">
<PatternLayout>
<pattern>${patternNoTime}</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="50 MB"/> <!-- Or every 100 MB -->
</Policies>
<DefaultRolloverStrategy max="4"/>
</RollingFile>
<RollingFile name="METRICS"
fileName="${sys:storm.log.dir}/radius.metrics"
filePattern="${sys:storm.log.dir}/radius.metrics.%i.gz">
<PatternLayout>
<pattern>${patternMetrics}</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="2 MB"/>
</Policies>
<DefaultRolloverStrategy max="9"/>
</RollingFile>
<Syslog name="syslog" format="RFC5424" charset="UTF-8" host="localhost" port="514"
protocol="UDP" appName="[${sys:storm.id}:${sys:worker.port}]" mdcId="mdc" includeMDC="true"
facility="LOCAL5" enterpriseNumber="18060" newLine="true" exceptionPattern="%rEx{full}"
messageId="[${sys:user.name}:${sys:logging.sensitivity}]" id="storm" immediateFail="true" immediateFlush="true"/>
</appenders>
<loggers>
<root level="info"> <!-- We log everything -->
<appender-ref ref="A1"/>
<appender-ref ref="syslog"/>
</root>
<Logger name="org.apache.storm.metric.LoggingMetricsConsumer" level="info" additivity="false">
<appender-ref ref="METRICS"/>
</Logger>
<Logger name="com.joestelmach.natty" level="error" additivity="false">
<appender-ref ref="radius"/>
</Logger>
<Logger name="STDERR" level="INFO">
<appender-ref ref="STDERR"/>
<appender-ref ref="syslog"/>
</Logger>
<Logger name="STDOUT" level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="syslog"/>
</Logger>
</loggers>
</configuration>
但是,我没有看到 radius.log
在 ${sys:storm.log.dir}
下创建。
为什么?
顺便说一句:
cluster.xml
和 worker.xml
的区别?
我的猜测是 storm.log.dir 变量没有为 worker JVM 正确设置。请记住,您在 运行ning storm jar
时启动的 JVM 与将 运行 您的拓扑的 JVM 不同。
为了为您的工作人员设置 VM 选项,您可以使用 storm.yaml 中的 worker.childopts 变量来全局设置选项(您可能需要确保从 https://github.com/apache/storm/blob/v1.1.1/conf/defaults.yaml#L171 如果你这样做)或拓扑。worker.childopts 在你的拓扑配置中根据拓扑设置它们。
例如,我使用以下配置将日志打印到 E:\testLogs:
storm.yaml
worker.childopts: "-Dstorm.log.dir=E:\testLogs"
worker.xml
...
<RollingFile name="A1"
fileName="${sys:storm.log.dir}/worker.log"
filePattern="${sys:workers.artifacts}/${sys:storm.id}/${sys:worker.port}/${sys:logfile.name}.%i.gz">
<PatternLayout>
<pattern>${pattern}</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="100 MB"/> <!-- Or every 100 MB -->
</Policies>
<DefaultRolloverStrategy max="9"/>
</RollingFile>
...
worker.xml 的其余部分是 Storm 1.1.1 附带的默认内容。
关于 cluster.xml 和 worker.xml,cluster.xml 是 Storm 守护进程(Nimbus、Supervisor、UI 等)的日志记录配置,worker.xml 是工作进程的日志记录配置(运行你的拓扑组件)
我已经阅读了另一个团队留下的文档并找到了这些行....我有一个未启动的 storm 服务。
systemctl start storm-supervisor
检查/etc/systemd/system/
下的服务定义(我用的是CentOS所以我用的是systemd
),上面写着:
[Unit]
Description=Nimbus Service
After=network.target
[Service]
Type=simple
Restart=always
RestartSec=0s
ExecStart=/opt/apache-storm/bin/storm supervisor
[Install]
WantedBy=multi-user.target
启动后,我现在可以看到在正确目录下创建的日志文件。
值得一提的是,我还更改了另外两件事:
- 使用
slf4j
而不是 log4j
。
- 将
log4j2.properties
更改为使用绝对路径(在/tmp
下)而不是像{sys:storm.log.dir}
那样读取系统变量以丢弃变量因子。
我检查了这些问题:
Logging from a storm bolt - where is it going?
解决方案不再有效。
理论上,storm.log.dir
的系统变量是在我们启动storm jar
的时候设置的。正如解决方案所建议的那样,您可以使用 ps aux | grep storm.log.dir
来搜索参数的值。
显示:
java -client -Ddaemon.name= -Dstorm.options= -Dstorm.home=/opt/apache-storm-1.1.1 -Dstorm.log.dir=/opt/apache-storm-1.1.1/logs .....
但是,当我去那里时,我有:
[root@xxx ~]# ls -la /opt/apache-storm-1.1.1/logs
total 58272
drwxr-xr-x 3 root root 4096 Jan 15 01:21 .
drwxr-xr-x 14 root root 4096 Oct 31 10:09 ..
-rw-r--r-- 1 root root 0 Nov 3 10:46 access-logviewer.log
-rw-r--r-- 1 root root 0 Oct 31 10:09 access-nimbus.log
-rw-r--r-- 1 root root 0 Oct 31 10:09 access-supervisor.log
-rw-r--r-- 1 root root 0 Nov 23 14:36 access-ui.log
-rw-r--r-- 1 root root 8916 Nov 27 17:34 access-web-logviewer.log
-rw-r--r-- 1 root root 0 Oct 31 10:09 access-web-nimbus.log
-rw-r--r-- 1 root root 0 Oct 31 10:09 access-web-supervisor.log
-rw-r--r-- 1 root root 31661 Nov 27 17:40 access-web-ui.log
-rw-r--r-- 1 root root 2247 Nov 3 11:34 logviewer.log
-rw-r--r-- 1 root root 0 Nov 3 10:46 logviewer.log.metrics
-rw-r--r-- 1 root root 20690 Oct 31 10:09 nimbus.log
-rw-r--r-- 1 root root 0 Oct 31 10:09 nimbus.log.metrics
-rw-r--r-- 1 root root 46713727 Feb 6 17:13 supervisor.log
-rw-r--r-- 1 root root 3143062 Jan 10 08:23 supervisor.log.1.gz
-rw-r--r-- 1 root root 3104009 Jan 11 22:06 supervisor.log.2.gz
-rw-r--r-- 1 root root 3103550 Jan 13 11:43 supervisor.log.3.gz
-rw-r--r-- 1 root root 3103899 Jan 15 01:21 supervisor.log.4.gz
-rw-r--r-- 1 root root 0 Oct 31 10:09 supervisor.log.metrics
-rw-r--r-- 1 root root 401456 Nov 27 17:40 ui.log
-rw-r--r-- 1 root root 0 Nov 23 14:36 ui.log.metrics
drwxr-xr-x 48 root root 4096 Feb 12 18:08 workers-artifacts
进入workers-artifacts
,我有以节点命名的目录,在里面,我有worker.yaml
.
[root@mq1-acustats-process KafkaStormRadius-1-1518455061]# cd 1027
[root@mq1-acustats-process 1027]# ls -la
total 4
drwxr-xr-x 2 root root 24 Feb 12 18:04 .
drwxr-xr-x 8 root root 72 Feb 12 18:04 ..
-rw-r--r-- 1 root root 109 Feb 12 18:04 worker.yaml
[root@mq1-acustats-process 1027]# cat worker.yaml
worker-id: 33e6e77d-8a7b-48b2-b2d4-1be0af726c52
logs.users: []
logs.groups: []
topology.submitter.user: root
所以,这里没有日志。他们在哪里?
我在 {STORM_DIR}/log4j2
下有这个 worker.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<configuration monitorInterval="60" shutdownHook="disable">
<properties>
<property name="pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} %c{1.} %t [%p] %msg%n</property>
<property name="patternNoTime">%msg%n</property>
<property name="patternMetrics">%d %-8r %m%n</property>
</properties>
<appenders>
<RollingFile name="A1"
fileName="${sys:workers.artifacts}/${sys:storm.id}/${sys:worker.port}/${sys:logfile.name}"
filePattern="${sys:workers.artifacts}/${sys:storm.id}/${sys:worker.port}/${sys:logfile.name}.%i.gz">
<PatternLayout>
<pattern>${pattern}</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="100 MB"/> <!-- Or every 100 MB -->
</Policies>
<DefaultRolloverStrategy max="9"/>
</RollingFile>
<RollingFile name="radius"
fileName="${sys:storm.log.dir}/radius.log"
filePattern="${sys:storm.log.dir}/radius.log.%i.gz">
<PatternLayout>
<pattern>${pattern}</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="50 MB"/> <!-- Or every 20 MB -->
</Policies>
<DefaultRolloverStrategy max="9"/>
</RollingFile>
<RollingFile name="STDOUT"
fileName="${sys:storm.log.dir}/radius.out"
filePattern="${sys:storm.log.dir}/radius.out.%i.gz">
<PatternLayout>
<pattern>${patternNoTime}</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="50 MB"/> <!-- Or every 100 MB -->
</Policies>
<DefaultRolloverStrategy max="4"/>
</RollingFile>
<RollingFile name="STDERR"
fileName="${sys:storm.log.dir}/radius.err"
filePattern="${sys:storm.log.dir}/radius.err.%i.gz">
<PatternLayout>
<pattern>${patternNoTime}</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="50 MB"/> <!-- Or every 100 MB -->
</Policies>
<DefaultRolloverStrategy max="4"/>
</RollingFile>
<RollingFile name="METRICS"
fileName="${sys:storm.log.dir}/radius.metrics"
filePattern="${sys:storm.log.dir}/radius.metrics.%i.gz">
<PatternLayout>
<pattern>${patternMetrics}</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="2 MB"/>
</Policies>
<DefaultRolloverStrategy max="9"/>
</RollingFile>
<Syslog name="syslog" format="RFC5424" charset="UTF-8" host="localhost" port="514"
protocol="UDP" appName="[${sys:storm.id}:${sys:worker.port}]" mdcId="mdc" includeMDC="true"
facility="LOCAL5" enterpriseNumber="18060" newLine="true" exceptionPattern="%rEx{full}"
messageId="[${sys:user.name}:${sys:logging.sensitivity}]" id="storm" immediateFail="true" immediateFlush="true"/>
</appenders>
<loggers>
<root level="info"> <!-- We log everything -->
<appender-ref ref="A1"/>
<appender-ref ref="syslog"/>
</root>
<Logger name="org.apache.storm.metric.LoggingMetricsConsumer" level="info" additivity="false">
<appender-ref ref="METRICS"/>
</Logger>
<Logger name="com.joestelmach.natty" level="error" additivity="false">
<appender-ref ref="radius"/>
</Logger>
<Logger name="STDERR" level="INFO">
<appender-ref ref="STDERR"/>
<appender-ref ref="syslog"/>
</Logger>
<Logger name="STDOUT" level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="syslog"/>
</Logger>
</loggers>
</configuration>
但是,我没有看到 radius.log
在 ${sys:storm.log.dir}
下创建。
为什么?
顺便说一句:
cluster.xml
和worker.xml
的区别?
我的猜测是 storm.log.dir 变量没有为 worker JVM 正确设置。请记住,您在 运行ning storm jar
时启动的 JVM 与将 运行 您的拓扑的 JVM 不同。
为了为您的工作人员设置 VM 选项,您可以使用 storm.yaml 中的 worker.childopts 变量来全局设置选项(您可能需要确保从 https://github.com/apache/storm/blob/v1.1.1/conf/defaults.yaml#L171 如果你这样做)或拓扑。worker.childopts 在你的拓扑配置中根据拓扑设置它们。
例如,我使用以下配置将日志打印到 E:\testLogs:
storm.yaml
worker.childopts: "-Dstorm.log.dir=E:\testLogs"
worker.xml
...
<RollingFile name="A1"
fileName="${sys:storm.log.dir}/worker.log"
filePattern="${sys:workers.artifacts}/${sys:storm.id}/${sys:worker.port}/${sys:logfile.name}.%i.gz">
<PatternLayout>
<pattern>${pattern}</pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="100 MB"/> <!-- Or every 100 MB -->
</Policies>
<DefaultRolloverStrategy max="9"/>
</RollingFile>
...
worker.xml 的其余部分是 Storm 1.1.1 附带的默认内容。
关于 cluster.xml 和 worker.xml,cluster.xml 是 Storm 守护进程(Nimbus、Supervisor、UI 等)的日志记录配置,worker.xml 是工作进程的日志记录配置(运行你的拓扑组件)
我已经阅读了另一个团队留下的文档并找到了这些行....我有一个未启动的 storm 服务。
systemctl start storm-supervisor
检查/etc/systemd/system/
下的服务定义(我用的是CentOS所以我用的是systemd
),上面写着:
[Unit]
Description=Nimbus Service
After=network.target
[Service]
Type=simple
Restart=always
RestartSec=0s
ExecStart=/opt/apache-storm/bin/storm supervisor
[Install]
WantedBy=multi-user.target
启动后,我现在可以看到在正确目录下创建的日志文件。
值得一提的是,我还更改了另外两件事:
- 使用
slf4j
而不是log4j
。 - 将
log4j2.properties
更改为使用绝对路径(在/tmp
下)而不是像{sys:storm.log.dir}
那样读取系统变量以丢弃变量因子。