쿼리 로깅

쿼리 로깅 (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)