[Logstash] 타임스탬프 조작

devhans·2023년 4월 10일
0

Logstash

목록 보기
1/1
post-thumbnail

작성 배경

Ruby의 time객체와 Logstash의 time객체가 다름

로그스태시는 비정형화된 데이터를 마음대로 정형화 할 수 있습니다.
그러나 로그스태시로 의외로 시간필드를 조작하려고 할 때 Rubytime객체와
Logstashtime객체가 달라 난감한 상황을 맞이하는 경우가 종종 생깁니다.

조작 방법

원하는 형태로 가공하기 위해서는 그냥 문자열 형태로 파싱해서 다시 계산해주는게 가장 편리합니다.
오늘은 그 중 @timestamp필드에 iso8601형태로 들어온 값을 unix_timestamp로 변경할 것입니다.

만약 @timestamp의 값을 파싱하여 @unix_timestamp 필드를 추가하려면 다음 conf처럼 작성하면 됩니다.

input{
# 원하는 input 선택하여 작성
}
filter {
  mutate {
    add_field => {"@temp" => "%{@timestamp}"}
    convert => {"@temp" => "string"}
  }
  ruby {
    code => "temp = event.get('@temp')[-4..-2].to_i
             event.set('@unix_timestamp', event.get('@timestamp').to_i * 1000 + temp)"
    remove_field => ["@temp"]
  }
}
output{
# 원하는 output 선택하여 작성
# 현재는 결과를 찍기 위하여 stdout으로 작성
    if 1==1{ stdout { codec => rubydebug { metadata => true } }}

}
  if [boarding_time] {
    date {
      match => ["boarding_time", "yyyyMMddHHmmss"]
      target => "@tmp_boarding_time"
      add_field=> {"@boarding_time" => ""}
    }
    ruby {
      code => "event.set('@boarding_time', event.get('@tmp_boarding_time').to_i)"
      remove_field => ["@tmp_boarding_time"]
    }
  }

결과

{
        "@timestamp" => 2023-04-10T04:28:20.923Z,
    "@unix_timstamp" => 1681100900923
}
{
        "boarding_time": "20221022223057",
        "@boarding_time": 1569900034,
}
profile
책 읽고 운동하는 개발자

0개의 댓글