프로메테우스 공식 레퍼런스를 한글로 번역한 문서입니다.
전체 목차는 여기에 있습니다.
프로메테우스는 2.16.0 버전부터 엔진이 실행하는 모든 쿼리를 로그 파일에 기록하는 기능을 제공한다. 이 가이드에선 이 로그 파일을 이용하는 방법과 함께 로그에 담겨 있는 필드들을 설명하고, 로그 파일을 운영하기 위한 고급 팁을 제공한다.
목차
- Enable the query log
- Verifying if the query log is enabled
- Format of the query log
- Rotating the query log
Enable the query log
쿼리 로그는 런타임에 끄고 킬 수 있다. 따라서 프로메테우스 인스턴스의 속도가 느려지거나 부하가 커졌을 때 활성화해서 원인을 찾아갈 수 있다.
쿼리 로그를 활성화하거나 비활성화할 때는 두 단계가 필요하다:
- 쿼리 로그 설정을 추가하거나 제거하는 식으로 설정을 조정한다.
- 프로메테우스 서버 설정을 다시 로드한다.
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"
}
params
: 쿼리. 시작/종료 타임스탬프, 스텝, 실제 쿼리 문을 포함하고 있다.stats
: 통계. 현재는 내부 엔진 타이머가 담겨 있다.ts
: 쿼리가 종료된 시간을 나타내는 타임스탬프.
이 외에도 어떻게 요청을 트리거했는지에 따라 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
도커 스웜 서비스 디스커버리 가이드
전체 목차는 여기에 있습니다.