본문 바로가기

Log

Datadog 로그 지연 시간 확인

먼저 기본적으로 데이터독 로그 에이전트 매커니즘은 아래와 같다. 네트워크 혹은 이슈 발생 시 버퍼에 지연된 로그 인덱스 값을 넣고, 이슈가 해소되면 재전송한다.

https://docs.datadoghq.com/logs/guide/mechanisms-ensure-logs-not-lost/#log-rotate

 

데이터독 로그매니지먼트는 기본적으로 로그의 time 관련 어트리뷰트가 없으면, 로그가 인입되는 시간을 기준으로 DATE를 생성한다.

 

만약 로그에 TIME 관련 스탬프가 있다면 로그파이프라인을 통해 로그의 DATE를 지정할 수 있다.

데이터독은 아직 국내 리전이 없기 때문에 로그의 경우 해외망을 통해 전송된다. 거의 실시간으로 로그가 인입된다고 보면 되지만, 아주 약간의 지연이 발생될 수 있는데 대략 500ms 정도 차이가 난다. 

(네트워크 시간뿐만 아니라 로그를 큐잉 하는 시간도 있어서 로그량이 많은 경우 지연 시간이 더 감소)

 

아무튼 어떤 경우에는 로그 지연시간까지 확인하고 싶은 경우가 있을 수 있다.

 

그 경우에는 로그파이프라인에서 date 리매퍼를 사용하지 않고 데이터독에 실제 인입되는 시간을 DATE로 남게 한다.

 

그리고 데이터독 로그 API를 사용하여 실제 로그가 생성된 시간과 데이터독에 로그가 인입된 시간을 비교할 수 있다.

 

아래와 같은 형식으로 POST 요청을 날리면 json 형식으로 로그들을 받을 수 있다. (5분 전 로그들)

(로그 응답 값을 1,000개 제한)

curl -L -X POST "https://api.datadoghq.com/api/v2/logs/events/search" \
-H "Content-Type: application/json" \
-H "DD-API-KEY: xx" \
-H "DD-APPLICATION-KEY: xx" \
--data-raw \
'{
  "filter": {
  	"from": "now-5m",
  	"to": "now",
    "query": "service:hello-nest"
  },
  "options": {
    "timeOffset": 32400,
    "timezone": "Asia/Seoul"
  }
}'

 

응답값은 아래와 같은 json 형식이며, 데이터독에 로그가 인입된 시간(timestamp)와 실제 로그가 생성된 시간(time)을 비교하면 된다.

 

관리포인트가 생기기 때문에 주기적으로 Lambda를 통해 데이터독 로그 인입 지연 시간을 확인하는 것이 좋을 듯 하다.