간단한 파이프라인 설정.
filter { mutate { remove_field => [ "@timestamp", "@version", "path", "host" ] } dissect { mapping => { "message" => "%{timestamp} %{+timestamp} %{}" } } date { match => [ "timestamp", "yyyy-MM-dd HH:mm:ss" ] remove_field => "timestamp" }}
[2021-02-07T17:12:25,494][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}{ "message" => "2021-01-10 00:00:00 data1\r", "@timestamp" => 2021-01-09T15:00:00.000Z}{ "message" => "2021-01-11 00:00:00 data2\r", "@timestamp" => 2021-01-10T15:00:00.000Z}{ "message" => "2021-01-12 00:00:00 data3\r", "@timestamp" => 2021-01-11T15:00:00.000Z}
다음은 날짜별로 인덱스를 저장하는 파이프라인 설정.
output { stdout {} elasticsearch { hosts => "http://192.168.56.2" index => "test-%{+yyMMdd}" }}
발생 날짜별로 인덱스를 나누려고 했는데 인덱스 이름에 포함된 날짜 역시 하루씩 당겨져있다.
하지만 시계열 분석은 문제 없음.
키바나가 웹브라우저의 timezone으로 시간을 다시 계산해주기 때문.
인덱스 이름이 거슬린다면?
date 플러그인의 timezon 옵션을 사용하면 된다. 다음은 세계표준시인 UTC를 timezone으로 지정한 파이프라인.
filter { mutate { remove_field => [ "@timestamp", "@version", "path", "host" ] } dissect { mapping => { "message" => "%{timestamp} %{+timestamp} %{}" } } date { match => [ "timestamp", "yyyy-MM-dd HH:mm:ss" ] timezone => "UTC" remove_field => "timestamp" }}
다음은 실행 결과. @timestamp가 원본 시간 정보와 같아졌다.
[2021-02-07T17:30:01,675][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}{ "message" => "2021-01-10 00:00:00 data1\r", "@timestamp" => 2021-01-10T00:00:00.000Z}{ "message" => "2021-01-11 00:00:00 data2\r", "@timestamp" => 2021-01-11T00:00:00.000Z}{ "message" => "2021-01-12 00:00:00 data3\r", "@timestamp" => 2021-01-12T00:00:00.000Z}
인덱스 이름도 원했던대로 원본 데이터가 발생한 날짜별로 만들어짐.
하지만 시계열 분석을 시도하면 시간이 원본보다 9시간 느리게 표시된다.
키바나가 UTC를 한국 시간대로 다시 계산하는 과정에서 9시간을 더해버린 것. 시간 정보를 올바르게 표시하려면 키바나의 timezone 역시 UTC로 바꿔주면 된다.
관련 글
댓글 없음:
댓글 쓰기