쿼리 로깅
쿼리 로깅 (Query logging)
이 문서는 Prometheus 서버가 처리한 모든 쿼리를 로그로 남기는 쿼리 로깅(query logging) 기능을 설명해요. --query.log-file 커맨드라인 플래그를 지정하면, Prometheus가 받는 모든 쿼리(사용자 쿼리, 알림 규칙, 기록 규칙 등)를 JSON 형식 로그로 기록하여 쿼리 병목이나 과도한 쿼리를 진단하는 데 도움이 됩니다.
주로 어떤 쿼리가 느리거나 비싼지, 누가(어떤 규칙이) 많은 쿼리를 발생시키는지 분석하고 싶을 때 유용해요. 다만 로그 파일이 빠르게 커질 수 있으므로 로그 로테이션을 함께 고려해야 합니다.
출처: 문서
본문
Prometheus는 쿼리 로깅을 지원합니다. Prometheus 서버에 도달하는 모든 쿼리를 로그로 기록하도록 --query.log-file 플래그로 로그 파일 경로를 지정합니다:
prometheus --query.log-file=/var/log/prometheus/query.log
이 옵션을 활성화하면 Prometheus가 수신하는 각 쿼리에 대해 다음 정보를 포함한 JSON 로그 라인을 기록합니다:
- 쿼리가 실행된 경로(예:
/api/v1/query, 알림 규칙, 기록 규칙). - 쿼리 표현식.
- 실행에 걸린 시간과 반환된 시계열 수.
- 원격 클라이언트 정보.
- 쿼리 타임아웃·컨텍스트.
샘플 로그 라인(형식의 예):
{"level":"info","ts":"2024-01-01T00:00:00Z","caller":"query_logger.go:80","msg":"logged query","query":"up","query_time":1.5,"result_count":100,"path":"/api/v1/query"}
로그 파일 관리
- 쿼리 로그는 로테이션되지 않으므로,
logrotate같은 외부 도구로 로테이션·압축·보존 정책을 적용하는 것이 좋습니다. - 파일을 회전시킬 때는 Prometheus가 새 파일(또는 심볼릭 링크)을 계속 쓰도록 설정을 조정해야 합니다.
- 로그가 커지면 디스크를 채울 수 있으므로 크기 제한과 보존 기간을 정하세요.
활용 예
쿼리 로그를 분석하면:
- 느린 쿼리(쿼리 시간이 오래 걸린 항목)를 찾아 최적화할 수 있습니다.
- 과도한 쿼리를 발생시키는 알림 규칙이나 기록 규칙을 파악할 수 있습니다.
- API를 통해 들어오는 많은 쿼리를 감지해 캐싱 전략을 세울 수 있습니다.
promtool과 같은 도구나 jq를 사용해 로그 파일을 파싱하면 통계를 쉽게 낼 수 있습니다.
더 알아보기 (Learn more)
- Prometheus 커맨드라인 플래그 —
--query.log-file등 전체 플래그 - promtool — 쿼리·규칙 디버깅 도구
- 기록 규칙 — 쿼리 비용 줄이기
- 알림 규칙 — 알림 규칙의 쿼리 동작