Saltar al contenido principal
Este motor está diseñado para compactar y agregar/promediar datos de Graphite (rollup). Puede ser útil para los desarrolladores que quieran usar ClickHouse como almacén de datos para Graphite. Puede usar cualquier motor de tabla de ClickHouse para almacenar datos de Graphite si no necesita rollup, pero si lo necesita, use 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

Consulte una descripción detallada de la consulta CREATE TABLE. Una tabla para los datos de Graphite debe tener las siguientes columnas para estos datos:
  • 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).
Los nombres de estas columnas deben establecerse en la configuración de rollup. Parámetros de GraphiteMergeTree
  • config_section — Nombre de la sección del archivo de configuración en la que se establecen las reglas de rollup.
Cláusulas de la consulta Al crear una tabla GraphiteMergeTree, se requieren las mismas cláusulas que al crear una tabla MergeTree.

Configuración de rollup

La configuración de rollup se define mediante el parámetro graphite_rollup en la configuración del servidor. El nombre del parámetro puede ser cualquiera. Puede crear varias configuraciones y usarlas con diferentes tablas. Estructura de la configuración de rollup: required-columns patterns

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

Estructura de la sección patterns:
Los patrones deben estar estrictamente ordenados:
  1. Patrones sin function ni retention.
  2. Patrones con function y retention.
  3. Patrón default.
Al procesar una fila, ClickHouse comprueba las reglas de las secciones 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 omite rule_type.
    • plain - una regla para métricas simples. El campo regexp se procesa como una expresión regular.
    • tagged - una regla para métricas etiquetadas (las métricas se almacenan en DB con el formato someName?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 campo regexp se 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, someName o tag1=value1;tag2=value2. El campo regexp se traduce a una regla tagged. 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.
Última modificación el 12 de junio de 2026