ELK에서 Logstash로 저장 시 시간 데이터가 US 시간으로 저장되는 문제 해결

1. 문제 발생

Logstash에서 now를 이용해 시간 데이터를 저장할 때, 기본적으로 미국(US) 시간대로 저장되는 문제가 발생했다. 이는 Kibana에서 데이터를 조회할 때 예상과 다른 시간 값이 표시되는 원인이 되었다.

 

2. 문제 원인

  • Logstash의 기본 타임존(Timezone)이 UTC로 설정되어 있음
    • Logstash는 시간 데이터를 UTC 기준으로 처리하며, 명시적으로 타임존을 설정하지 않으면 기본적으로 UTC가 적용된다.
    • 따라서 한국(KST)에서 저장한 데이터도 9시간이 빠진 UTC 시간으로 저장된다.
  • Elasticsearch도 기본적으로 UTC를 사용
    • Elasticsearch는 시간 데이터를 ISO 8601 형식으로 저장하며, 별도의 변환 없이 UTC 기준으로 처리한다.
    • Kibana에서 데이터를 조회하면 한국 시간(KST)이 아닌 UTC 기준으로 표시될 수 있다.

 

3. 문제 해결책 수립

해결 방법 비교

해결 방법 설명 장점 단점
Logstash에서 타임존 변환 필터를 적용하여 KST로 변환 후 저장 설정이 간단함 데이터 변환 과정 필요
Elasticsearch의 Ingest Pipeline 사용 Ingest Pipeline에서 타임존을 변환 Elasticsearch에서 직접 처리 가능 추가 설정 필요
Kibana에서 시간대 변환 Kibana 설정을 변경하여 한국 시간으로 표시 기존 데이터 수정 불필요 단순 표시만 변경됨

 

4. 문제 해결: Logstash에서 타임존 변환 적용

(1) Logstash에서 타임존 변환 적용

Logstash의 date 필터를 사용하여 UTC → KST 변환을 수행한다.

filter {
  date {
    match => ["@timestamp", "ISO8601"]
    timezone => "Asia/Seoul"
  }
}
  • @timestamp 필드에 대해 ISO 8601 형식을 매칭하여 KST(한국 표준시)로 변환함.
  • 변환된 데이터는 Elasticsearch에 저장될 때 한국 시간으로 반영됨.

(2) Kibana에서 시간대 설정 변경 (보완책)

Logstash에서 변환하지 못한 데이터가 있을 경우, Kibana 설정에서 시간대를 변경할 수 있다.

  1. Kibana 설정 변경:
    • Management → Advanced Settings → dateFormat:tz 값을 Asia/Seoul로 변경.
    • Kibana에서 UTC 시간을 한국 시간(KST)으로 변환하여 표시한다.

 

5. 결론

  • Logstash의 기본 타임존은 UTC이므로, 한국 시간으로 저장하려면 변환 작업이 필요하다.
  • Logstash의 date 필터를 사용하여 Asia/Seoul로 변환하는 것이 가장 효율적인 방법이다.
  • 추가적으로 Kibana 설정을 변경하면 데이터 표시를 한국 시간으로 맞출 수 있다.
  • 이 방식으로 저장된 시간 데이터는 이후 검색 및 분석 시 혼란 없이 사용할 수 있다.

+ Recent posts