GraphiteMergeTree 테이블 엔진
이 엔진은 Graphite 데이터의 희소화(thinning)와 집계/평균화(rollup)를 위해 설계되었습니다. Graphite의 데이터 저장소로 ClickHouse를 사용하려는 개발자에게 유용할 수 있습니다.
rollup이 필요하지 않다면 Graphite 데이터를 저장하기 위해 어떤 ClickHouse 테이블 엔진이든 사용할 수 있지만, rollup이 필요하다면 GraphiteMergeTree를 사용하십시오. 이 엔진은 저장 공간 사용량을 줄이고 Graphite에서 실행되는 쿼리의 효율을 높입니다.
이 엔진은 MergeTree의 특성을 상속합니다.
테이블 생성
CREATE TABLE 쿼리에 대한 자세한 설명은 해당 문서를 참조하십시오.
Graphite 데이터용 테이블에는 다음 데이터에 대해 아래와 같은 컬럼이 있어야 합니다:
-
메트릭 이름(Graphite 센서). 데이터 타입:
String. -
메트릭을 측정한 시간. 데이터 타입:
DateTime. -
메트릭 값. 데이터 타입:
Float64. -
메트릭 버전. 데이터 타입: 임의의 숫자형(ClickHouse는 버전이 가장 높거나, 버전이 동일한 경우 가장 마지막에 기록된 행을 저장합니다. 다른 행은 데이터 파트 병합 중에 삭제됩니다).
이러한 컬럼의 이름은 롤업(rollup) 설정에서 지정해야 합니다.
GraphiteMergeTree 파라미터
config_section— 롤업 규칙이 정의된 설정 파일의 섹션 이름입니다.
쿼리 절
GraphiteMergeTree 테이블을 생성할 때는 MergeTree 테이블을 생성할 때와 동일한 절(clauses)이 필요합니다.
더 이상 사용되지 않는 테이블 생성 방법
새로운 프로젝트에서는 이 방식을 사용하지 말고, 가능하다면 기존 프로젝트도 위에서 설명한 방식으로 전환하십시오.
config_section을 제외한 모든 파라미터는 MergeTree에서와 동일한 의미를 가집니다.
config_section— 롤업 규칙이 정의된 설정 파일의 섹션 이름입니다.
롤업 구성
롤업에 대한 설정은 서버 구성의 graphite_rollup 파라미터로 정의합니다. 파라미터 이름은 임의로 지정할 수 있습니다. 여러 개의 구성을 만들어 서로 다른 테이블에 사용할 수 있습니다.
롤업 구성 구조:
required-columns patterns
필수 컬럼
path_column_name
path_column_name — 메트릭 이름(Graphite 센서)을 저장하는 컬럼 이름입니다. 기본값: Path.
time_column_name
time_column_name — 메트릭이 측정된 시간을 저장하는 컬럼 이름입니다. 기본값: Time.
value_column_name
value_column_name — time_column_name에 설정된 시점의 메트릭 값을 저장하는 컬럼 이름입니다. 기본값: Value.
version_column_name
version_column_name — 메트릭 버전을 저장하는 컬럼 이름입니다. 기본값: Timestamp.
Patterns
patterns 섹션의 구조:
패턴은 다음 순서를 엄격하게 지켜야 합니다:
function또는retention이 없는 패턴.function과retention이 모두 있는 패턴.default패턴.
행을 처리할 때 ClickHouse는 pattern 섹션의 규칙을 확인합니다. 각 pattern 섹션(default 포함)에는 집계를 위한 function 매개변수, retention 매개변수 또는 둘 다를 포함할 수 있습니다. 메트릭 이름이 regexp와 일치하면 해당 pattern 섹션(또는 여러 섹션)의 규칙이 적용되고, 그렇지 않으면 default 섹션의 규칙이 사용됩니다.
pattern 및 default 섹션의 필드:
rule_type- 규칙의 유형입니다. 특정 메트릭에만 적용됩니다. 엔진은 이를 사용하여 일반 메트릭과 태그된 메트릭을 구분합니다. 선택적 매개변수입니다. 기본값:all. 성능이 중요하지 않거나, 예를 들어 일반 메트릭처럼 단일 메트릭 유형만 사용하는 경우에는 설정하지 않아도 됩니다. 기본적으로 하나의 규칙 집합만 생성됩니다. 반면 특수 유형이 하나라도 정의되면 두 개의 서로 다른 집합이 생성됩니다. 하나는 일반 메트릭(root.branch.leaf)용이고, 다른 하나는 태그된 메트릭(root.branch.leaf;tag1=value1)용입니다. 기본 규칙은 두 집합 모두에 포함됩니다. 유효한 값:all(기본값) -rule_type이 생략되었을 때 사용되는 범용 규칙입니다.plain- 일반 메트릭용 규칙입니다.regexp필드는 정규 표현식으로 처리됩니다.tagged- 태그된 메트릭용 규칙입니다(메트릭은 DB에someName?tag1=value1&tag2=value2&tag3=value3형식으로 저장됨). 정규 표현식은 태그 이름순으로 정렬되어 있어야 하며, 존재하는 경우 첫 번째 태그는__name__이어야 합니다.regexp필드는 정규 표현식으로 처리됩니다.tag_list- 태그된 메트릭용 규칙으로, graphite 형식someName;tag1=value1;tag2=value2,someName, 또는tag1=value1;tag2=value2에서 메트릭을 더 쉽게 기술하기 위한 단순 DSL입니다.regexp필드는tagged규칙으로 변환됩니다. 태그 이름순 정렬은 필요 없으며 자동으로 수행됩니다. 태그의 이름이 아니라 값은 정규 표현식으로 설정할 수 있습니다(예:env=(dev|staging)).
regexp– 메트릭 이름에 대한 패턴(정규 표현식 또는 DSL)입니다.age– 데이터의 최소 보관 기간(초 단위)입니다.precision– 데이터의 나이를 초 단위로 얼마나 세밀하게 구분할지 나타냅니다. 86400(하루의 초 수)의 약수여야 합니다.function– 나이가[age, age + precision]범위에 속하는 데이터에 적용할 집계 함수의 이름입니다. 사용 가능한 함수: min / max / any / avg. 평균(avg)은 평균들의 평균처럼, 다소 부정확하게 계산됩니다.
규칙 유형이 없는 구성 예시
규칙 유형별 구성 예시
데이터 롤업은 머지 작업 중에 수행됩니다. 일반적으로 오래된 파티션에 대해서는 머지가 수행되지 않으므로, 롤업을 위해서는 optimize를 사용하여 비정기 머지 작업을 수동으로 트리거해야 합니다. 또는 graphite-ch-optimizer와 같은 별도의 도구를 사용할 수도 있습니다.