Добавление значения Dynami c (даты) в customFields LogstashEncoder - PullRequest
0 голосов
/ 03 марта 2020

Во-первых, просто чтобы дать некоторое представление об архитектуре:

  • В Кубернетесе работает несколько микросервисов, и две команды управляют этими службами.
  • Существует один кластер эластичного поиска, в который помещаются все журналы из Kubernetes.
  • Обе команды имеют разные имена индексов (например, logsta sh -team1, logsta sh -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 дней без добавления даты в имени индекса?

1 Ответ

1 голос
/ 04 марта 2020

Чтобы указать поле JSON со значением Dynami c, которое включает дату, вы можете использовать провайдера 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>

...