跳到主要内容
跳到主要内容

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 模式

必需列

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
...
信息

模式必须严格排序

  1. 没有 function 或 retention 的模式。
  2. 同时具有 function 和 retention 的模式。
  3. 默认模式。

在处理行时,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 - 标签指标的规则(指标以 someName?tag1=value1&tag2=value2&tag3=value3 的格式存储在数据库中)。正则表达式必须按标签名称排序,如果存在,则第一个标签必须是 __name__。字段 regexp 被视为正则表达式。
    • tag_list - 标签指标的规则,一种简单的 DSL,用于更轻松地以 graphite 格式描述指标 someName;tag1=value1;tag2=value2、someName 或 tag1=value1;tag2=value2。字段 regexp 被翻译成 tagged 规则。按标签名称排序是不必要的,它将自动完成。标签的值(但不是名称)可以设置为正则表达式,例如 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