Prometheus로 모니터링하기
prometheus.yml 예시
출처: 문서
본문
lakeFS는 lakeFS 서비스가 사용하는 포트와 동일한 포트에서 표준 /metrics 경로로 메트릭을 노출해요.
예시는 다음과 같아요:
prometheus.yml
scrape_configs:
- job_name: lakeFS
scrape_interval: 10s
metrics_path: /metrics
static_configs:
- targets:
- lakefs.example.com:8000
lakeFS가 노출하는 메트릭
기본적으로 Prometheus는 메모리와 CPU 같은 OS 프로세스 정보를 메트릭으로 내보내요. GC 세부 사항과 고루틴 수 같은 Go 고유 메트릭도 포함돼요. 이러한 기본 메트릭은 이 글에서 배울 수 있어요.
그 외에 lakeFS는 배포 모니터링에 도움이 되도록 다음 메트릭을 노출해요:
| Name in Prometheus | Description | Labels |
|---|---|---|
| api_requests_total | lakeFS API 요청 (counter) | code: http statusmethod: http method |
| lakefs_concurrent_requests | lakeFS가 처리 중인 동시 요청 수 (gauge) | service: "api" 또는 "gateway"operation: 연산 이름 |
| api_request_duration_seconds | lakeFS API 요청의 소요 시간 (histogram) | operation: API 연산 이름code: http status |
| gateway_request_duration_seconds | lakeFS S3 호환 엔드포인트 요청 (histogram) | operation: 게이트웨이 연산 이름code: http status |
| blockstore_concurrent_operations | 동시 블록스토어 연산 수 (gauge) | operation: 블록스토어 연산 이름blockstore_type: 블록스토어 유형 (s3, gs, azure 등) |
| s3_operation_duration_seconds | 외부로 나가는 S3 연산 (histogram) | operation: 연산 이름error: 오류면 "true", 아니면 "false" |
| gs_operation_duration_seconds | 외부로 나가는 Google Storage 연산 (histogram) | operation: 연산 이름error: 오류면 "true", 아니면 "false" |
| azure_operation_duration_seconds | 외부로 나가는 Azure 스토리지 연산 (histogram) | operation: 연산 이름error: 오류면 "true", 아니면 "false" |
| kv_request_duration_seconds | KV 요청의 소요 시간 (histogram) | operation: KV 연산 이름type: KV 유형 (dynamodb, postgres 등) |
| dynamo_request_duration_seconds | DynamoDB 요청에 소요된 시간 | operation: DynamoDB 연산 이름 |
| dynamo_consumed_capacity_total | 연산이 소비한 용량 단위 | operation: DynamoDB 연산 이름 |
| dynamo_failures_total | KV 스토어 작업 중 발생한 총 오류 수 | operation: DynamoDB 연산 이름 |
| pgxpool_acquire_count | PostgreSQL 풀에서 성공적으로 획득한 누적 횟수 | db_name 기본값은 kv 테이블 이름 (kv) |
| pgxpool_acquire_duration_ns | PostgreSQL 풀에서 성공적으로 획득한 전체 누적 시간(나노초) | db_name 기본값은 kv 테이블 이름 (kv) |
| pgxpool_acquired_conns | PostgreSQL 풀에서 현재 획득 중인 연결 수 | db_name 기본값은 kv 테이블 이름 (kv) |
| pgxpool_canceled_acquire_count | PostgreSQL 풀에서 컨텍스트에 의해 취소된 획득 누적 횟수 | db_name 기본값은 kv 테이블 이름 (kv) |
| pgxpool_constructing_conns | PostgreSQL 풀에서 생성 중인 연결 수 | db_name 기본값은 kv 테이블 이름 (kv) |
| pgxpool_empty_acquire | 풀이 비어 있어 자원이 해제되거나 생성되기를 기다린 성공 획득 누적 횟수 | db_name 기본값은 kv 테이블 이름 (kv) |
| pgxpool_idle_conns | PostgreSQL 풀에서 현재 유휴 상태인 연결 수 | db_name 기본값은 kv 테이블 이름 (kv) |
| pgxpool_max_conns | PostgreSQL 풀의 최대 크기 | db_name 기본값은 kv 테이블 이름 (kv) |
| pgxpool_total_conns | PostgreSQL 풀에 현재 있는 전체 자원 수 | db_name 기본값은 kv 테이블 이름 (kv) |
쿼리 예시
Note
rate나 increase 같은 Prometheus 함수를 사용하면 결과가 외삽되어 정확하지 않을 수 있어요.
API 요청 레이턴시의 99퍼센타일
sum by (operation)(histogram_quantile(0.99, rate(api_request_duration_seconds_bucket[1m])))
S3 호환 API 레이턴시의 50퍼센타일
sum by (operation)(histogram_quantile(0.5, rate(gateway_request_duration_seconds_bucket[1m])))
외부로 나가는 S3 요청의 오류 수
sum by (operation) (increase(s3_operation_duration_seconds_count{error="true"}[1m]))
데이터베이스에 대한 열린 연결 수
go_sql_stats_connections_open
Grafana 대시보드 예시
더 알아보기 (Learn more)
공식 문서의 모니터링 페이지는 https://docs.lakefs.io/admin/monitoring 에서 확인할 수 있어요.