[Logstash] timestamp의 unixtime 파싱은 어떻게 하죠?

devhans·2023년 4월 10일
0

Logstash

목록 보기
2/3
post-thumbnail

작성 배경

Logstash는 비정형화된 데이터를 마음대로 정형화 할 수 있습니다.
그러나 Logstash로 시간필드를 unixtimestamp로 만드려고 할 때 ms단위를 마음대로 빼고 파싱하는 등 불편한 경우가 생깁니다.
저의 경우엔 자주 부딪혔던 문제인데 막상 해당 문제에 대해 다룬 글을 찾기가 어려웠어서 다른 분들은 그런 일이 없길 바라면서 정리해두려 합니다.

조작 방법

임의의 시간 형식 -> iso8601형태로 정규화 -> ruby 필터를 통해 unixtimestamp(ms)로 파싱

임의의 시간 형식 -> iso8601

filter {
  if [boarding_time] {
    date {
      match => ["boarding_time", "yyyyMMddHHmmss"]
      target => "@boarding_timestamp"
    }
  }

결과

{
        "boarding_time" => "20221022223057",
        "@boarding_timestamp"    =>  "2022-10-22T22:30:57.000Z"
}

iso8601 -> unix_timestamp

ruby 로 timestamp를 가져와 정수형으로 바꾸면 unix_timestamp로 변환 되지만, second 단위까지만 파싱이 됩니다. ms 단위까지 파싱하기 위해서는 아래와 같이 작성하면 됩니다.

filter {
  ruby {
    code => '
      timestamp =  event.get("@timestamp") 
      timestamp_str = timestamp.to_s
      ms = timestamp_str[-4..-2].to_i 
             event.set("@unix_timestamp", timestamp.to_i * 1000 + ms)
    '
  }
}

결과

{
        "@timestamp" => 2023-04-10T04:28:20.923Z,
    "@unix_timstamp" => 1681100900923
}
profile
책 읽고 운동하기

0개의 댓글

Powered by GraphCDN, the GraphQL CDN