Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

كيفية جمع وتصوّر تتبّع الاستعلام

المتطلبات المسبقة:

[object Object]

إذا لم تُجرِ أي تعديلات على قسم opentelemetry_span_log في ملف config.xml، يمكنك تخطي هذه الخطوة.

افتح ملف config.xml الافتراضي لـ ClickHouse وابحث عن القسم التالي:

<!--
    OpenTelemetry log contains OpenTelemetry trace spans.

    NOTE: this table does not use standard schema with event_date and event_time!
-->
<opentelemetry_span_log>
    <!--
        The default table creation code is insufficient, this <engine> spec
        is a workaround. There is no 'event_time' for this log, but two times,
        start and finish. It is sorted by finish time, to avoid inserting
        data too far away in the past (probably we can sometimes insert a span
        that is seconds earlier than the last span in the table, due to a race
        between several spans inserted in parallel). This gives the spans a
        global order that we can use to e.g. retry insertion into some external
        system.
    -->
    <engine>
        engine MergeTree
        partition by toYYYYMM(finish_date)
        order by (finish_date, finish_time_us, trace_id)
    </engine>
    <database>system</database>
    <table>opentelemetry_span_log</table>
    <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    <max_size_rows>1048576</max_size_rows>
    <reserved_size_rows>8192</reserved_size_rows>
    <buffer_size_rows_flush_threshold>524288</buffer_size_rows_flush_threshold>
    <flush_on_crash>false</flush_on_crash>
</opentelemetry_span_log>

تأكد من أنه ليس معطَّلًا بالتعليق، وإلا فلن تتمكن من رؤية system.opentelemetry_span_log في الخطوات التالية. وقد يحدث ذلك أيضًا إذا كان خادم ClickHouse لديك لا يستخدم ملف الإعدادات الافتراضي.

تحقق في سجلات الخادم لديك عن شيء مثل:

Processing configuration file 'config.xml'.
There is no file 'config.xml', will use embedded config.

تفعيل تتبّع OpenTelemetry

بعد تشغيل ClickHouse server، افتح ClickHouse client وفعّل جمع التتبعات باستخدام الاستعلام التالي:

SET opentelemetry_trace_processors=1;

من المفترض أن يظهر لك الآن جدول النظام opentelemetry_span_log إذا شغّلت:

SHOW TABLES IN system

بعد ذلك، نفِّذ:

SET opentelemetry_start_trace_probability=1;

يحدّد هذا احتمال أن يبدأ ClickHouse trace للاستعلامات التي يجري تنفيذها، حيث إن 1 تعني أن trace مفعّل لجميع الاستعلامات المنفذة.

الحصول على معرّف الاستعلام

نفّذ الاستعلام التجريبي التالي، أو الاستعلام الذي ترغب في تتبّعه:

SELECT pow(number, 2) FROM numbers(10E4);

انسخ مُعرّف الاستعلام:

:) SELECT pow(number, 2) FROM numbers(10E4);

SELECT pow(number, 2)
FROM numbers(100000.)

Query id: a9241258-a0c4-4776-a00b-e6a1d9bec4a1

أنشئ ملف تتبع

نفّذ الاستعلام التالي، مع استبدال معرّف الاستعلام بالمعرّف الذي حصلت عليه في الخطوة السابقة:

WITH 'a9241258-a0c4-4776-a00b-e6a1d9bec4a1' AS my_query_id
SELECT
    concat(substring(hostName(), length(hostName()), 1), leftPad(greatest(attribute['clickhouse.thread_id'], attribute['thread_number']), 5, '0')) AS group,
    operation_name,
    start_time_us,
    finish_time_us,
    sipHash64(operation_name) AS color,
    attribute
FROM system.opentelemetry_span_log
WHERE (trace_id IN (
    SELECT trace_id
    FROM system.opentelemetry_span_log
    WHERE (attribute['clickhouse.query_id']) = my_query_id
)) AND (operation_name != 'query') AND (operation_name NOT LIKE 'Query%')
ORDER BY
    hostName() ASC,
    group ASC,
    parent_span_id ASC,
    start_time_us ASC
INTO OUTFILE 'trace.json'
FORMAT JSON
SETTINGS output_format_json_named_tuples_as_objects = 1

سيؤدي هذا إلى كتابة الـ trace في ملف باسم trace.json. وبشكل افتراضي، يُنشأ هذا الملف في دليل العمل الحالي الذي تُشغِّل منه أداة clickhouse-client أو clickhouse-local.

تصوَّر بيانات التتبّع باستخدام الأدوات المدمجة

استخدم عارض التتبّع المستضاف على https://trace-visualizer.clickhouse.com/. حمّل ملف trace.json من الخطوة السابقة لعرض التتبّع بصريًا.

مثال على عارض التتبّع في ClickHouse

استخدام Grafana لعرض التتبعات بصريًا

نوصي باستخدام Grafana لتصوّر بيانات التتبّع واستكشافها عبر إضافة ClickHouse الرسمية. وقد حُسّنت الإضافة لإتاحة تصوّر التتبّعات باستخدام Trace Panel. وهذا مدعوم سواءً كتصوّر أو كمكوّن في Explore.

اتبع الخطوات الموضحة في "استخدام Grafana وClickHouse من أجل Observability" لإعداد Grafana باستخدام إضافة ClickHouse.

من علامة التبويب Explore، يمكنك بعد ذلك تشغيل الاستعلام التالي، مع استبدال trace_id بالقيمة الخاصة بك:

SELECT
    toString(trace_id) AS traceID,
    toString(span_id) AS spanID,
    if(toString(parent_span_id)='0', '', toString(parent_span_id)) AS parentSpanID,
    'ClickHouse' AS serviceName,
    operation_name AS operationName,
    start_time_us/1000000 AS startTime,
    (finish_time_us - start_time_us)/1000 AS duration,
    arrayMap(key -> map('key', key, 'value', attribute[key]), mapKeys(attribute)) AS serviceTags
FROM system.opentelemetry_span_log
WHERE trace_id = '68a14b27-a61f-596d-3746-2b03d2530e42' ORDER BY startTime ASC

تأكد من تعيين Query type إلى Traces:

تصوّر التتبعات في ClickHouse في Grafana

انقر على "Run Query" وافحص مخطط التتبّع:

تصوّر التتبعات في ClickHouse في Grafana
Navigation