Proporcionar el contexto de traza a ClickHouse
ClickHouse acepta encabezados HTTP de contexto de traza, como se describe en la recomendación del W3C. También acepta contexto de traza a través de un protocolo nativo que se utiliza para la comunicación entre servidores de ClickHouse o entre el cliente y el servidor. Para realizar pruebas manuales, se pueden proporcionar aclickhouse-client encabezados de contexto de traza conformes con la recomendación Trace Context mediante las opciones --opentelemetry-traceparent y --opentelemetry-tracestate.
Si no se proporciona un contexto de traza padre, o si el contexto de traza proporcionado no cumple con el estándar W3C mencionado anteriormente, ClickHouse puede iniciar una nueva traza, con una probabilidad controlada por la configuración opentelemetry_start_trace_probability.
Propagación del contexto de traza
El contexto de traza se propaga a los servicios posteriores en los siguientes casos:- Consultas a servidores remotos de ClickHouse, como cuando se usa el motor de tabla Distributed.
- Función de tabla url. La información del contexto de traza se envía en las cabeceras HTTP.
Spans de consultas distribuidas
En unSELECT distribuido, cada lectura de un segmento remoto queda cubierta por un span RemoteQueryExecutor::execute. Estos spans llevan atributos que identifican el fragmento de la consulta:
clickhouse.clusteryclickhouse.shard_num: el cluster y el segmento desde el que lee el executor;clickhouse.query_idyclickhouse.initial_query_id: los identificadores de consulta desde la perspectiva del initiator;clickhouse.target_host: las direcciones de las conexiones establecidas.
status_code de dicho span indica cómo terminó el fragmento:
OK: el segmento entregó su resultado completo.ERROR: el fragmento falló, ya sea porque el segmento devolvió una excepción, porque el initiator no pudo leer los datos o porque no se pudo cancelar el segmento.UNSET: ni éxito ni fallo. Estos spans incluyen un atributo que aporta más contexto.
INSERT sobre una tabla Distributed generan spans análogos en DistributedSink, con las mismas claves de atributo clickhouse.cluster y clickhouse.shard_num.
Trazado de solicitudes de ClickHouse Keeper
ClickHouse admite trazado de OpenTelemetry para las solicitudes de ClickHouse Keeper (servicio de coordinación compatible con ZooKeeper). Esta función proporciona visibilidad detallada del ciclo de vida de las operaciones de Keeper, desde el envío de la solicitud por parte del cliente hasta su procesamiento en el servidor.Habilitar el trazado de Keeper
Para habilitar el trazado de las solicitudes a Keeper, configure los siguientes ajustes en la configuración de su cliente de ZooKeeper/Keeper:Tipos de spans de Keeper
Cuando el trazado está habilitado, ClickHouse crea spans tanto para las operaciones de Keeper en el cliente como en el servidor: Spans del lado del cliente:zookeeper.create— Crear un nodozookeeper.get— Obtener los datos del nodozookeeper.set— Establecer los datos del nodozookeeper.remove— Eliminar un nodozookeeper.list— Enumerar los nodos hijoszookeeper.exists— Comprobar si existe un nodozookeeper.multi— Ejecutar varias operaciones de forma atómicazookeeper.client.requests_queue— Tiempo empleado en poner en cola las solicitudes antes de enviarlas
keeper.receive_request— Recepción y análisis de la solicitud del clientekeeper.dispatcher.requests_queue— Puesta en cola de solicitudes en el dispatcherkeeper.write.pre_commit— Preprocesamiento de solicitudes de escritura antes del commit de Raftkeeper.write.commit— Procesamiento de solicitudes de escritura después del commit de Raftkeeper.read.wait_for_write— Solicitudes de lectura en cola a la espera de que se complete un lote de solicitudes en cursokeeper.read.process— Procesamiento de solicitudes de lecturakeeper.dispatcher.responses_queue— Puesta en cola de respuestas en el dispatcherkeeper.send_response— Envío de la respuesta al cliente
Muestreo y rendimiento
Para gestionar la sobrecarga del trazado, Keeper implementa muestreo dinámico. La tasa de muestreo se ajusta automáticamente entre 1/10,000 y 1/10 en función del tamaño de la solicitud. La duración de todas las solicitudes (muestreadas y no muestreadas) se registra en métricas de histograma para supervisar el rendimiento.Trazado del propio ClickHouse
ClickHouse creatrace spans para cada consulta y para algunas etapas de ejecución de la consulta, como la planificación de consultas o las consultas distribuidas.
Para que sea útil, la información de trazado debe exportarse a un sistema de monitorización compatible con OpenTelemetry, como Jaeger o Prometheus. ClickHouse evita depender de un sistema de monitorización concreto y, en su lugar, solo proporciona los datos de trazado a través de una tabla del sistema. La información de OpenTelemetry sobre trace spans requerida por el estándar se almacena en la tabla system.opentelemetry_span_log.
La tabla debe estar habilitada en la configuración del servidor; consulte el elemento opentelemetry_span_log en el archivo de configuración predeterminado config.xml. Está habilitada de forma predeterminada.
Las etiquetas o atributos se guardan como dos arrays paralelos que contienen las claves y los valores. Use ARRAY JOIN para trabajar con ellos.
Log-query-settings
La configuración log_query_settings permite registrar los cambios en los ajustes de la consulta durante su ejecución. Cuando está habilitada, cualquier modificación realizada en los ajustes de la consulta se registrará en el registro del span de OpenTelemetry. Esta función resulta especialmente útil en entornos de producción para hacer un seguimiento de los cambios de configuración que pueden afectar al rendimiento de la consulta.Integración con sistemas de monitoreo
Por el momento, no existe una herramienta lista que pueda exportar los datos de trazado de ClickHouse a un sistema de monitoreo. Para realizar pruebas, es posible configurar la exportación mediante una vista materializada con el motor URL sobre la tabla system.opentelemetry_span_log, que enviaría los datos de log a medida que llegan a un endpoint HTTP de un collector de traces. Por ejemplo, para enviar los datos mínimos de span a una instancia de Zipkin que se ejecuta enhttp://localhost:9411, en formato JSON v2 de Zipkin: