このエンジンは、Graphite データの間引きと集約/平均化 (ロールアップ) 向けに設計されています。ClickHouse を Graphite のデータストアとして使用したい開発者にとって有用です。
ロールアップが不要であれば、Graphite データの保存には任意の ClickHouse テーブルエンジンを使用できますが、ロールアップが必要な場合は GraphiteMergeTree を使用してください。このエンジンにより、ストレージ使用量を削減し、Graphite からのクエリ効率を向上させることができます。
このエンジンは MergeTree の特性を継承します。
テーブルの作成
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
Path String,
Time DateTime,
Value Float64,
Version <Numeric_type>
...
) ENGINE = GraphiteMergeTree(config_section)
[PARTITION BY expr]
[ORDER BY expr]
[SAMPLE BY expr]
[SETTINGS name=value, ...]詳細については、CREATE TABLEクエリの説明を参照してください。
Graphite データ用のテーブルには、次のデータに対応する以下のカラムが必要です。
-
メトリック名 (Graphite sensor) 。データ型:
String。 -
メトリックの計測時刻。データ型:
DateTime。 -
メトリックの値。データ型:
Float64。 -
メトリックのバージョン。データ型: 任意の数値型 (ClickHouse は、バージョンが最も高い行を保持し、バージョンが同じ場合は最後に書き込まれた行を保持します。その他の行はデータパーツのマージ時に削除されます) 。
これらのカラム名はロールアップ設定で指定する必要があります。
GraphiteMergeTree のパラメータ
config_section— ロールアップルールが設定されている設定ファイル内のセクション名。
クエリ句
GraphiteMergeTree テーブルを作成する際は、MergeTree テーブルを作成する場合と同じ句が必要です。
非推奨のテーブル作成方法
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
EventDate Date,
Path String,
Time DateTime,
Value Float64,
Version <Numeric_type>
...
) ENGINE [=] GraphiteMergeTree(date-column [, sampling_expression], (primary, key), index_granularity, config_section)config_section を除くすべてのパラメータは、MergeTree と同じ意味です。
config_section— ロールアップルールが設定されている設定ファイル内のセクション名。
ロールアップ設定
ロールアップの設定は、サーバー設定の graphite_rollup パラメータで定義します。パラメータ名は任意に指定できます。複数の設定を作成して、異なるテーブルで使い分けることもできます。
ロールアップ設定の構造:
- 必須カラム
- パターン
必須カラム
path_column_name
path_column_name — メトリック名 (Graphite sensor) を格納するカラム名です。デフォルト値: 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 セクションの構成:
pattern
rule_type
regexp
function
pattern
rule_type
regexp
age + precision
...
pattern
rule_type
regexp
function
age + precision
...
pattern
...
default
function
age + precision
...行を処理する際、ClickHouse は pattern セクション内のルールを確認します。各 pattern セクション (default を含む) には、aggregation 用の function parameter、retention parameters、またはその両方を含めることができます。メトリック名が regexp に一致した場合は pattern セクションのルール (複数可) が適用され、一致しない場合は default セクションのルールが使用されます。
pattern セクションと default セクションのフィールド:
rule_type- ルールの種類。特定のメトリックにのみ適用されます。engine はこれを使用して、プレーンメトリックとタグ付きメトリックを区別します。省略可能な parameter。デフォルト値:all。 パフォーマンスが重要でない場合や、プレーンメトリックのように 1 種類のメトリックしか使用しない場合は不要です。デフォルトでは、作成されるルールセットは 1 種類だけです。一方、特殊な type がいずれか定義されている場合は、2 つの異なるセットが作成されます。1 つはプレーンメトリック用 (root.branch.leaf)、もう 1 つはタグ付きメトリック用 (root.branch.leaf;tag1=value1) です。 デフォルトルールは最終的に両方のセットに含まれます。 有効な値:all(デフォルト) -rule_typeを省略した場合に使用される汎用ルール。plain- プレーンメトリック用のルール。regexpフィールドは regular expression として処理されます。tagged- タグ付きメトリック用のルール (メトリックは DB 内でsomeName?tag1=value1&tag2=value2&tag3=value3のフォーマットで保存されます) 。regular expression はタグ名でソートされている必要があり、存在する場合は最初のタグが__name__でなければなりません。regexpフィールドは regular expression として処理されます。tag_list- タグ付きメトリック用のルールで、graphite フォーマットのsomeName;tag1=value1;tag2=value2、someName、またはtag1=value1;tag2=value2のように、メトリックを簡単に記述するためのシンプルな DSL です。regexpフィールドはtaggedルールに変換されます。タグ名によるソートは不要で、自動的に行われます。タグの値 (名前ではなく) は regular expression として指定できます。たとえばenv=(dev|staging)です。
regexp– メトリック名の pattern (regular expression または DSL) 。age– データの最小経過時間 (秒) 。precision– データの経過時間を秒単位でどの程度の精度で定義するか。86400 (1 日の秒数) の約数である必要があります。function– age が範囲[age, age + precision]に入るデータに適用する集約関数の名前。使用できる関数: min / max / any / avg。平均値は、平均の平均のように不正確に計算されます。
ルールタイプを使用しない設定例
<graphite_rollup>
<version_column_name>Version</version_column_name>
<pattern>
<regexp>click_cost</regexp>
<function>any</function>
<retention>
<age>0</age>
<precision>5</precision>
</retention>
<retention>
<age>86400</age>
<precision>60</precision>
</retention>
</pattern>
<default>
<function>max</function>
<retention>
<age>0</age>
<precision>60</precision>
</retention>
<retention>
<age>3600</age>
<precision>300</precision>
</retention>
<retention>
<age>86400</age>
<precision>3600</precision>
</retention>
</default>
</graphite_rollup>ルールタイプを含む設定例
<graphite_rollup>
<version_column_name>Version</version_column_name>
<pattern>
<rule_type>plain</rule_type>
<regexp>click_cost</regexp>
<function>any</function>
<retention>
<age>0</age>
<precision>5</precision>
</retention>
<retention>
<age>86400</age>
<precision>60</precision>
</retention>
</pattern>
<pattern>
<rule_type>tagged</rule_type>
<regexp>^((.*)|.)min\?</regexp>
<function>min</function>
<retention>
<age>0</age>
<precision>5</precision>
</retention>
<retention>
<age>86400</age>
<precision>60</precision>
</retention>
</pattern>
<pattern>
<rule_type>tagged</rule_type>
<regexp><![CDATA[^someName\?(.*&)*tag1=value1(&|$)]]></regexp>
<function>min</function>
<retention>
<age>0</age>
<precision>5</precision>
</retention>
<retention>
<age>86400</age>
<precision>60</precision>
</retention>
</pattern>
<pattern>
<rule_type>tag_list</rule_type>
<regexp>someName;tag2=value2</regexp>
<retention>
<age>0</age>
<precision>5</precision>
</retention>
<retention>
<age>86400</age>
<precision>60</precision>
</retention>
</pattern>
<default>
<function>max</function>
<retention>
<age>0</age>
<precision>60</precision>
</retention>
<retention>
<age>3600</age>
<precision>300</precision>
</retention>
<retention>
<age>86400</age>
<precision>3600</precision>
</retention>
</default>
</graphite_rollup>