💡 logfmt는 간단하고 사람이 읽기 쉬운 로그 포맷으로 키-값 쌍으로 데이터를 표현하며, 로그 데이터의 구조화를 통해 분석과 디버깅을 보다 쉽게 해준다.
예를 들어, 다음과 같은 로그가 존재할 때,
2024-10-2617:55:26.617 [http-nio-8080-exec-1] [traceId=32fc2f61-675a-4cd1-aee6-22fbd5990c49]
INFO c.s.t.g.c.aop.HttpLoggingAspect -
HTTP Request: HTTPMethod=GET Path=/test3 from IP=0:0:0:0:0:0:0:1
key=value형태로 된 데이터를 모두 뽑아 필드로 만들어낸다.
위의 예시의 경우 다음의 필드가 추출된다.
[traceId=5cb495e-008a-4265-87c7-003afd886736]
HTTPMethod=GET
Path=/test2
IP=0:0:0:0:0:0:0:1
이는 띄어쓰기를 기준으로 엄격하게 추출된다.
여기서 엄격이라는 단어를 쓴 이유는 ‘[traceId=5cb495e-008a-4265-87c7-003afd886736]’에서는 ‘traceId=5cb495e-008a-4265-87c7-003afd886736’처럼 대괄호가 제거 되어야 할 것 같은데 붙어있다는 이유로 함께 추출된다.
LogQL에서 logfmt를 통해 추출된 필드를 사용하려면 쿼리에 다음과 같이 logfmt를 추가하면 된다.
{job="logs"} | logfmt | HTTPMethod = `GET`
이렇게 되면 logfmt로 추출된 필드인 HTTPMethod를 통해 쿼리를 실행시킬 수 있다.
💡Promtail은 Grafana Loki와 함께 사용되는 로그 수집기 도구로, 시스템 로그를 수집하고 Loki에 전달하여 검색하고 시각화할 수 있도록 해준다. Promtail의 주요 기능 중 하나는 로그에 라벨을 추가하여 라벨링하는 것으로, 이를 통해 로그 데이터를 더 쉽게 필터링하고 분석할 수 있다. Loki가 라벨을 기준으로 로그 데이터를 인덱싱하기 때문에 쿼리 속도가 빨라지고, 특정 라벨 값에 따라 로그를 필터링할 수 있어 검색 효율성이 증가한다.
다음 두 가지 종류의 로그 메시지가 있다고 가정해보자.
1. HTTP Request 요청 정보
2024-10-2617:55:26.617 [http-nio-8080-exec-1] [traceId=32fc2f61-675a-4cd1-aee6-22fbd5990c49]
INFO c.s.t.g.c.aop.HttpLoggingAspect -
HTTP Request: HTTPMethod=GET Path=/test3 from IP=0:0:0:0:0:0:0:1
2. HTTP Request 실행 시간
2024-10-2617:55:26.617 [http-nio-8080-exec-1] [traceId=32fc2f61-675a-4cd1-aee6-22fbd5990c49]
INFO c.s.t.g.c.aop.HttpLoggingAspect -
HTTP Execution: Path=/test3 ExecutionTime=0ms
Promtail에서는 다음과 같이 라벨링을 할 수 있다.
다음은 Promtail의 설정파일에 해당하는 config.yml의 일부이다.
pipeline_stages:# traceId 추출 (모든 로그에서 추출 가능)-regex:expression:'\\[traceId=(?P<traceId>[^\\]]+)\\]'# HTTP Request 관련 라벨 추출 (HTTP Request 메시지에서만 추출)-regex:expression:'HTTPMethod=(?P<HTTPMethod>[A-Z]+) Path=(?P<Path>/\\S+) from IP=(?P<IP>[0-9a-fA-F:]+)'# ExecutionTime 추출 (ExecutionTime이 있는 메시지에서만 추출)-regex:expression:'ExecutionTime=(?P<ExecutionTime>\\d+ms)'# 라벨 설정-labels:traceId:traceIdHTTPMethod:HTTPMethodPath:PathIP:IPExecutionTime:ExecutionTime
💡 logfmt는 간단하고 사람이 읽기 쉬운 로그 포맷으로 키-값 쌍으로 데이터를 표현하며, 로그 데이터의 구조화를 통해 분석과 디버깅을 보다 쉽게 해준다.
예를 들어, 다음과 같은 로그가 존재할 때,
2024-10-2617:55:26.617 [http-nio-8080-exec-1] [traceId=32fc2f61-675a-4cd1-aee6-22fbd5990c49]
INFO c.s.t.g.c.aop.HttpLoggingAspect -
HTTP Request: HTTPMethod=GET Path=/test3 from IP=0:0:0:0:0:0:0:1
key=value형태로 된 데이터를 모두 뽑아 필드로 만들어낸다.
위의 예시의 경우 다음의 필드가 추출된다.
[traceId=5cb495e-008a-4265-87c7-003afd886736]
HTTPMethod=GET
Path=/test2
IP=0:0:0:0:0:0:0:1
이는 띄어쓰기를 기준으로 엄격하게 추출된다.
여기서 엄격이라는 단어를 쓴 이유는 ‘[traceId=5cb495e-008a-4265-87c7-003afd886736]’에서는 ‘traceId=5cb495e-008a-4265-87c7-003afd886736’처럼 대괄호가 제거 되어야 할 것 같은데 붙어있다는 이유로 함께 추출된다.
LogQL에서 logfmt를 통해 추출된 필드를 사용하려면 쿼리에 다음과 같이 logfmt를 추가하면 된다.
{job="logs"} | logfmt | HTTPMethod = `GET`
이렇게 되면 logfmt로 추출된 필드인 HTTPMethod를 통해 쿼리를 실행시킬 수 있다.
💡Promtail은 Grafana Loki와 함께 사용되는 로그 수집기 도구로, 시스템 로그를 수집하고 Loki에 전달하여 검색하고 시각화할 수 있도록 해준다. Promtail의 주요 기능 중 하나는 로그에 라벨을 추가하여 라벨링하는 것으로, 이를 통해 로그 데이터를 더 쉽게 필터링하고 분석할 수 있다. Loki가 라벨을 기준으로 로그 데이터를 인덱싱하기 때문에 쿼리 속도가 빨라지고, 특정 라벨 값에 따라 로그를 필터링할 수 있어 검색 효율성이 증가한다.
다음 두 가지 종류의 로그 메시지가 있다고 가정해보자.
1. HTTP Request 요청 정보
2024-10-2617:55:26.617 [http-nio-8080-exec-1] [traceId=32fc2f61-675a-4cd1-aee6-22fbd5990c49]
INFO c.s.t.g.c.aop.HttpLoggingAspect -
HTTP Request: HTTPMethod=GET Path=/test3 from IP=0:0:0:0:0:0:0:1
2. HTTP Request 실행 시간
2024-10-2617:55:26.617 [http-nio-8080-exec-1] [traceId=32fc2f61-675a-4cd1-aee6-22fbd5990c49]
INFO c.s.t.g.c.aop.HttpLoggingAspect -
HTTP Execution: Path=/test3 ExecutionTime=0ms
Promtail에서는 다음과 같이 라벨링을 할 수 있다.
다음은 Promtail의 설정파일에 해당하는 config.yml의 일부이다.
pipeline_stages:# traceId 추출 (모든 로그에서 추출 가능)-regex:expression:'\\[traceId=(?P<traceId>[^\\]]+)\\]'# HTTP Request 관련 라벨 추출 (HTTP Request 메시지에서만 추출)-regex:expression:'HTTPMethod=(?P<HTTPMethod>[A-Z]+) Path=(?P<Path>/\\S+) from IP=(?P<IP>[0-9a-fA-F:]+)'# ExecutionTime 추출 (ExecutionTime이 있는 메시지에서만 추출)-regex:expression:'ExecutionTime=(?P<ExecutionTime>\\d+ms)'# 라벨 설정-labels:traceId:traceIdHTTPMethod:HTTPMethodPath:PathIP:IPExecutionTime:ExecutionTime