لدى 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 .ملاحظة
اقرأ أيضا في مدونتنا: