GraphiteMergeTree. El motor reduce el volumen de almacenamiento y aumenta la eficiencia de las consultas de Graphite.
El motor hereda propiedades de MergeTree.
Crear una tabla
-
Nombre de la métrica (Graphite sensor). Tipo de dato:
String. -
Momento de medición de la métrica. Tipo de dato:
DateTime. -
Valor de la métrica. Tipo de dato:
Float64. - Versión de la métrica. Tipo de dato: cualquier tipo numérico (ClickHouse conserva las filas con la versión más alta o la última escrita si las versiones son iguales. Las demás filas se eliminan durante la fusión de las partes de datos).
config_section— Nombre de la sección del archivo de configuración en la que se establecen las reglas de rollup.
GraphiteMergeTree, se requieren las mismas cláusulas que al crear una tabla MergeTree.
Configuración de rollup
Columnas requeridas
path_column_name
path_column_name — El nombre de la columna donde se almacena el nombre de la métrica (Graphite sensor). Valor predeterminado: Path.
time_column_name
time_column_name — El nombre de la columna que almacena la hora de medición de la métrica. Valor predeterminado: Time.
value_column_name
value_column_name — El nombre de la columna que almacena el valor de la métrica en el momento indicado en time_column_name. Valor predeterminado: Value.
version_column_name
version_column_name — El nombre de la columna que almacena la versión de la métrica. Valor predeterminado: Timestamp.
Patrones
patterns:
pattern. Cada una de las secciones pattern (incluida default) puede contener el parámetro function para la aggregation, parámetros retention o ambos. Si el nombre de la métrica coincide con regexp, se aplican las reglas de la sección pattern (o de las secciones correspondientes); de lo contrario, se usan las reglas de la sección default.
Campos de las secciones pattern y default:
rule_type- el tipo de regla. Se aplica solo a determinadas métricas. El motor lo usa para separar las métricas simples de las etiquetadas. Parámetro opcional. Valor predeterminado:all. No es necesario cuando el rendimiento no es crítico o cuando solo se usa un tipo de métricas, por ejemplo, métricas simples. De forma predeterminada, solo se crea un conjunto de reglas. En caso contrario, si se define cualquiera de los tipos especiales, se crean dos conjuntos distintos. Uno para métricas simples (root.branch.leaf) y otro para métricas etiquetadas (root.branch.leaf;tag1=value1). Las reglas predeterminadas acaban en ambos conjuntos. Valores válidos:all(predeterminado) - una regla universal, usada cuando se omiterule_type.plain- una regla para métricas simples. El camporegexpse procesa como una expresión regular.tagged- una regla para métricas etiquetadas (las métricas se almacenan en DB con el formatosomeName?tag1=value1&tag2=value2&tag3=value3). La expresión regular debe estar ordenada por nombre de tag; la primera tag debe ser__name__si existe. El camporegexpse procesa como una expresión regular.tag_list- una regla para métricas etiquetadas; es un DSL sencillo para facilitar la descripción de métricas en formato Graphite:someName;tag1=value1;tag2=value2,someNameotag1=value1;tag2=value2. El camporegexpse traduce a una reglatagged. No es necesario ordenar por nombre de tag, ya que se hará automáticamente. El valor de una tag (pero no el nombre) puede establecerse como una expresión regular, por ejemplo,env=(dev|staging).
regexp– Un pattern para el nombre de la métrica (expresión regular o DSL).age– La antigüedad mínima de los datos en segundos.precision– Con qué precisión definir la antigüedad de los datos en segundos. Debe ser un divisor de 86400 (segundos en un día).function– El nombre de la función de aggregation que se aplicará a los datos cuya antigüedad esté dentro del rango[age, age + precision]. Funciones aceptadas: min / max / any / avg. La media se calcula de forma imprecisa, como la media de varias medias.
Ejemplo de configuración sin tipos de reglas
Ejemplo de configuración con tipos de reglas
El rollup de datos se realiza durante las fusiones. Normalmente, no se inician fusiones para las particiones antiguas, por lo que, para realizar el rollup, es necesario forzar una fusión no programada mediante optimize. O bien, usar herramientas adicionales, por ejemplo graphite-ch-optimizer.