Ken
CHC의 모니터링 및 비용 데이터를 프로그래매틱하게 활용하는 방법을 다룹니다.
- ClickHouse Cloud 메트릭과 제공 정보의 이해
- 제공 방식 개요
- 제공 데이터 및 API 접근 방법
- 1. Cloud REST API
- API Key 생성 방법
- Rate Limits 및 제약사항
- 2. Billing API 상세
- Endpoint 1: GET /organizations/{organizationId}/billing
- Endpoint 2: GET /organizations/{organizationId}/usageCost
- Endpoint 3: GET /organizations/{organizationId}/services
- 3. Prometheus Metrics API
- Organization 레벨 메트릭
- Service 레벨 메트릭 (필터링)
- 4. System Tables 접근
- 접근 방법 1: ClickHouse MCP Server (AI 활용)
- 접근 방법 2: clickhouse-client (CLI)
- 주요 System Tables 쿼리 예시
- 사용 방법과 필요한 정보
- 필수 정보 체크리스트
- Organization ID 조회 방법
- Service ID 및 Endpoint 조회
- API 조합 활용 방안
- 1. 비용-리소스 통합 분석
- 2. Prometheus + Grafana 모니터링
- 3. AI 기반 비용 분석 (Claude + MCP)
- 4. 비용 최적화 워크플로우
- 5. Multi-Cloud 비용 통합
- 참고 자료
- 공식 문서
- 테스트 저장소
- 정리
ClickHouse Cloud 메트릭과 제공 정보의 이해
ClickHouse Cloud(CHC)는 관리형 서비스로서 사용자가 인프라를 직접 관리할 필요가 없지만, 비용 최적화와 성능 모니터링을 위해서는 시스템 상태를 파악할 수 있어야 합니다. CHC는 이를 위해 세 가지 주요 방식으로 메트릭과 정보를 제공합니다.
제공 방식 개요
참고 문서:
- CHC API 공식 문서
- OpenAPI Specification
- Swagger UI
제공 데이터 및 API 접근 방법
1. Cloud REST API
API Key 생성 방법
공식 가이드: Managing API Keys
Step 1: ClickHouse Cloud Console → Settings → API Keys
Step 2: New API Key 생성
설정 항목 | 권장값 | 설명 |
API key name | billing-monitor | 용도 설명 |
Expiration date | 1년 후 | 최대 1년까지 설정 가능 |
Organization role | Developer | 읽기 전용 (Billing, Metrics 조회) |
Admin | 쓰기 권한 (Service 생성/삭제) | |
Access scope | All services | 모든 서비스 접근 |
Specific services | 특정 서비스만 | |
Allow access from | Anywhere | IP 제한 없음 |
Specific IPs | IP 화이트리스트 |
Step 3: Key ID와 Secret 저장
API Key 포맷:
(실제 키 값은 아닙니다.)
Key ID: K8xY2mNp9qRsT
Secret: vW3zAb5cDe7fGh9iJk1lMn2oP3qR
Full Key: K8xY2mNp9qRsT:vW3zAb5cDe7fGh9iJk1lMn2oP3qR
보안 주의사항:
- Secret은 생성 시 한 번만 표시됨
- 분실 시 재생성 필요
- 환경 변수나 Secret Manager에 안전하게 보관
- Git 저장소에 절대 커밋하지 말 것
Rate Limits 및 제약사항
공식 문서: API Rate Limits
항목 | 제한 | 비고 |
API Keys / Organization | 100개 | 초과시 support 문의 |
Requests / 10초 | 10회 | API Key당 |
Billing API 조회 기간 | 제한 없음 | UsageCost는 최대 31일 |
Rate Limit 초과시 Response:
{
"status": 429,
"error": "Too Many Requests",
"message": "Rate limit exceeded. Please retry after 10 seconds."
}
2. Billing API 상세
Endpoint 1: GET /organizations/{organizationId}/billing
공식 문서: Billing API Reference
Full URL:
https://api.clickhouse.cloud/v1/organizations/{organizationId}/billing?startDate=YYYY-MM-DD&endDate=YYYY-MM-DD
Request Parameters:
Parameter | Type | Required | Format | Example |
startDate | string | Yes | YYYY-MM-DD | 2025-11-01 |
endDate | string | Yes | YYYY-MM-DD | 2025-11-30 |
Request 예시:
curl -X GET \
'https://api.clickhouse.cloud/v1/organizations/9142daed-a43f-455a-a112-f721d02b80af/billing?startDate=2025-11-28&endDate=2025-11-30' \
-H 'Authorization: Bearer YOUR_KEY:YOUR_SECRET'
Response 예시 (실제 데이터 - Seoul 서비스):
Response 필드 설명:
필드 | 타입 | 설명 | 단위 |
date | string | 비용 발생일 | YYYY-MM-DD |
serviceId | string | 서비스 고유 ID | UUID |
serviceName | string | 서비스 이름 | - |
totalCredits | float | 전체 비용 | CHC (1 CHC ≈ $1) |
computeCredits | float | Compute 비용 | CHC |
storageCredits | float | Storage 비용 | CHC |
networkCredits | float | Network 비용 | CHC |
데이터 해석 예시 (위 결과 기준):
- 11/28: 높은 비용 (120 CHC) - 대량 작업 추정
- 11/29: 중간 비용 (34.58 CHC) - 정상 운영
- 11/30: 낮은 비용 (10.09 CHC) - 낮은 활동 또는 부분 집계
Endpoint 2: GET /organizations/{organizationId}/usageCost
공식 문서: UsageCost API
특징:
- Billing API보다 상세한 breakdown
- 최대 조회 기간: 31일
- ClickPipes 비용 포함
Request 예시:
curl -X GET \
'https://api.clickhouse.cloud/v1/organizations/9142daed-a43f-455a-a112-f721d02b80af/usageCost?startDate=2025-11-30&endDate=2025-11-30' \
-H 'Authorization: Bearer YOUR_KEY:YOUR_SECRET'
Response 예시:
상세 메트릭 설명:
메트릭 | 설명 | 과금 기준 |
computeCHC | Compute 리소스 | CPU cores × Memory GB × 사용 시간 |
storageCHC | 데이터 저장 | 저장 데이터 크기 (압축 후) × 시간 |
backupCHC | 백업 저장 | 백업 데이터 크기 × 시간 |
dataTransferCHC | Private 데이터 전송 | Private Link 사용시 |
publicDataTransferCHC | Public 인터넷 전송 | Public endpoint 사용시 |
initialLoadCHC | 초기 데이터 로드 | ClickPipes 등 초기 로드 |
interRegionTier1-4DataTransferCHC | Cross-region 전송 | Region 간 거리별 차등 과금 |
Endpoint 3: GET /organizations/{organizationId}/services
공식 문서: Services API Reference
Request 예시:
curl -X GET \
'https://api.clickhouse.cloud/v1/organizations/9142daed-a43f-455a-a112-f721d02b80af/services' \
-H 'Authorization: Bearer YOUR_KEY:YOUR_SECRET'
Response 예시:
3. Prometheus Metrics API
공식 문서: Prometheus Integration
Organization 레벨 메트릭
Endpoint:
GET /organizations/{organizationId}/prometheus
Request 예시:
curl -X GET \
'https://api.clickhouse.cloud/v1/organizations/9142daed-a43f-455a-a112-f721d02b80af/prometheus' \
-H 'Authorization: Bearer YOUR_KEY:YOUR_SECRET'
Response 예시 (Prometheus Text Format):
Service 레벨 메트릭 (필터링)
Endpoint:
GET /organizations/{organizationId}/services/{serviceId}/prometheus?metrics=METRIC1,METRIC2
Request 예시:
curl -X GET \
'https://api.clickhouse.cloud/v1/organizations/9142daed-a43f-455a-a112-f721d02b80af/services/c5ccc996-e105-4f61-aa12-4769ea485f7f/prometheus?metrics=LoadAverage1,OSMemoryAvailable,Query' \
-H 'Authorization: Bearer YOUR_KEY:YOUR_SECRET'
Response 예시:
주요 제공 메트릭 목록:
System Resource Metrics:
CGroupUserTimeNormalized,CGroupSystemTimeNormalized- CPU (cores)CGroupMaxCPU- 할당된 최대 CPULoadAverage1,LoadAverage5,LoadAverage15- 시스템 부하OSMemoryTotal,OSMemoryAvailable- 메모리 (bytes)OSMemoryBuffers,OSMemoryCached- 메모리 상세FilesystemMainPathTotalBytes,FilesystemMainPathUsedBytes- 디스크 (bytes)OSProcessesRunning- 실행 중인 프로세스 수
Query Metrics:
Query- 전체 쿼리 수SelectQuery,InsertQuery- SELECT/INSERT 쿼리 수FailedQuery- 실패한 쿼리 수QueryTimeMicroseconds- 총 쿼리 실행 시간 (누적)
Storage Metrics:
PartsActive- 활성 데이터 파트PartsOutdated- 비활성 파트Merge- Merge 작업 수MergedRows- Merge된 총 행 수BackgroundPoolTaskActive- Background task 수
Network Metrics:
NetworkReceiveBytes,NetworkSendBytes- 네트워크 I/O (bytes, 누적)
4. System Tables 접근
공식 문서: System Tables Overview
접근 방법 1: ClickHouse MCP Server (AI 활용)
MCP 서버 설정: ClickHouse MCP Server
Claude Desktop 설정 (claude_desktop_config.json):
{
"mcpServers": {
"clickhouse-seoul": {
"command": "npx",
"args": [
"-y",
"@clickhouse/mcp-server-clickhouse",
"https://c5ccc996-e105-4f61-aa12-4769ea485f7f.ap-northeast-2.aws.clickhouse.cloud:8443",
"default",
"your-password"
]
}
}
}
Claude와 대화로 조회:
User: "최근 1시간 CPU와 Memory 사용률을 조회해줘"
Claude (AI): [자동으로 MCP를 통해 쿼리 실행]
실제 실행된 쿼리:
실제 결과 (Seoul 서비스, 2025-11-30 11:00-12:00):
metric | avg_value | min_value | max_value | sample_count |
CGroupMaxCPU | 2.0000 | 2.0000 | 2.0000 | 3,598 |
CGroupSystemTimeNormalized | 0.0218 | 0.0000 | 0.1150 | 3,598 |
CGroupUserTimeNormalized | 0.0461 | 0.0000 | 0.9900 | 3,598 |
LoadAverage1 | 0.8678 | 0.2400 | 2.6400 | 3,598 |
OSMemoryAvailable | 239,522,418,444 | 237,684,142,080 | 239,839,502,336 | 3,598 |
OSMemoryTotal | 264,540,573,696 | 264,540,573,696 | 264,540,573,696 | 3,598 |
데이터 해석:
- CPU 사용량: 0.0461 + 0.0218 = 0.0679 cores (2 cores 중 3.4%)
- Memory 사용량: (264.5GB - 239.5GB) ÷ 1024³ = 25 GB (9.5%)
- 피크 CPU: 0.99 cores (49.5%)
- Sample 수: 약 3,600개 (1초당 1개 × 3,600초)
접근 방법 2: clickhouse-client (CLI)
공식 문서: clickhouse-client
연결 예시:
clickhouse-client \
--host c5ccc996-e105-4f61-aa12-4769ea485f7f.ap-northeast-2.aws.clickhouse.cloud \
--port 9440 \
--secure \
--user default \
--password YOUR_PASSWORD \
--query "SELECT version()"
출력:
25.8.1.8702
주요 System Tables 쿼리 예시
1. asynchronous_metric_log - 실시간 리소스 메트릭
공식 문서: asynchronous_metric_log
쿼리:
실제 결과 (Seoul 서비스, 2025-11-30 11:15-11:24):
timestamp | cpu_cores_used | memory_used_gb | load_1m |
2025-11-30 11:24:00 | 0.0516 | 24.24 | 0.69 |
2025-11-30 11:23:00 | 0.0635 | 24.23 | 0.60 |
2025-11-30 11:22:00 | 0.0763 | 24.19 | 0.53 |
2025-11-30 11:21:00 | 0.0642 | 24.11 | 0.62 |
2025-11-30 11:20:00 | 0.0617 | 23.31 | 0.88 |
2025-11-30 11:19:00 | 0.0567 | 23.19 | 0.52 |
2025-11-30 11:18:00 | 0.0655 | 23.21 | 0.60 |
2025-11-30 11:17:00 | 0.0706 | 23.23 | 0.71 |
2025-11-30 11:16:00 | 0.0582 | 23.22 | 0.75 |
2025-11-30 11:15:00 | 0.0696 | 23.20 | 0.77 |
2. query_log - 쿼리 실행 이력
공식 문서: query_log
쿼리:
실제 결과 (Seoul 서비스, 최근 1시간):
type | query_count | avg_duration_ms | p99_duration_ms | total_read | total_written |
QueryFinish | 3,000 | 115.65 | 6,423.03 | 6.95 GiB | 313.07 MiB |
ExceptionWhileProcessing | 0 | - | - | 0.00 B | 0.00 B |
3. parts - Storage 파트 정보
공식 문서: parts
쿼리:
SELECT
sum(rows) as total_rows,
formatReadableSize(sum(bytes_on_disk)) as total_size_on_disk,
formatReadableSize(sum(data_uncompressed_bytes)) as total_size_uncompressed,
count() as active_parts,
round(sum(bytes_on_disk) / sum(data_uncompressed_bytes) * 100, 2) as compression_ratio_pct
FROM system.parts
WHERE active = 1
실제 결과 (Seoul 서비스):
total_rows | total_size_on_disk | total_size_uncompressed | active_parts | compression_ratio_pct |
954,791,498 | 42.30 GiB | 385.67 GiB | 833 | 10.97 |
해석:
- 압축률: 10.97% (약 9.1배 압축)
- Active Parts: 833개 (적정 수준)
- 총 데이터: 약 9.5억 행
4. part_log - Merge 작업 이력
공식 문서: part_log
쿼리:
SELECT
event_type,
count() as event_count
FROM system.part_log
WHERE event_time >= now() - INTERVAL 24 HOUR
GROUP BY event_type
ORDER BY event_count DESC
실제 결과 (Seoul 서비스, 최근 24시간):
event_type | event_count |
RemovePart | 143,005 |
DownloadPart | 94,233 |
NewPart | 29,375 |
MergeParts | 19,430 |
5. metric_log - Network I/O 통계
공식 문서: metric_log
쿼리:
SELECT
formatReadableSize(sum(ProfileEvent_NetworkReceiveBytes)) as network_rx,
formatReadableSize(sum(ProfileEvent_NetworkSendBytes)) as network_tx,
formatReadableSize(sum(ProfileEvent_NetworkReceiveBytes) +
sum(ProfileEvent_NetworkSendBytes)) as total_network_io
FROM system.metric_log
WHERE event_time >= now() - INTERVAL 1 HOUR
실제 결과 (Seoul 서비스, 최근 1시간):
network_rx | network_tx | total_network_io |
183.30 MiB | 1.35 GiB | 1.53 GiB |
6. processes - 현재 실행 중인 쿼리
공식 문서: processes
쿼리:
SELECT
query_id,
user,
elapsed as seconds_running,
formatReadableSize(memory_usage) as memory,
substring(query, 1, 100) as query_preview
FROM system.processes
ORDER BY elapsed DESC
LIMIT 5
실제 결과 (Seoul 서비스, 조회 시점):
query_id | user | seconds_running | memory | query_preview |
88fa8c9b-b432-4ab0-a276-8a1bd54482ce | default | 0.001205 | 4.13 MiB | SELECT query_id, user, elapsed as seconds_running, formatReadableSize(memory_usage) as memory... |
사용 방법과 필요한 정보
필수 정보 체크리스트
API 사용을 위해 필요한 정보:
Cloud API 사용시:
- ✅ API Key (Key ID + Secret)
- ✅ Organization ID
- ✅ Service ID (서비스별 조회시)
System Tables 사용시:
- ✅ Service Endpoint (Host)
- ✅ Port (HTTPS: 8443, Native: 9440)
- ✅ Username (기본값: default)
- ✅ Password
Organization ID 조회 방법
Endpoint:
GET https://api.clickhouse.cloud/v1/organizations
Request:
curl -X GET 'https://api.clickhouse.cloud/v1/organizations' \
-H 'Authorization: Bearer YOUR_KEY:YOUR_SECRET'
Response:
{
"result": [
{
"id": "9142daed-a43f-455a-a112-f721d02b80af",
"name": "My Organization",
"createdAt": "2024-06-15T08:30:00Z"
}
]
}
Service ID 및 Endpoint 조회
Request:
curl -X GET \
'https://api.clickhouse.cloud/v1/organizations/9142daed-a43f-455a-a112-f721d02b80af/services' \
-H 'Authorization: Bearer YOUR_KEY:YOUR_SECRET'
Response (핵심 정보만 발췌):
API 조합 활용 방안
1. 비용-리소스 통합 분석
목적: Billing API의 비용 데이터와 System Tables의 리소스 사용률을 결합하여 효율성 분석
활용 시나리오:
- 비용 효율성 분석: 할당 대비 실제 사용률 계산
- 낭비 비용 탐지: Idle 시간대 비용 낭비 측정
- 쿼리당/GB당 비용: 워크로드별 비용 최적화
- 이상 비용 탐지: 평소 대비 급등한 비용 Alert
2. Prometheus + Grafana 모니터링
목적: Prometheus API를 Grafana에 연동하여 실시간 대시보드 구축
데이터 플로우:
- Grafana → Prometheus API 1분마다 scrape
- Prometheus 포맷 파싱 → Grafana time-series 변환
- 대시보드 패널에 실시간 표시
주요 메트릭:
- CPU 사용률 트렌드
- Memory 사용률 트렌드
- 쿼리 처리량 (QPS)
- Storage 증가 추이
참고: Grafana Prometheus Data Source
3. AI 기반 비용 분석 (Claude + MCP)
목적: AI를 활용하여 자연어로 비용 및 메트릭 분석
활용 예시:
사용자: "지난 주 서울 서비스의 비용 급등 원인을 분석해줘"
Claude (AI 자동 분석):
daily_billing테이블에서 지난 주 비용 조회query_log에서 쿼리 패턴 분석asynchronous_metric_log에서 리소스 사용 추이 확인- 비용 급등 시점과 쿼리/리소스 패턴 상관관계 분석
- 자연어로 원인 설명 및 권장사항 제시
장점:
- SQL 작성 불필요
- 복잡한 다중 테이블 조인 자동 처리
- 인사이트 자동 도출
- 대화형 심화 분석 가능
4. 비용 최적화 워크플로우
목적: API를 조합하여 자동화된 비용 최적화
워크플로우:
- Billing API → 일별 비용 수집 → ClickHouse 저장
- System Tables → 시간별 리소스 사용률 수집
- 분석 → 효율성 계산, 낭비 비용 측정
- Alert → 비정상 패턴 감지시 Slack 알림
- Auto-scaling → 효율성 기준 자동 Scale 조정
5. Multi-Cloud 비용 통합
목적: CHC 비용을 AWS, GCP, Azure 비용과 통합 관리
데이터 통합:
- CHC Billing API → ClickHouse 저장
- AWS Cost Explorer API → ClickHouse 저장
- GCP Billing Export → BigQuery → ClickHouse 복제
- 단일 대시보드에서 통합 분석
활용:
- 전체 Cloud 비용 중 CHC 비중 파악
- 서비스별 인프라 비용 배분
- Cross-cloud 비용 최적화 기회 발견
참고 자료
공식 문서
API 관련:
- ClickHouse Cloud API Overview
- API Authentication
- OpenAPI Specification
- Swagger UI Documentation
Billing & Cost:
- Billing API Announcement
- CHC Pricing
- Understanding CHC Credits
Prometheus Integration:
- Prometheus Monitoring
- Prometheus API Reference
System Tables:
- System Tables Overview
- asynchronous_metric_log
- metric_log
- query_log
- parts
- part_log
ClickHouse MCP Server:
- MCP Server GitHub
- Model Context Protocol
테스트 저장소
실제 CHC API 테스트 코드 및 예시:
clickhouse-hols/chc-api-test at main · litkhai/clickhouse-hols
ClickHouse Hands-on Labs . Contribute to litkhai/clickhouse-hols development by creating an account on GitHub.
github.com
정리
ClickHouse Cloud는 세 가지 방식으로 메트릭을 제공합니다:
1. Cloud REST API
- 일별 비용 데이터 (Billing/UsageCost)
- 서비스 관리 및 상태 조회
- Organization 레벨 인증
- 주 사용처: FinOps, 비용 분석, 자동화
2. Prometheus Metrics API
- 1분 간격 시스템 메트릭
- Prometheus 포맷 표준
- Grafana 등 모니터링 도구 연동
- 주 사용처: 실시간 모니터링, Alerting
3. System Tables
- 초 단위 상세 메트릭
- SQL로 자유로운 분석
- 1000+ 메트릭 제공
- 주 사용처: 성능 튜닝, 디버깅, 심화 분석
이 세 가지를 조합하면 비용 최적화, 성능 모니터링, 이상 탐지 등 다양한 use case를 구현할 수 있습니다.