最初に、アーキテクチャについての洞察を提供します。
- 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 日後にログを削除する方法はありますか?