Ce moteur est conçu pour la réduction et l'agrégation/la mise en moyenne (rollup) des données Graphite. Il peut être utile aux développeurs qui souhaitent utiliser ClickHouse comme système de stockage pour Graphite.
Vous pouvez utiliser n'importe quel moteur de table ClickHouse pour stocker les données Graphite si vous n'avez pas besoin de rollup, mais si vous en avez besoin, utilisez GraphiteMergeTree. Le moteur réduit le volume de stockage et améliore l'efficacité des requêtes Graphite.
Le moteur hérite des propriétés de MergeTree.
Créer une table
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, ...]Voir une description détaillée de la requête CREATE TABLE.
Une table destinée aux données Graphite doit comporter les colonnes suivantes :
-
Nom de la métrique (capteur Graphite). Type de données :
String. -
Date et heure de mesure de la métrique. Type de données :
DateTime. -
Valeur de la métrique. Type de données :
Float64. -
Version de la métrique. Type de données : tout type numérique (ClickHouse conserve les lignes ayant la version la plus élevée ou la dernière écrite si les versions sont identiques. Les autres lignes sont supprimées lors de la fusion des parties de données).
Les noms de ces colonnes doivent être définis dans la configuration de rollup.
Paramètres de GraphiteMergeTree
config_section— Nom de la section du fichier de configuration dans laquelle sont définies les règles de rollup.
Clauses de requête
Lors de la création d'une table GraphiteMergeTree, les mêmes clauses sont requises que lors de la création d'une table MergeTree.
Méthode obsolète de création d'une table
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)Tous les paramètres, à l'exception de config_section, ont la même signification que dans MergeTree.
config_section— Nom de la section du fichier de configuration dans laquelle sont définies les règles de rollup.
Configuration du rollup
Les paramètres du rollup sont définis par le paramètre graphite_rollup dans la configuration du serveur. Le nom du paramètre peut être choisi librement. Vous pouvez créer plusieurs configurations et les utiliser pour différentes tables.
Structure de la configuration du rollup :
- required-columns
- patterns
Colonnes requises
path_column_name
path_column_name — Nom de la colonne qui stocke le nom de la métrique (capteur Graphite). Valeur par défaut : Path.
time_column_name
time_column_name — Le nom de la colonne qui stocke l’heure de mesure de la métrique. Valeur par défaut : Time.
value_column_name
value_column_name — Le nom de la colonne qui stocke la valeur de la métrique à l’instant défini dans time_column_name. Valeur par défaut : Value.
version_column_name
version_column_name — Le nom de la colonne stockant la version de la métrique. Valeur par défaut : Timestamp.
Patterns
Structure de la section patterns :
pattern
rule_type
regexp
function
pattern
rule_type
regexp
age + precision
...
pattern
rule_type
regexp
function
age + precision
...
pattern
...
default
function
age + precision
...Lors du traitement d’une ligne, ClickHouse vérifie les règles dans les sections pattern. Chacune des sections pattern (y compris default) peut contenir le paramètre function pour l’agrégation, les paramètres retention, ou les deux. Si le nom de la métrique correspond à regexp, les règles de la section pattern (ou des sections pattern) sont appliquées ; sinon, les règles de la section default sont utilisées.
Champs des sections pattern et default :
rule_type- le type d’une règle. Il s’applique uniquement à certaines métriques. Le moteur l’utilise pour séparer les métriques simples et les métriques avec tags. Paramètre facultatif. Valeur par défaut :all. Il n’est pas nécessaire lorsque les performances ne sont pas critiques, ou lorsqu’un seul type de métriques est utilisé, par exemple des métriques simples. Par défaut, un seul ensemble de règles est créé. Sinon, si l’un des types spéciaux est défini, deux ensembles différents sont créés. Un pour les métriques simples (root.branch.leaf) et un pour les métriques avec tags (root.branch.leaf;tag1=value1). Les règles par défaut se retrouvent dans les deux ensembles. Valeurs valides :all(par défaut) - une règle universelle, utilisée lorsquerule_typeest omis.plain- une règle pour les métriques simples. Le champregexpest traité comme une expression régulière.tagged- une règle pour les métriques avec tags (les métriques sont stockées dans la DB au formatsomeName?tag1=value1&tag2=value2&tag3=value3). L’expression régulière doit être triée par nom de tag, le premier tag devant être__name__s’il existe. Le champregexpest traité comme une expression régulière.tag_list- une règle pour les métriques avec tags, avec une DSL simple pour faciliter la description des métriques au format graphitesomeName;tag1=value1;tag2=value2,someNameoutag1=value1;tag2=value2. Le champregexpest converti en règletagged. Le tri par nom de tag n’est pas nécessaire, il sera effectué automatiquement. La valeur d’un tag (mais pas son nom) peut être définie comme une expression régulière, par exempleenv=(dev|staging).
regexp– Un motif pour le nom de la métrique (expression régulière ou DSL).age– L’âge minimal des données, en secondes.precision– Le niveau de précision utilisé pour définir l’âge des données en secondes. Doit être un diviseur de 86400 (secondes dans une journée).function– Le nom de la fonction d’agrégation à appliquer aux données dont l’âge se situe dans l’intervalle[age, age + precision]. Fonctions acceptées : min / max / any / avg. La moyenne est calculée de manière imprécise, comme la moyenne des moyennes.
Exemple de configuration sans types de règles
<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>Exemple de configuration avec type de règle
<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>