토리맘의 한글라이즈 프로젝트 logo 토리맘의 한글라이즈 프로젝트

프로메테우스 공식 레퍼런스를 한글로 번역한 문서입니다.

전체 목차는 여기에 있습니다.


프로메테우스는 2.16.0 버전부터 엔진이 실행하는 모든 쿼리를 로그 파일에 기록하는 기능을 제공한다. 이 가이드에선 이 로그 파일을 이용하는 방법과 함께 로그에 담겨 있는 필드들을 설명하고, 로그 파일을 운영하기 위한 고급 팁을 제공한다.

목차


Enable the query log

쿼리 로그는 런타임에 끄고 킬 수 있다. 따라서 프로메테우스 인스턴스의 속도가 느려지거나 부하가 커졌을 때 활성화해서 원인을 찾아갈 수 있다.

쿼리 로그를 활성화하거나 비활성화할 때는 두 단계가 필요하다:

  1. 쿼리 로그 설정을 추가하거나 제거하는 식으로 설정을 조정한다.
  2. 프로메테우스 서버 설정을 다시 로드한다.

Logging all the queries to a file

이 예시에선 /prometheus/query.log라는 파일에 모든 쿼리를 기록해본다. /prometheus는 데이터 디렉토리로, 프로메테우스가 이 경로에 대한 쓰기 권한을 가지고 있다고 가정한다.

먼저 설정 파일 prometheus.yml을 변경한다:

global:
  scrape_interval:     15s
  evaluation_interval: 15s
  query_log_file: /prometheus/query.log
scrape_configs:
- job_name: 'prometheus'
  static_configs:
  - targets: ['localhost:9090']

그 다음 프로메테우스 설정을 리로드한다:

$ curl -X POST http://127.0.0.1:9090/-/reload

아니면 프로메테우스를 --web.enable-lifecycle로 기동하지 않았거나, Windows에서 실행하지 않을 땐 프로메테우스 프로세스에 SIGHUP을 전송해도 리로드를 트리거할 수 있다.

이제 /prometheus/query.log 파일이 생겨나고, 모든 쿼리가 이 파일에 기록되고 있을 거다.

쿼리 로그를 비활성화하려면 설정에서 query_log_file을 제거하고 다시 한번 리로드해라.


Verifying if the query log is enabled

프로메테우스는 쿼리 로그를 활성화했고 동작하고 있는지 여부를 나타내는 메트릭을 노출해주기 때문에 간편하게 검증해볼 수 있다:

# HELP prometheus_engine_query_log_enabled State of the query log.
# TYPE prometheus_engine_query_log_enabled gauge
prometheus_engine_query_log_enabled 0
# HELP prometheus_engine_query_log_failures_total The number of query log failures.
# TYPE prometheus_engine_query_log_failures_total counter
prometheus_engine_query_log_failures_total 0

첫 번째 메트릭 prometheus_engine_query_log_enabled는 쿼리 로그가 활성화됐다면 1로, 그 외에는 0으로 설정된다. 두 번째 메트릭 prometheus_engine_query_log_failures_total은 로그를 남길 수 없었던 쿼리 수를 나타낸다.


Format of the query log

쿼리 로그는 JSON 형식을 사용한다. 다음은 쿼리에서 사용하는 필드를 개략적으로 나타낸 예시다:

{
    "params": {
        "end": "2020-02-08T14:59:50.368Z",
        "query": "up == 0",
        "start": "2020-02-08T13:59:50.368Z",
        "step": 5
    },
    "stats": {
        "timings": {
            "evalTotalTime": 0.000447452,
            "execQueueTime": 7.599e-06,
            "execTotalTime": 0.000461232,
            "innerEvalTime": 0.000427033,
            "queryPreparationTime": 1.4177e-05,
            "resultSortTime": 6.48e-07
        }
    },
    "ts": "2020-02-08T14:59:50.387Z"
}

이 외에도 어떻게 요청을 트리거했는지에 따라 JSON 라인에 다른 필드들이 보일 수도 있다.

API Queries and consoles

HTTP 요청에는 클라이언트 IP, 메소드, 경로가 담겨있다:

{
    "httpRequest": {
        "clientIP": "127.0.0.1",
        "method": "GET",
        "path": "/api/v1/query_range"
    }
}

웹 프리픽스를 설정했다면 경로에도 포함되며 있으며, 콘솔을 가리킬 수도 있다.

클라이언트 IP는 네트워크 IP 주소이며 X-Forwarded-For같은 헤더들은 고려하지 않는다. 프록시 뒤에 있는 원래 호출자를 기록하고 싶다면 프록시 자체에서 로그를 남겨야 한다.

Recording rules and alerts

Recording rule과 alert에선 파일 경로와 그룹 이름을 가지고 있는 ruleGroup이 담겨있다:

{
    "ruleGroup": {
        "file": "rules.yml",
        "name": "partners"
    }
}

Rotating the query log

프로메테우스는 자체적으로 쿼리 로그를 rotate시키지 않는다. 대신 외부 툴을 이용하면 된다.

관련 툴 중에는 logrotate가 있다. Linux 배포판 대부분에선 기본적으로 활성화돼 있다.

다음은 /etc/logrotate.d/prometheus로 추가할 수 있는 파일 예시다:

/prometheus/query.log {
    daily
    rotate 7
    compress
    delaycompress
    postrotate
        killall -HUP prometheus
    endscript
}

이렇게 설정해주면 파일을 매일 rotate시키며 일주일 치 로그를 유지한다.


Next :
Docker Swarm
도커 스웜 서비스 디스커버리 가이드

전체 목차는 여기에 있습니다.

<< >>

TOP