我将在 logback 配置中使用 LogstashTcpSocketAppender 将日志消息发送到 logstash。java应用程序工作,但如果我创建一个docker镜像并启动容器,那么消息不会到达logstash。这种行为的原因是什么?我写了一个示例应用程序。你可以在这里找到它。
logback.xml:
<appender name="logstashAppender" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>${destination}</destination>
<writeBufferSize>0</writeBufferSize>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<pattern>
<pattern>
{
"wps-publication": [{
"partitionNumber": "%mdc{partitionNumber}",
"portal": "%mdc{Portal}",
"timestamp": "%date{ISO8601}",
"environment": "${env}",
"squad": "escms",
"microservice": "wps-publication",
"message": "%message",
"logger": "%logger",
"container": "pod1",
"level": "%level"
}]
}
</pattern>
</pattern>
<mdc/>
</providers>
</encoder>
</appender>
我用docker 文件构建了一个 docker 映像:
FROM maven:3.6.3-openjdk-11-slim as builder
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn package -DskipTests
FROM openjdk:11.0.7-jre-slim
COPY --from=builder /app/target/logging.problem-1.0-SNAPSHOT-jar-with-dependencies.jar /logging.problem-1.0-SNAPSHOT.jar
CMD ["java","-jar","/logging.problem-1.0-SNAPSHOT.jar"]
码头工人日志是:
05:49:27,028 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
05:49:27,028 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
05:49:27,030 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [jar:file:/logging.problem-1.0-SNAPSHOT.jar!/logback.xml]
05:49:27,043 |-INFO in ch.qos.logback.core.joran.spi.ConfigurationWatchList@69379752 - URL [jar:file:/logging.problem-1.0-SNAPSHOT.jar!/logback.xml] is not of type file
05:49:27,267 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
05:49:27,271 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [consoleAppender]
05:49:27,280 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
05:49:27,300 |-INFO in ch.qos.logback.core.joran.action.StatusListenerAction - Added status listener of type [ch.qos.logback.core.status.OnConsoleStatusListener]
05:49:27,300 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [net.logstash.logback.appender.LogstashTcpSocketAppender]
05:49:27,324 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [logstashAppender]
05:49:27,400 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [net.logstash.logback.composite.loggingevent.LoggingEventJsonProviders] for [providers] property
05:49:27,409 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [net.logstash.logback.composite.loggingevent.LoggingEventPatternJsonProvider] for [pattern] property
05:49:27,411 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [net.logstash.logback.composite.loggingevent.MdcJsonProvider] for [mdc] property
05:49:27,652 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to INFO
05:49:27,652 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [consoleAppender] to Logger[ROOT]
05:49:27,653 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [logstashAppender] to Logger[ROOT]
05:49:27,653 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
05:49:27,654 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@30f842ca - Registering current configuration as safe fallback point
2020-05-25 05:49:27 [main] INF logging.problem.LoggingProblemApp - Test
2020-05-25 05:49:27 [main] INF logging.problem.LoggingProblemApp - Wait for 10 sec...
05:49:27,695 |-INFO in net.logstash.logback.appender.LogstashTcpSocketAppender[logstashAppender] - Log destination ***:30000: connection established.
Logstash 配置:
input {
tcp {
port => 30000
codec => json_lines
tags => ["json_lines_codec"]
}
}
filter {
split {
field => "wps-publication"
add_tag => ["split_json"]
id => "split json"
}
date {
match => ["[wps-publication][timestamp]", "yyyy-MM-dd HH:mm:ss,SSS" ]
timezone => "Europe/Berlin"
target => "@timestamp"
id => "set timezone"
}
mutate {
rename => {
"[wps-publication][environment]" => "environment"
"[wps-publication][squad]" => "squad"
"[wps-publication][microservice]" => "microservice"
"[wps-publication][logger]" => "logger"
"[wps-publication][message]" => "message"
"[wps-publication][container]" => "container"
}
id => "rename fields"
add_tag => ["rename_fields"]
}
mutate {
remove_field => [ "port", "[wps-publication][timestamp]" ]
id => "remove fields"
add_tag => ["remove_fields"]
}
}
output {
if "dev" in [environment] {
elasticsearch {
hosts => ["***:9200", "***:9200", "***:9200", "***:9200", "***:9200", "***:9200"]
index => "centralized-logging-dev-%{+YYYY.MM.dd}"
timeout => 600
}
} else {
elasticsearch {
hosts => ["***:9200", "***:9200", "***:9200", "***:9200", "***:9200", "ESDEVELK16.int.cid-online.net:9200"]
index => "centralized-logging-invalid-%{+YYYY.MM.dd}"
timeout => 600
}
}
}
连接已建立,但 logstash 没有收到任何消息。这种行为的原因是什么?