ClickHouse 모니터링
모든 참고 문서를 확인했습니다. 종합적인 답변을 작성하겠습니다.
exemONE ClickHouse 모니터링 상세 가이드
1. 지원 버전
참고 문서: ClickHouse 모니터링 지원 버전, DB Agent 지원 환경
| 항목 | 버전 |
|---|---|
| exemONE | v3.0.507 이후 지원 |
| ClickHouse | v24.8.6.70 지원 |
- exemONE v3.0.507 이상 버전이 설치되어 있어야 ClickHouse 모니터링이 가능합니다.
- Cloud 모니터링 지원 표에 ClickHouse는 포함되어 있지 않으므로 On-Premise 환경에서의 사용을 기본으로 합니다.
2. 필수 권한
참고 문서: ClickHouse 모니터링 권한
필요 권한
- SELECT, KILL QUERY
권한 부여 SQL
모니터링 계정에 아래 system 테이블에 대한 SELECT 권한을 부여해야 합니다:
grant select on system.events to monitor_user;
grant select on system.merges to monitor_user;
grant select on system.metrics to monitor_user;
grant select on system.mutations to monitor_user;
grant select on system.parts to monitor_user;
grant select on system.part_log to monitor_user;
grant select on system.processes to monitor_user;
grant select on system.query_log to monitor_user;
grant select on system.replicas to monitor_user;
grant select on system.clusters to monitor_user;
grant select on system.text_log to monitor_user;
grant select on system.disks to monitor_user;
grant select on system.distribution_queue to monitor_user;
권한별 용도 요약
| 대상 테이블 | 용도 |
|---|---|
system.events | 서버 이벤트 통계 (OverflowBreak 등) 수집 |
system.merges | 병합(Merge) 이벤트 모니터링 |
system.metrics | 인스턴스 성능 지표 수집 |
system.mutations | Mutation 작업 모니터링 |
system.parts | Part Activity 데이터 수집 |
system.part_log | Part Log 이력 조회 |
system.processes | Active Process 모니터링 |
system.query_log | Query Log 조회 |
system.replicas | 복제 상태 모니터링 |
system.clusters | 클러스터 정보 조회 |
system.text_log | Text Log 조회 |
system.disks | Disk 정보 수집 |
system.distribution_queue | 분산 큐 상태 수집 |
| KILL QUERY | Active Process에서 세션(쿼리) 종료 기능 |
3. 인스턴스 디테일 데이터 확인 방법
참고 문서: Instance Detail Slide - ClickHouse, ClickHouse 인스턴스 디테일 데이터 확인
ClickHouse 인스턴스를 선택하면 13개 탭을 통해 상세 모니터링이 가능합니다.
(1) Information

| 항목 | 내용 |
|---|---|
| Agent | Instance Name, Status, Instance Group Name, Agent Version, DB Engine, DB Version, Last Boot Time, Uptime |
| Disk | Disk Name, Path, Disk Usage(%), Free, Total Size |
| Machine | Host Name, Host IP, OS, Kernel Version |
(2) Metric

- Default로 최근 5분 데이터를 표시하며, ClickHouse 인스턴스 지표를 모니터링합니다.
- Overflow Break 지표 확인 시,
system.events테이블의 OverflowBreak 이벤트 수가 있어야 수집이 가능합니다.
데이터 발생 확인 방법:
-- 1. 설정
SET max_rows_to_group_by = 100000;
SET group_by_overflow_mode = 'break';
-- 2. overflow 발생 쿼리 실행
SELECT number, count()
FROM system.numbers
GROUP BY number;
-- 3. 이벤트 조회
SELECT event, value
FROM system.events
WHERE event LIKE '%OverflowBreak%';

(3) Active Process

실행 중인 Active Process 목록을 실시간으로 확인합니다.
| 기능 | 설명 |
|---|---|
| Multi Kill | Grid에서 행을 체크한 후 활성화되며, 실행 중인 Query를 종료 |
| Get | Active Process List 데이터를 가져옴 |
| Filter | Or/And 조건으로 목록 필터링 |
주요 수집 항목: User, Current Database, Address, Port, Elapsed Time, Query, Memory Usage, Peak Memory Usage, Read Rows, Read Bytes, Written Rows, Written Bytes, Query Kind 등
(4) Query Log

Top Query Log List를 조회합니다. 합계/평균 토글 전환이 가능합니다.
주요 수집 항목: Hostname, Current Database, User, Normalized Query Hash, Query, Query Duration, Query Count, CPU Time, Memory Usage, Read Rows, Read Bytes, Result Rows, Result Bytes
(5) Part Activity

테이블별 Part 사용 현황을 확인합니다.
주요 수집 항목: Database, Table, Engine, Active Parts, Inactive Parts, Active Part on Disk
(6) Part Log

Part Log 이력을 조회합니다. config.xml에서 Part Log 설정이 활성화되어야 데이터 수집이 가능합니다.

