المتطلبات المسبقة:
- الإلمام بـ ملفات تهيئة ClickHouse
- مثيل من خادم ClickHouse قيد التشغيل
- (اختياري) مثيل محلي من Grafana قيد التشغيل
[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 من الخطوة السابقة لعرض التتبّع بصريًا.

استخدام 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:

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