GraphiteMergeTree
此引擎专为 Graphite 数据的细化和聚合/平均 (汇总) 而设计。对于希望使用 ClickHouse 作为 Graphite 数据存储的开发者可能会有帮助。
如果您不需要汇总,可以使用任何 ClickHouse 表引擎来存储 Graphite 数据,但是如果您需要汇总,请使用 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 传感器)。数据类型:
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 参数定义。参数的名称可以是任何名称。您可以创建多个配置,并将其用于不同的表。
汇总配置结构
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
节点的结构
pattern
rule_type
regexp
function
pattern
rule_type
regexp
age + precision
...
pattern
rule_type
regexp
function
age + precision
...
pattern
...
default
function
age + precision
...
模式必须严格排序
- 没有
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` (default) - a universal rule, used when `rule_type` is omitted.
- `plain` - a rule for plain metrics. The field `regexp` is processed as regular expression.
- `tagged` - a rule for tagged metrics (metrics are stored in DB in the format of `someName?tag1=value1&tag2=value2&tag3=value3`). Regular expression must be sorted by tags' names, first tag must be `__name__` if exists. The field `regexp` is processed as regular expression.
- `tag_list` - a rule for tagged metrics, a simple DSL for easier metric description in graphite format `someName;tag1=value1;tag2=value2`, `someName`, or `tag1=value1;tag2=value2`. The field `regexp` is translated into a `tagged` rule. The sorting by tags' names is unnecessary, ti will be done automatically. A tag's value (but not a name) can be set as a regular expression, e.g. `env=(dev|staging)`.regexp
— 指标名称的模式(正则表达式或 DSL)。age
— 数据的最小年龄(以秒为单位)。precision
— 用于定义数据年龄的精度(以秒为单位)。应该是 86400(一天中的秒数)的除数。function
— 应用于年龄位于[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>
数据汇总在合并期间执行。通常,对于旧分区,不会启动合并,因此为了汇总,有必要使用 optimize 触发计划外的合并。或者使用其他工具,例如 graphite-ch-optimizer。