Part Log 활성화 후 데이터 발생 테스트:
-- 테스트 확인용 테이블 생성
CREATE TABLE test_part_log (id UInt64, val String)
ENGINE = MergeTree()
ORDER BY id;
-- 데이터 삽입
INSERT INTO test_part_log VALUES (1, 'a'), (2, 'b');
-- system.part_log 테이블 데이터 조회 확인
SELECT * FROM system.part_log ORDER BY event_time DESC LIMIT 10;

주요 수집 항목: Event Type (NewPart, MergeParts, DownloadPart, RemovePart, MutatePart, MovePart 등), Merge Reason, Merge Algorithm, Duration, Rows, Size in Bytes 등
(7) Merge Event

병합 이벤트를 실시간 모니터링합니다. Group By 사용 및 합계/평균 토글 전환이 가능합니다.
병합 이벤트 발생 테스트:
-- 테스트용 테이블 생성
CREATE TABLE large_merge_test (
event_time DateTime,
data String
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(event_time)
ORDER BY (event_time);
-- 데이터 삽입
INSERT INTO large_merge_test
SELECT now() + number, concat('data_', toString(rand()), '_', toString(rand()))
FROM system.numbers LIMIT 1000000;
-- OPTIMIZE 쿼리 실행
OPTIMIZE TABLE large_merge_test FINAL;
-- 병합 진행 여부 확인
SELECT count() FROM system.merges WHERE table = 'large_merge_test';

주요 수집 항목: Database, Table, Source Part Names, Result Part Name, Elapsed Time, Progress(%), Num Parts, Memory Usage, Is Mutation 등
(8) Mutation

Mutation(변이) 작업 현황을 실시간 모니터링합니다.
뮤테이션 발생 테스트:
-- 테이블 생성 및 데이터 삽입
CREATE TABLE test_mutation (id UInt64, name String) ENGINE = MergeTree() ORDER BY id;
INSERT INTO test_mutation VALUES (1, 'a'), (2, 'b'), (3, 'c');
-- Update를 통한 뮤테이션 발생
ALTER TABLE test_mutation UPDATE name = 'updated' WHERE id = 2;

주요 수집 항목: Mutation ID, Command, Create Time, Parts To Do, Is Done, Is Killed, Latest Failed Part, Latest Fail Reason 등
(9) Replication

복제 상태를 모니터링합니다. 이상 상태인 Replica Info만 필터링하는 토글 기능을 제공합니다.
- Cluster 환경 (clickhouse-0, clickhouse-1 등 replica + zookeeper)이 구성되어 있어야 합니다.
- 비정상적인 상태인 경우에만 목록에 표시됩니다.

주요 수집 항목: Is Leader, Can Become Leader, Zookeeper Path, Queue Size, Merges in Queue, Absolute Delay, Total Replicas, Active Replicas, Lost Part Count 등
(10) Text Log

ClickHouse 내부 Text Log를 조회합니다. 현재 로그 조회 또는 특정 시간 선택 조회가 가능하며, Line 수를 지정하여 추가 조회할 수 있습니다.
주요 수집 항목: Level, Event Time Microseconds, Thread Name, Query ID, Logger Name, Message
(11) Alert

알람 규칙 목록과 최근 발생 Alert 상태를 List View 또는 Bar View 형태로 확인합니다. 현재 발생 중인 Alert만 필터링하는 체크박스를 제공합니다.
(12) Parameter

ClickHouse 인스턴스의 Parameter 목록을 조회합니다. 불러온 시각이 함께 표시됩니다.
(13) Host Process List

DB 서버의 프로세스 목록을 실시간 모니터링합니다. 해당 DB 서버에 Host Agent가 설정되어 있어야 데이터 모니터링이 가능합니다.
주요 수집 항목: PID, PPID, Process Name, Args, User Name, Start Time, CPU(%), Virtual Memory, Real Memory
4. 추가 주의사항
- exemONE v3.0.507 이상이 설치되어 있어야 ClickHouse 모니터링이 가능합니다. 이전 버전에서는 ClickHouse를 지원하지 않습니다.
- Part Log 데이터를 확인하려면 ClickHouse의
config.xml파일에서 Part Log 설정을 활성화해야 하며, 설정 변경 후 ClickHouse 재시작이 필요합니다. - Replication 탭의 복제 상태 정보는 비정상적인 상태인 경우에만 목록에 표시되므로, 정상 상태에서는 빈 목록이 나타날 수 있습니다. Cluster 환경(replica + zookeeper)이 구성되어 있어야 합니다.
- Host Process List 탭은 해당 DB 서버에 Host Agent가 설치 및 설정되어 있어야 데이터를 확인할 수 있습니다.
- KILL QUERY 권한은 Active Process 탭의 Multi Kill 기능을 사용하기 위해 필요하며, 이 기능이 불필요한 경우 SELECT 권한만으로도 기본 모니터링은 가능합니다.
- Cloud 환경에서의 ClickHouse 모니터링은 별도 지원이 확인되지 않으므로, On-Premise 환경을 기본으로 합니다.