1

我将在 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 没有收到任何消息。这种行为的原因是什么?

4

0 回答 0