0

首先,只是为了提供一些有关架构的见解:

  • Kubernetes 中有几个微服务在运行,两个团队管理这些服务。
  • 有一个单一的 elasticsearch 集群,来自 Kubernetes 的所有日志都被推送到该集群上。
  • 两个团队都有不同的索引名称(例如,logstash-team1、logstash-team2)

我们的 logback 配置:

    <appender name="STDOUT_JSON" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="net.logstash.logback.encoder.LogstashEncoder">
            <providers>
                <contextName>
                    <fieldName>app</fieldName>
                </contextName>
                <timestamp>
                    <fieldName>timestamp</fieldName>
                    <timeZone>UTC</timeZone>
                </timestamp>
                <loggerName>
                    <fieldName>logger</fieldName>
                </loggerName>
                <logLevel>
                    <fieldName>level</fieldName>
                </logLevel>
                <callerData>
                    <classFieldName>class</classFieldName>
                    <methodFieldName>method</methodFieldName>
                    <lineFieldName>line</lineFieldName>
                    <fileFieldName>file</fileFieldName>
                </callerData>
                <threadName>
                    <fieldName>thread</fieldName>
                </threadName>
                <mdc />
                <arguments>
                    <includeNonStructuredArguments>false</includeNonStructuredArguments>
                </arguments>
                <stackTrace>
                    <fieldName>stack</fieldName>
                </stackTrace>
                <message>
                    <fieldName>message</fieldName>
                </message>
            </providers>
            <customFields>{"esindex": "logstash-team1"}</customFields>
        </encoder>
    </appender>
  • 一切正常,但是 Kibana 上的日志在 30 天后不会被删除。我们认为如果我们在esindex字段中添加日期,它可能会解决问题(可能还有其他解决方案,我不知道)。
  • 所以esindex应该看起来像这样logstash-team1-%d{yyyy-mm-dd}

有没有办法做到这一点?或者有没有办法在 30 天后删除日志,而不在索引名称中附加日期?

4

1 回答 1

1

要使用包含日期的动态值指定 JSON 字段,您可以使用pattern提供程序,如下所示:

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <contextName>
                    <fieldName>app</fieldName>
                </contextName>
                <timestamp>
                    <fieldName>timestamp</fieldName>
                    <timeZone>UTC</timeZone>
                </timestamp>
                ... other providers ...
                <pattern>
                    <pattern>{"esindex": "logstash-team1-%date{yyyy-MM-dd,UTC}"}</pattern>
                </pattern>
            </providers>
        </encoder>
    </appender>

于 2020-03-04T03:48:55.730 回答