我在使用storm 2.1.0将storm worker/topology日志转换为elk兼容格式(json)时遇到了一些困难。
以下是我当前的工作程序日志记录配置: cluster.xml
<Configuration monitorInterval="60" shutdownHook="disable" packages="ch.qos.logback.core"> <Properties> <property name="logstash">+ %msg +%n</property> <!-- only for 'bug' demonstration purposes --> </Properties> <Appenders> <Console name="CONSOLE"> <PatternLayout> <Pattern>${logstash}</Pattern> </PatternLayout> </Console> </Appenders> <Loggers> <Root level="INFO"> <AppenderRef ref="CONSOLE" /> </Root> </Loggers> </Configuration>
worker.xml
```
{"@timestamp":"%d{yyyy-MM-ddTHH:mm:ss.SSS}", "logger": "%logger", "message":"%msg","thread_name":"%t","level":"%level"}%n
${logstash}
根据我的配置,我希望日志消息的格式类似于以下内容(为清晰起见添加了新行:
{
"@timestamp": "2020-02-11 11:32:40,748",
"logger": "org.com.package.aggregation.SomeAggregation",
"message": "joinStateStream: values: [33333333-4e30-49a6-8e1c-f7817633bb34, 7c777777-a622-4ae4-a504-2490db47cafe, 2020-02-11]",
"thread_name": "Thread-23-b-25-joinState-groupedQ-revQ-executor[22, 22]",
"level": "DEBUG"
}
但是,消息似乎是由主管进程甚至工作进程本身“ Package ”的。我收到的日志消息如下所示:
(为便于阅读,添加了换行符/空格)
- Worker Process 273c05df-f087-43ca-a59a-e281bae98ab1:
{
"@timestamp":"2020-02-11 11:32:40,748",
"logger": "STDERR",
"message":
"{
"@timestamp":"2020-02-11 11:32:40,748",
"logger": "org.com.package.aggregation.SomeAggregation",
"message":"joinStateStream: values: [33333333-4e30-49a6-8e1c-f7817633bb34, 7c777777-a622-4ae4-a504-2490db47cafe, 2020-02-11]",
"thread_name":"Thread-23-b-25-joinState-groupedQ-revQ-executor[22, 22]",
"level":"DEBUG"
}",
"thread_name":"Thread-2",
"level":"INFO"} +
这里似乎发生了几件事(向内):
主管似乎把所有的工人信息都 Package 起来,并在它们前面加上 `Worker Process <worker-id>:` . 这一点可以由 `+` 把整个信息都包起来了。
工人似乎以某种方式 Package 自己的日志消息。这个 `message` 日志的一部分包含另一个日志消息。
至于我的问题:
我可以禁用此主管日志前缀吗?查看中的源代码 `org.apache.storm.daemon.supervisor.BasicContainer#launch` ,这似乎是硬编码的。我无法想象一个正确的拓扑部署会导致在每个日志消息中添加一个硬编码前缀。
如何进行工作消息 Package ?如我所见,“wrappee”是我实际的拓扑消息(我希望解析它),而“wrapper”则完全是另一种东西(使用logger) `STDERR` ? 为什么要登录 `STDERR` ? 带水平仪 `INFO` ???)
基本上,我只想在拓扑执行期间记录一些消息,并控制这些消息的格式。我怎样才能用storm可靠地做到这一点?
暂无答案!
目前还没有任何答案,快来回答吧!