준호씨의 블로그

logstash timezone convert. KST to UTC 본문

개발이야기

logstash timezone convert. KST to UTC

준호씨 2016.05.29 21:13

logstash 작업을 하다가 받은 요구사항. 요약하면 다음과 같다.
로그에 있는 로그시간을 UTC 로 변경. 포멧은 유지한다.
기존 로그시간의 포멧은 yyyyMMddHHmmss 이며 타임존은 KST 이다.

date 필터
date 필터가 있기에 확인 해 봄.
안되겠음. 특정 필드의 시간 정보를 logstash 의 @timestamp 로 지정하는 기능이기 때문. 좀 더 범용적으로 만들어도 될 텐데 좀 아쉬운 부분이다.

...라고 적었는데 방금 다시 보니 target 이라는 옵션이 있다;; default 가 @timestamp 인데 다른걸 지정하면 되는 것 같다.
물론 output format 은 내가 원하는 것이 적용 되는지는 모르겠다. 이건 이건 다음 기회에.

ruby filter 로 직접 구현
아무튼 date 필터는 이미 사용하지 않고 ruby filter 로 직접 구현해 보았다. 혹시 date filter 에 format 지정 기능이 없다면 아래를 참고 해서 만들어 볼 수도 있을 것 같다.

ruby 에 익숙하지는 않은 편이라 일단 irb 에서 이런 저런 시도를 해 해보았다.

여러가지를 해 본 결과 다음과 같은 결론을 내렸다. 더 좋은 방법이 있으면 추가 해 보아야 겠다.
require 'date'

DateTime.parse('20160523144630+0900').new_offset(0).strftime('%Y%m%d%H%M%S')
기존 시간에 +0900 을 주면 한국 타임존인 +9시간이 적용 된다. 그 상태에서 offset 을 0 으로 지정해 주면 9시간이 빠진다. 그 다음에 %Y%m%d%H%M%S 포멧으로 리턴 해 주면 된다.

위의 코드를 지반으로 logstash filter 수정 해 보았다.
filter {
    ruby {
        code => "event['t'] = DateTime.parse(event['t'] + '+0900').new_offset(0).strftime('%Y%m%d%H%M%S')"
    }
}

볼만한 자료
타임존(TimeZone) 이야기
0 Comments
댓글쓰기 폼