로그 이벤트는 특정 이벤트가 발생한 정확한 순간을 알려주는 타임스탬프 속성을 남깁니다. 타임스탬프를 사용하면 특정 기간에 대한 로그를 검색하여 이벤트가 발생한 내용과 시기를 확인할 수 있으므로 이벤트 순서를 지정하는 데 매우 중요합니다.
타임스탬프에는 단일 표준 없이도 다양한 형식이 있습니다. 대부분의 경우 로그 이벤트 시작 부분에 표시되지만 때로는 로그에서 훨씬 나중에 표시되거나 전혀 표시되지 않을 수도 있습니다.
기본적으로 New Relic은 로그가 수집되는 정확한 시간에 로그 timestamp 속성(예약된 키워드) 값을 할당합니다. 이를 수집 시간이라고 합니다.
로그에 timestamp 속성이 없으면 New Relic은 수집 시 타임스탬프를 할당합니다.
JSON 형식의 로그에는 timestamp, log_timestamp, time 등과 같은 타임스탬프를 식별하는 일부 속성이 포함되어 있습니다.
지원되는 타임스탬프 형식이 포함된 JSON 로그를 수신하면 수집 타임스탬프를 JSON 속성으로 재정의합니다.
지원되는 로그 타임스탬프 형식
로그에 포함된 timestamp 값을 할당하기 위해 기본 동작을 수동으로 재정의하는 두 가지 옵션이 있습니다.
지원되는 시간 형식 중 하나로 timestamp 속성이 포함된 JSON 형식 로그를 수신하면 수집 타임스탬프가 재정의됩니다. 대신 JSON 속성의 타임스탬프 값이 사용됩니다.
구문 분석 규칙을 사용하여 수집 timestamp 값을 재정의할 수 있습니다. 구문 분석 규칙을 사용하면 데이터를 추출하여 지원되는 형식 중 하나로 타임스탬프 형식을 지정할 수 있습니다. datetime Grok 유형과 pattern 를 사용하여 로그에 사용자 정의 타임스탬프 형식을 정의할 수도 있습니다.
우리는 두 가지 타임스탬프 형식을 지원합니다.
Unix epoch 타임스탬프는 1970년 1월 1일 00:00:00 UTC 이후 경과된 초(또는 밀리초)를 기반으로 합니다. Fri, 03 Nov 2023 16:06:32 GMT 의 두 가지 예시 형식은 다음과 같습니다.
10자리 에포크초 시간: 1699027592
13자리 에포크 밀리초 시간: 1699027592000
ISO8601 형식은 yyyy-MM-ddTHH:mm:ss.SSSTZD 패턴을 따릅니다(예: 2023-11-07T14:20:35+04:00). 예를 들어:
Key
Value
Example
yyyy-MM-dd
4자리 연도
두 자리 월(1월은 01, 2월은 02 등)
두 자리 일(01-31)
2023-11-03
THH:mm:ss.SSS
T 시간 요소의 시작을 나타냅니다.
두 자리 시간(00 - 23)
두 자리 분(00 - 59)
두 자리 초(00-59)
3자리 밀리초(선택 사항, 처음 3자리만 표시되는 최대 9자리)
T14:20:35
TZD(시간대 지정자)
+ 또는 - 은 시간대가 UTC(Coordinated Universal Timie)보다 얼마나 앞서거나 뒤떨어져 있는지를 나타냅니다. 제공되지 않은 경우 UTC로 간주됩니다.
타임스탬프의 최대 정밀도는 밀리초입니다. 보다 정확하게 표현된 타임스탬프(예: 나노초 또는 마이크로초)는 자동으로 밀리초로 단축됩니다.
JSON 로그에서 지원되는 타임스탬프
timestamp 속성이 포함된 JSON 형식 로그를 수신하면 기본 수집 timestamp 값을 원래 JSON 값으로 재정의합니다. 타임스탬프 필드가 없거나 필드 형식이 잘못된 경우 로그는 수집 타임스탬프와 함께 저장됩니다. 48시간보다 오래된 타임스탬프가 있는 페이로드는 삭제된다는 점에 유의하세요.
타임스탬프는 Unix epoch 밀리초로 변환되고 예약된 키워드 timestamp 를 사용하여 내부적으로 긴 데이터 유형으로 저장됩니다. JSON 본문 형식에 따라 타임스탬프 필드는 네 가지 다른 위치에 할당될 수 있습니다.
하나 이상의 JSON 개체를 보낼 때 JSON 본문 메시지의 세부 속성 집합에 있는 공통 개체 내부입니다. 타임스탬프는 이 JSON의 모든 로그 메시지에 적용됩니다.
하나 이상의 JSON 개체를 보낼 때 JSON 본문 메시지의 세부 속성 집합에 있는 로그 개체의 각 로그 메시지 내부에 있습니다. 타임스탬프는 해당 로그 메시지에만 적용됩니다.
유효한 JSON 메시지인 경우 "메시지" JSON 필드 내부. 우리의
기능은 모든 메시지 속성을 JSON으로 구문 분석합니다. 구문 분석된 메시지의 결과 JSON 속성이 로그에 추가됩니다.
다음은 수집 timestamp 을 재정의하는 유효한 timestamp 속성이 있는 JSON 로그의 몇 가지 예입니다.
epoch 형식(ms 정밀도 없음)의 timestamp 포함된 JSON 로그를 수신하는 경우:
{
"timestamp":1701445572,
"message":"This is my sample JSON log message with timestamp attribute in epoch format"
}
로그에 포함된 epoch timestamp 로 수집 timestamp 을 재정의하고 결과는 다음과 같습니다.
"timestamp":1701445572000,
"message":"This is my sample JSON log message with timestamp attribute in epoch format"
다음과 같이 ISO8601 형식의 타임스탬프가 포함된 JSON 로그를 수신하는 경우:
{
"timestamp":"2023-12-01T15:46:26.607Z",
"message":"This is my sample JSON log message with timestamp attribute in ISO8601 format"
}
로그에 포함된 ISO8601 timestamp (에포크로 변환됨)으로 수집 timestamp 을 재정의하고 결과는 다음과 같습니다.
"timestamp":1701445586607,
"message":"This is my sample JSON log message with timestamp attribute in ISO8601 format"
구문 분석 규칙을 사용하여 로그 타임스탬프 설정
수집 시 구문 분석 규칙을 사용하여 수집 timestamp 을 로그에 포함된 값으로 재정의할 수 있습니다. 구문 분석 규칙은 간단한 Grok 표현식을 사용하거나 datetime Grok 유형 및 pattern 를 사용하여 로그에 사용자 정의 타임스탬프 형식을 정의하여 지원되는 시간 형식을 추출합니다.
표현식으로 추출된 속성 이름은 timestamp 이어야 하며 해당 데이터 유형은 문자열 또는 long이어야 합니다. 데이터 유형이 제공되지 않으면 타임스탬프의 기본값은 문자열입니다. 마이크로초 또는 나노초 정밀도의 에포크 타임스탬프의 경우 타임스탬프 정밀도가 밀리초로 단축되더라도 long 데이터 유형을 포함해야 합니다.
로그의 타임스탬프가 Unix epoch 또는 ISO8601 형식의 타임스탬프인 경우 기본 Grok 패턴을 사용하여 일치시킬 수 있습니다. 예를 들어:
Unix 에포크 타임스탬프를 추출하려면 NUMBER, NOTSPACE, DATA 또는 GREEDYDATA 와 같이 값과 일치하는 표현식을 사용할 수 있습니다.
ISO8601 형식의 타임스탬프를 추출하려면 TIMESTAMP_ISO8601 Grok 표현식을 사용해야 합니다.
datetime Grok 유형을 사용하여 지원되지 않는 형식의 타임스탬프를 구문 분석할 수 있습니다. 이렇게 하려면 로그 타임스탬프 형식과 일치하는 pattern 와 함께 datetime Grok 유형을 포함해야 합니다. pattern 은(는) 여기에 있는 Java 단순 날짜 및 시간 패턴을 사용해야 합니다. 다음은 Grok 표현식이 지원되지 않는 타임스탬프 형식을 지원되는 형식으로 변환하는 방법을 보여주는 예입니다.