Skip to main content
تُعدّ القدرة على تحليل السجلات في الوقت الفعلي أمرًا بالغ الأهمية لتطبيقات الإنتاج. ويتميّز ClickHouse في تخزين بيانات السجلات وتحليلها بفضل إمكانات الضغط الممتازة لديه (حتى 170x للسجلات) وقدرتِه على تجميع كميات كبيرة من البيانات بسرعة. يوضح لك هذا الدليل كيفية استخدام خط أنابيب البيانات الشائع Vector لمراقبة ملف سجل Nginx وإرساله إلى ClickHouse. والخطوات أدناه متشابهة عند مراقبة أي نوع من ملفات السجل. المتطلبات الأساسية:
  • لديك بالفعل ClickHouse قيد التشغيل
  • لديك Vector مثبت
1

أنشئ قاعدة بيانات وجدولًا

عرّف جدولًا لتخزين أحداث السجل:
  1. ابدأ بإنشاء قاعدة بيانات جديدة باسم nginxdb:
  1. أدرِج حدث السجل بالكامل كسلسلة نصية واحدة. من الواضح أن هذا ليس تنسيقًا مناسبًا جدًا لإجراء التحليلات على بيانات السجل، لكننا سنعالج هذا الجزء أدناه باستخدام العروض المُجسَّدة.
تم تعيين ORDER BY إلى tuple() (tuple فارغ) لعدم الحاجة إلى مفتاح أساسي بعد.
2

تهيئة Nginx

في هذه الخطوة، ستتعرّف على كيفية تهيئة logging في Nginx.
  1. تُرسل الخاصية access_log التالية السجلات إلى /var/log/nginx/my_access.log بتنسيق combined. توضع هذه القيمة في قسم http من ملف nginx.conf:
  1. احرص على إعادة تشغيل Nginx إذا اضطررت إلى تعديل nginx.conf.
  2. أنشئ بعض السجلات في سجل الوصول من خلال زيارة صفحات على خادم الويب لديك. تبدو السجلات بتنسيق combined كما يلي:
3

تكوين Vector

يجمع Vector السجلات والمقاييس والتتبعات، ويحوّلها ويوجّهها (ويُشار إليها باسم المصادر) إلى العديد من المزوّدين المختلفين (ويُشار إليهم باسم الوجهات)؛ بما في ذلك التوافق الجاهز مع ClickHouse. تُعرَّف المصادر والوجهات في ملف تكوين باسم vector.toml.
  1. يحدّد ملف vector.toml التالي مصدرًا من النوع file يتابع نهاية ملف my_access.log، كما يحدّد وجهة بوصفها جدول access_logs المعرَّف أعلاه:
  1. ابدأ تشغيل Vector باستخدام configuration أعلاه. راجع وثائق Vector لمزيد من التفاصيل حول تعريف المصادر والمصارف.
  2. تحقّق من إدراج سجلات الوصول في ClickHouse عبر تشغيل الاستعلام التالي. ينبغي أن ترى سجلات الوصول في جدولك:
4

تحليل السجلات

يُعدّ تخزين السجلات في ClickHouse أمرًا رائعًا، غير أن تخزين كل حدث كسلسلة نصية واحدة لا يتيح إجراء تحليل يُذكر للبيانات. سنتناول بعد ذلك كيفية تحليل أحداث السجلات باستخدام طريقة العرض المُجسَّدة.تعمل المشاهدة المادية بطريقة مشابهة لمحفّز الإدراج في SQL. عند إدراج صفوف البيانات في جدول المصدر، تُجري المشاهدة المادية تحويلاً على هذه الصفوف وتُدرج النتائج في جدول الهدف. يمكن تهيئة المشاهدة المادية لتوليد تمثيل مُحلَّل لأحداث السجلات في access_logs. يظهر أدناه مثال على أحد هذه الأحداث:
تتوفر في ClickHouse دوال متعددة لتحليل السلسلة النصية المذكورة أعلاه. تعمل الدالة splitByWhitespace على تحليل السلسلة النصية بالمسافات البيضاء، وتُعيد كل رمز في مصفوفة. للتوضيح، نفّذ الأمر التالي:
Query
Response
بعض السلاسل النصية تحتوي على أحرف إضافية، ولم يكن ثمة حاجة إلى تحليل user agent (تفاصيل المتصفح)، غير أن المصفوفة الناتجة قريبة مما هو مطلوب.على غرار splitByWhitespace، تُقسِّم الدالة splitByRegexp سلسلةً نصيةً إلى مصفوفة بناءً على تعبير نمطي. نفِّذ الأمر التالي، الذي يُعيد سلسلتين نصيتين.
لاحظ أن السلسلة الثانية المُعادة هي user agent الذي جرى تحليله واستخراجه بنجاح من السجل:
قبل الاطلاع على أمر CREATE MATERIALIZED VIEW النهائي، لنستعرض بعض الدوال الإضافية المستخدمة لتنظيف البيانات. على سبيل المثال، قيمة RequestMethod هي "GET وتحتوي على علامة اقتباس مزدوجة غير مرغوب فيها. يمكنك استخدام الدالة trimBoth (alias trim) لإزالة علامة الاقتباس المزدوجة:
تحتوي سلسلة الوقت على رمز [ في بدايتها، كما أنها ليست بتنسيق يستطيع ClickHouse تحليله إلى تاريخ. غير أنه إذا استبدلنا الفاصل من نقطتين (:) بفاصلة (,)، فإن عملية التحليل تعمل بشكل ممتاز:
نحن الآن جاهزون لتعريف الـ materialized view. يتضمن التعريف أدناه POPULATE، مما يعني أن الصفوف الموجودة في access_logs ستُعالَج وتُدرَج على الفور. نفِّذ عبارة SQL التالية:
تحقق الآن من نجاح العملية. يجب أن تظهر لك سجلات الوصول مُحللَّةً وموزَّعةً بشكل أنيق في أعمدة:
في الدرس أعلاه، جرى تخزين البيانات في جدولين، لكن يمكنك تغيير الجدول الأولي nginxdb.access_logs لاستخدام محرك الجدول Null. ستظل البيانات المُحلَّلة تنتهي في الجدول nginxdb.access_logs_view، لكن البيانات الخام لن تُخزَّن في أي جدول.
باستخدام Vector، الذي لا يتطلب سوى تثبيت بسيط وإعداد سريع، يمكنك إرسال السجلات من خادم Nginx إلى جدول في ClickHouse. وباستخدام عرض مادي، يمكنك تحليل هذه السجلات إلى أعمدة لتسهيل إجراء التحليلات.
آخر تعديل في ٢٤ يوليو ٢٠٢٦