0

最初に、アーキテクチャについての洞察を提供します。

  • Kubernetes ではいくつかのマイクロサービスが実行されており、2 つのチームがそれらのサービスを管理しています。
  • Kubernetes からのすべてのログがプッシュされる単一の elasticsearch クラスターがあります。
  • 両方のチームのインデックス名が異なります (logstash-team1、logstash-team2 など)。

ログバック構成:

    <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 に答える