在customFields LogstashEncoder中添加动态值(日期)



首先,只是为了深入了解架构:

  • Kubernetes中运行着几个微服务,由两个团队管理这些服务
  • 有一个单独的弹性搜索集群,所有来自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天后删除日志,而不在索引名称中添加日期?

要指定一个具有包含日期的动态值的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>

相关内容

  • 没有找到相关文章

最新更新