تحتوي سجلات الخادم على معلومات ثمينة لمسؤولي الأنظمة. لكن تراكم هذه السجلات قد يصل إلى أحجام لا تستطيع قواعد البيانات التقليدية التعامل معها. هنا يأتي دور ClickHouse: بفضل معمارته القائمة على الأعمدة، يقدم ضغطًا عاليًا وسرعات استعلام مذهلة. في HostingServer.com.tr، نأخذ إدارة السجلات في بيئات الاستضافة على محمل الجد، ونعتبر ClickHouse أحد أقوى الأدوات في هذا المجال.
لماذا ClickHouse؟
ClickHouse يخزن البيانات في أعمدة وليس في صفوف. هذا يُحدث ثورة في السيناريوهات التي يتم فيها الاستعلام عن أعمدة معينة عبر العديد من الصفوف، مثل تحليل السجلات. على سبيل المثال، فكر في سجلات الوصول لـ Apache: في جدول يحتوي على 100 مليون صف، تريد فقط ترتيب عناوين IP ورموز حالة HTTP. قاعدة بيانات MySQL تقليدية قد تستغرق دقائق، بينما ClickHouse يجيب في ثوانٍ. علاوة على ذلك، باستخدام خوارزميات الضغط lz4 أو zstd، يمكنك تقليل مساحة التخزين بمقدار 5 إلى 10 مرات. في اختباراتنا، قمنا بضغط 50 جيجابايت من سجلات Apache الخام إلى 3 جيجابايت فقط في ClickHouse.
ميزة أخرى هي القدرة على الاستعلام في الوقت الفعلي. يمكنك تغذية ClickHouse باستمرار بسجلاتك ورؤيتها في لوحات التحكم خلال ثوانٍ. على سبيل المثال، من الممكن مراقبة عدد الطلبات لكل عنوان IP في الوقت الفعلي أثناء هجوم DDoS. بالإضافة إلى ذلك، يستخدم لغة استعلام مشابهة لـ SQL، مما يسهل نقل معرفتك الحالية.
تصميم الجداول للسجلات
الطريقة الأكثر شيوعًا لتخزين السجلات في ClickHouse هي استخدام جداول عائلة MergeTree. يمكن تعريف جدول سجلات الوصول لـ Apache كالتالي:
CREATE TABLE apache_logs ( timestamp DateTime, ip String, method String, url String, status UInt16, bytes UInt32, user_agent String ) ENGINE = MergeTree() ORDER BY (timestamp, ip);هنا جزء ORDER BY مهم جدًا. يقوم ClickHouse بفرز البيانات وفقًا لهذا المفتاح ويحسن الاستعلامات بناءً على هذا الترتيب. على سبيل المثال، استعلام "عناوين IP في نطاق زمني معين" يعمل بسرعة كبيرة. أيضًا، يمكنك استخدام PARTITION BY لتقسيم البيانات إلى أقسام يومية أو شهرية، مما يسهل تنظيف السجلات القديمة. على سبيل المثال:
ENGINE = MergeTree() PARTITION BY toYYYYMM(timestamp) ORDER BY (timestamp, ip);يحتفظ هذا الهيكل بكل شهر في قسم منفصل، ويمكنك حذف البيانات القديمة باستخدام 'DROP PARTITION' في ثوانٍ.
تغذية البيانات ونصائح عملية
هناك عدة طرق لنقل السجلات إلى ClickHouse. الأكثر شيوعًا هو استخدام أدوات مثل FileBeat أو Vector لجمع البيانات وإرسالها عبر HTTP API. لكن يمكنك أيضًا التحميل مباشرة من ملف:
cat access.log | clickhouse-client --query="INSERT INTO apache_logs FORMAT TabSeparated"هنا يمكنك استخدام تنسيق TabSeparated أو JSONEachRow. يجب ملاحظة أن ClickHouse يوصي بإجراء عمليات الكتابة على دفعات. بدلاً من إضافة صفوف فردية، قم بإضافة عدة آلاف من الصفوف في كل دفعة. وإلا قد ينخفض الأداء.
نصيحة: إذا كان لديك العديد من أعمدة السجلات، فقم بإنشاء جداول موجزة باستخدام Materialized View. على سبيل المثال، الاحتفاظ بجدول منفصل لأعداد عناوين IP بالساعة يمكن أن يسرع الاستعلامات بمقدار 50 مرة.
أمثلة على التحليل
التحليلات التي يمكنك القيام بها باستخدام ClickHouse لا حصر لها. إليك بعض أمثلة الاستعلامات:
- أكثر عناوين IP طلبًا: SELECT ip, count() AS cnt FROM apache_logs WHERE timestamp > now() - INTERVAL 1 HOUR GROUP BY ip ORDER BY cnt DESC LIMIT 10;
- توزيع أخطاء HTTP 404 زمنيًا: SELECT toStartOfHour(timestamp) AS hour, count() FROM apache_logs WHERE status = 404 GROUP BY hour ORDER BY hour;
- الصفحات الأكثر شهرة: SELECT url, sum(bytes) AS total_bytes FROM apache_logs WHERE method = 'GET' GROUP BY url ORDER BY total_bytes DESC LIMIT 20;
جميع هذه الاستعلامات تعود في ثوانٍ حتى على جدول يحتوي على 100 مليون صف. في أحد مشاريعنا، تمكنا من الحصول على تقارير أسبوعية على بيانات سجلات بحجم 2 مليار صف في أقل من 3 ثوانٍ.
استخدام ClickHouse في بيئة الاستضافة
نحن في HostingServer.com.tr، ننصح عملاءنا بتخطيط الذاكرة ووحدة المعالجة المركزية عند استخدام ClickHouse. يستفيد ClickHouse بشكل كبير من RAM؛ خاصة في مجموعات البيانات الكبيرة، يُنصح بذاكرة لا تقل عن 8-16 جيجابايت. كما أن استخدام أقراص SSD يحسن سرعات القراءة والكتابة بشكل كبير. للنسخ الاحتياطي، أداة clickhouse-backup مفيدة.
في الختام، ClickHouse هو قاعدة بيانات ثورية في إدارة سجلات الخادم. إذا كنت لا تزال تستخدم MySQL أو PostgreSQL لتحليل السجلات، فعليك التفكير في التبديل. ابدأ ببساطة، اختبر ببيانات سجلات لبضعة أسابيع، ولاحظ الفرق. يمكنك أيضًا مشاركة أسئلتك حول ClickHouse في منتديات HostingServer.com.tr للحصول على دعم المجتمع.