[Elasticsearch] Date Format & Logback Timestamp Format

Elastic/Elasticsearch 2021. 10. 6. 12:18

Elasticsearch 에서 data field 를 이용해서 range 질의를 하기 위해서는 format 을 잘 맞춰 줘야 합니다.

Springboot 로 개발 한 WAS 에서 로그를 JSON 으로 찍으면서 timestamp 값에 대한 format 기 위한 설정에 대해서 기록 합니다.

 

참고문서)

https://www.elastic.co/guide/en/elasticsearch/reference/current/date.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html
http://logback.qos.ch/manual/layouts.html

 

Logback Timestamp Format & JSON 설정)

https://jjeong.tistory.com/1570

  <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
      <layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
        <timestampFormat>yyyy-MM-dd'T'HH:mm:ss.SSS'Z'</timestampFormat>
        <timestampFormatTimezoneId>Asia/Seoul</timestampFormatTimezoneId>
        <appendLineSeparator>true</appendLineSeparator>
        <jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
          <prettyPrint>true</prettyPrint>
        </jsonFormatter>
      </layout>
    </encoder>
  </appender>

 

Timestamp Formet Index)

{
  "mappings": {
    "properties": {
      "timestamp": {
        "type":   "date",
        "format": "strict_date_optional_time||epoch_millis",
        "ignore_malformed": true
      }
    }
  }
}

위 foramt 설정은 별도로 하지 않아도 기본 설정 됩니다.

 

Document Put)

{
    "timestamp" : "2021-10-06T11:33:46.855Z"
}

Range Query )

[Case 1]
{
    "query": {
        "range" : {
            "ts": {
                "gte": "2021-10-06T11:33:36.000Z",
                "lte": "2021-10-06T11:34:38.000Z"
            }
        }
    }
}

[Case 2]
{
    "query": {
        "range" : {
            "ts": {
                "gte": "2021-10-06 11:33:36.000",
                "lte": "2021-10-06 11:34:38.000",
                "format": "yyyy-MM-dd HH:mm:ss.SSS"
            }
        }
    }
}

결국 입력 값이 정확 하면 질의 시 format 을 지정해서 편하게 검색이 가능 합니다.

 

: