Loghouse 0.3 - التحديث الذي طال انتظاره لنظام التسجيل لدينا في Kubernetes

لدى Flant عدد من التطورات مفتوحة المصدر ، في المقام الأول لـ Kubernetes ، و loghouse هي واحدة من أكثرها شعبية. هذه هي أداة التسجيل المركزية في K8s ، والتي تم تقديمها منذ أكثر من عامين.



كما ذكرنا في مقال حديث حول السجلات ، فقد تطلبت التحسين ، وزادت أهميتها بمرور الوقت. يسعدنا اليوم أن نقدم نسخة جديدة من loghouse - v0.3.0 . تفاصيل عنها - تحت الخفض.

سلبيات


لقد تم استخدام loghouse في العديد من مجموعات Kubernetes طوال هذا الوقت ، وبشكل عام ، يناسب هذا الحل أنفسنا ومختلف العملاء الذين نوفر لهم الوصول أيضًا. مزاياها

الرئيسية هي واجهتها البسيطة والبديهية ، والقدرة على تنفيذ استعلامات SQL ، وضغط جيد واستهلاك منخفض للموارد عند إدراج البيانات في قاعدة البيانات ، بالإضافة إلى انخفاض الموارد العامة أثناء التخزين. المشاكل الأكثر إيلاما في المستودعات أثناء العملية:



  • استخدام جداول التقسيم المرتبطة بجدول دمج ؛
  • عدم وجود مخزن مؤقت يعمل على تهدئة دفقات السجلات ؛
  • لوحة الويب القديمة والتي من المحتمل أن تكون معرضة للخطر
  • فلنتد قديم ( لوجهاوس فلنتد: لم يبدأ الأخير بسبب مشكلة في الأحجار الكريمة).

بالإضافة إلى ذلك ، تراكم عدد كبير من المشكلات على GitHub ، والتي أود أيضًا حلها.

التغييرات الرئيسية في loghouse 0.3.0


في الواقع ، لقد قمنا بتجميع ما يكفي من التغييرات ، ولكننا سنسلط الضوء على أهم التغييرات. يمكن تقسيمها إلى 3 مجموعات رئيسية:

  • تحسين تخزين السجل ومخطط قاعدة البيانات ؛
  • تحسين جمع السجل ؛
  • مظهر المراقبة.

1. تحسينات في تخزين السجل وتصميم قاعدة البيانات


الابتكارات الرئيسية:

  • تم تغيير أنظمة تخزين السجل ، وتم الانتهاء من الانتقال إلى جدول واحد ورفض جداول الأقسام .
  • بدأ تطبيق آلية التنظيف الأساسية المضمنة في ClickHouse من أحدث الإصدارات.
  • يمكنك الآن استخدام تثبيت ClickHouse خارجي ، حتى في وضع الكتلة.

قارن أداء الدوائر القديمة والجديدة في مشروع حقيقي. فيما يلي مثال للبحث عن عناوين URL الفريدة في سجلات التطبيق للمورد الشهير عبر الإنترنت dtf.ru :

SELECT 
    string_fields.values[indexOf(string_fields.names, 'path')] AS path, 
    count(*) AS count
FROM logs
WHERE (namespace = 'kube-nginx-ingress') AND ((string_fields.values[indexOf(string_fields.names, 'vhost')]) LIKE '%foobar.baz%') AND (date = '2020-02-29')
GROUP BY string_fields.values[indexOf(string_fields.names, 'path')]
ORDER BY count DESC
LIMIT 20

يتم الاختيار على عشرات الملايين من السجلات. لقد نجح المخطط القديم في 20 ثانية:



جديد - في 14:



إذا كنت تستخدم مخطط Helm الخاص بنا ، فعند تحديث السجل ، سيتم ترحيل قاعدة البيانات تلقائيًا إلى التنسيق الجديد. وإلا ، فسيتعين عليك إجراء الترحيل يدويًا. يتم وصف العملية في الوثائق . باختصار ، قم بتشغيل:

DO_DB_DEPLOY=true rake create_logs_tables

بالإضافة إلى ذلك ، بدأنا في استخدام TTL لجداول ClickHouse . يسمح لك هذا بحذف البيانات تلقائيًا من قاعدة البيانات الأقدم من الفاصل الزمني المحدد:

CREATE TABLE logs
(
....
)
  ENGINE = MergeTree()
  PARTITION BY (date)
  ORDER BY (timestamp, nsec, namespace, container_name)
  TTL date + toIntervalDay(14)
  SETTINGS index_granularity = 32768;

يمكن العثور على أمثلة لمخططات قاعدة البيانات وتكوينات لـ ClickHouse ، بما في ذلك مثال للعمل مع مجموعة CH ، في الوثائق .

مجموعة سجل محسنة


الابتكارات الرئيسية:

  • تمت إضافة مخزن مؤقت تم تصميمه لتخفيف الاندفاعات عند ظهور عدد كبير من السجلات.
  • تنفيذ القدرة على إرسال السجلات إلى المستودع مباشرة من التطبيق: عبر TCP و UDP ، بتنسيق JSON.

بطارية loghouse في loghouse هي جدول جديد logs_bufferتمت إضافته إلى مخطط قاعدة البيانات. هذا الجدول موجود في الذاكرة ، أي مخزنة في ذاكرة الوصول العشوائي (لديها نوع خاص من المخزن المؤقت ) ؛ هي التي يجب أن تخفف الحمل على القاعدة. بفضل ل طرف على إضافته.سوفيجود!

تسمح لك سجلات الإرسال المنفذة مباشرةً إلى loghouse من التطبيق بالقيام بذلك حتى من خلال netcat:

echo '{"log": {"level": "info", "msg": "hello world"}}' | nc fluentd.loghouse 5170

يمكن عرض هذه السجلات في مساحة الاسم حيث تم تثبيت loghouse في الدفق net:



متطلبات البيانات التي سيتم إرسالها هي الحد الأدنى: يجب أن تكون الرسالة JSON صالحة مع حقل log. logيمكن أن يكون الحقل ، بدوره ، عبارة عن سلسلة أو JSON متداخلة.

مراقبة النظام الفرعي للتسجيل


كان التحسن الهام هو مراقبة فلوريد من خلال بروميثيوس. الآن يأتي المستودع مع لوحة لـ Grafana ، والتي تعرض جميع المقاييس الأساسية ، مثل:

  • عدد العاملين بطلاقة ؛
  • عدد الأحداث المرسلة إلى ClickHouse ؛
  • حجم العازلة الحرة في المئة.

يمكن رؤية رمز لوحة Grafana في الوثائق .

لوحة ClickHouse مصنوعة على أساس منتج منتهي بالفعل - من f1yegor ، والذي يشكره الكثير للمؤلف.

كما ترى ، تعرض اللوحة عدد الاتصالات بـ ClickHouse واستخدام المخزن المؤقت ونشاط مهام الخلفية وعدد عمليات الدمج. هذا يكفي لفهم حالة النظام:



تُظهر لوحة فلنتد الحالات النشطة لفلنتد. هذا أمر بالغ الأهمية بشكل خاص لأولئك الذين لا يريدون / لا يمكنهم فقدان السجلات على الإطلاق:



بالإضافة إلى حالة القرون ، تعرض اللوحة الحمل على قائمة الانتظار لإرسال السجلات إلى ClickHouse. في المقابل ، يمكنك أن تفهم ما إذا كان ClickHouse يتعامل مع الحمل أم لا. في الحالات التي يتعذر فيها فقدان السجل ، تصبح هذه المعلمة مهمة أيضًا.

تم شحذ أمثلة على الألواح لتوريد Prometheus Operator ، ومع ذلك ، يمكن تعديلها بسهولة من خلال المتغيرات في الإعدادات.

أخيرًا ، كجزء من عمل مراقبة المستودعات ، قمنا بتجميع صورة Docker الحالية مع clickhouse_exporter 0.1.0 تم إصدارها بواسطة Percona Labs ، حيث تخلى مؤلف clickhouse_exporter الأصلي عن مستودعاته.

خطط مستقبلية


  • اجعل من الممكن نشر مجموعة ClickHouse في Kubernetes.
  • اجعل العمل مع اختيار السجلات غير متزامن وإزالتها من جزء روبي من الواجهة الخلفية.
  • Ruby- , .
  • , Go.
  • .


من الجيد أن نرى أن مشروع loghouse وجد جمهوره ، ليس فقط النجوم الفائزة في GitHub (600+) ، ولكن أيضًا تشجيع المستخدمين الحقيقيين على التحدث عن نجاحاتهم ومشاكلهم.

بعد إنشاء loghouse منذ أكثر من عامين ، لم نكن متأكدين من آفاقه ، متوقعين أن يقدم السوق و / أو مجتمع المصادر المفتوحة أفضل الحلول. ومع ذلك ، نرى اليوم أن هذا مسار قابل للتطبيق ، والذي ما زلنا نختاره ونستخدمه في العديد من مجموعات Kubernetes المخدومة.

نحن نتطلع إلى أي مساعدة في تحسين وتطوير المستودعات. إذا كنت تفتقد شيئًا ما في المستودع - فاكتب في التعليقات. أيضًا ، بالطبع ، سيكون من دواعي سرورنا أن نكون نشطين على GitHub .

ملاحظة


اقرأ أيضا في مدونتنا:


All Articles