كيفية استخدام Elasticsearch و Logstash و Kibana لتصور السجلات في Python في الوقت الفعلي

ما هو التسجيل؟

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

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

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

تصور السجلات

الآن ، إذا كنت مطورًا خبيرًا يعمل على تطوير وإنشاء البرامج لفترة طويلة ، فقد تعتقد أن التسجيل ليس مشكلة كبيرة وأن معظم التعليمات البرمجية الخاصة بنا مضمنة في Debug.Log('____')بيان. حسنًا ، هذا أمر رائع ولكن هناك بعض الجوانب الأخرى للتسجيل يمكننا الاستفادة منها.

التصور لبيانات مسجلة محددة الفوائد التالية:

  • مراقبة عمليات النظام عن بعد.
  • توصيل المعلومات بوضوح وكفاءة من خلال الرسوم البيانية والمؤامرات والرسوم البيانية المعلوماتية.
  • استخرج المعرفة من البيانات المرئية في شكل رسوم بيانية مختلفة.
  • اتخاذ الإجراءات اللازمة لتحسين النظام.

هناك عدد من الطرق التي يمكننا من خلالها تصور البيانات الأولية. يوجد عدد من المكتبات بلغات البرمجة Python و R التي يمكن أن تساعد في رسم الرسوم البيانية. يمكنك معرفة المزيد عنها هنا . لكن في هذا المنشور ، لن أناقش الأساليب المذكورة أعلاه. هل سمعت عن مكدس ELK ؟

كومة الأيائل

E - Elasticsearch ، L - Logstash ، K - Kibana

اسمحوا لي أن أقدم مقدمة موجزة لها. مكدس ELK عبارة عن مجموعة من ثلاثة برامج مفتوحة المصدر تساعد في توفير رؤى حقيقية حول البيانات التي يمكن أن تكون منظمة أو غير منظمة. يمكن للمرء البحث عن البيانات وتحليلها باستخدام أدواتها بكل سهولة وكفاءة.

Elasticsearch هو محرك بحث وتحليلات موزع ومريح قادر على حل عدد متزايد من حالات الاستخدام. باعتباره قلب Elastic Stack ، فإنه يخزن بياناتك مركزيًا حتى تتمكن من اكتشاف ما هو متوقع وكشف ما هو غير متوقع. يتيح لك Elasticsearch إجراء العديد من أنواع البحث والجمع بينها - الهيكلية وغير المهيكلة والجغرافية والمترية وما إلى ذلك. وهي مبنية على لغة برمجة Java ، والتي تمكن Elasticsearch من العمل على منصات مختلفة. تمكن المستخدمين من استكشاف كمية كبيرة جدًا من البيانات بسرعة عالية جدًا.

Logstash عبارة عن خط أنابيب مفتوح المصدر لمعالجة البيانات من جانب الخادم يستوعب البيانات من العديد من المصادر في وقت واحد ، ويحولها ، ثم يرسلها إلى "التخزين" المفضل لديك (مثل Elasticsearch). غالبًا ما تكون البيانات مبعثرة أو معزولة عبر العديد من الأنظمة بتنسيقات عديدة. يدعم Logstash مجموعة متنوعة من المدخلات التي تسحب الأحداث من العديد من المصادر المشتركة ، وكل ذلك في نفس الوقت. استوعب بسهولة من سجلاتك ومقاييسك وتطبيقات الويب ومخازن البيانات وخدمات AWS المتنوعة ، كل ذلك بطريقة مستمرة ومتدفقة. Logstash لديه إطار قابل للتوصيل يضم أكثر من 200 مكون إضافي. امزج ومطابقة وتنسيق المدخلات والمرشحات والمخرجات المختلفة للعمل في انسجام خط الأنابيب.

Kibana هي منصة تحليلات وتصور مفتوحة المصدر مصممة للعمل مع Elasticsearch. يمكنك استخدام Kibana للبحث عن البيانات المخزنة في مؤشرات Elasticsearch وعرضها والتفاعل معها. يمكنك بسهولة إجراء تحليل متقدم للبيانات وتصور بياناتك في مجموعة متنوعة من المخططات والجداول والخرائط. يجعل Kibana من السهل فهم كميات كبيرة من البيانات. تتيح لك واجهته البسيطة المستندة إلى المستعرض إنشاء ومشاركة لوحات المعلومات الديناميكية التي تعرض التغييرات على استعلامات Elasticsearch في الوقت الفعلي.

للحصول على صورة أفضل لسير العمل لكيفية تفاعل البرامج الثلاثة مع بعضها البعض ، راجع الرسم التخطيطي التالي:

التنفيذ

تسجيل الدخول في بايثون

هنا ، اخترت أن أشرح تنفيذ التسجيل في Python لأنها اللغة الأكثر استخدامًا للمشاريع التي تتضمن التواصل بين أجهزة متعددة وإنترنت الأشياء. سوف يساعدك في إعطائك فكرة عامة عن كيفية عمله.

توفر Python نظام تسجيل كجزء من مكتبتها القياسية ، بحيث يمكنك إضافة التسجيل إلى تطبيقك بسرعة.

import logging

في Python ، يمكن إجراء التسجيل على 5 مستويات مختلفة يشير كل منها على التوالي إلى نوع الحدث. هناك ما يلي:

  • معلومات - يعين الرسائل الإعلامية التي تسلط الضوء على تقدم التطبيق على مستوى رديء.
  • تصحيح الأخطاء - يعيّن الأحداث المعلوماتية الدقيقة الأكثر إفادة لتصحيح أخطاء أحد التطبيقات.
  • تحذير - يحدد المواقف التي يحتمل أن تكون ضارة.
  • خطأ - يعيّن أحداث الخطأ التي قد لا تزال تسمح للتطبيق بمتابعة التشغيل.
  • حرج - يعيّن أحداث خطأ بالغة الخطورة من المفترض أن تؤدي إلى إحباط التطبيق.

لذلك ، اعتمادًا على المشكلة التي يجب تسجيلها ، نستخدم المستوى المحدد وفقًا لذلك.

ملاحظة : لا يتم تسجيل المعلومات وتصحيح الأخطاء بشكل افتراضي حيث يتم تسجيل سجلات مستوى تحذير فقط وما فوق.

الآن لإعطاء مثال وإنشاء مجموعة من عبارات السجل لتصور ، قمت بإنشاء نص برمجي Python يسجل عبارات بتنسيق ورسالة محددة.

import logging import random logging.basicConfig(filename="logFile.txt", filemode="a", format="%(asctime)s %(levelname)s-%(message)s", datefmt="%Y-%m-%d %H:%M:%S") for i in xrange(0,15): x=random.randint(0,2) if(x==0): logging.warning('Log Message') elif(x==1): logging.critical('Log Message') else: logging.error('Log Message')

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

2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 WARNING-Log Message 2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 CRITICAL-Log Message 2019-01-09 09:01:05,333 WARNING-Log Message 2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 WARNING-Log Message 2019-01-09 09:01:05,333 WARNING-Log Message 2019-01-09 09:01:05,333 ERROR-Log Message 2019-01-09 09:01:05,333 CRITICAL-Log Message 2019-01-09 09:01:05,333 CRITICAL-Log Message 2019-01-09 09:01:05,333 CRITICAL-Log Message 2019-01-09 11:07:05,333 ERROR-Log Message 2019-01-09 11:07:05,333 WARNING-Log Message 2019-01-09 11:07:05,333 ERROR-Log Message 2019-01-09 11:07:05,333 ERROR-Log Message 2019-01-09 11:07:05,333 WARNING-Log Message 2019-01-09 11:07:05,333 CRITICAL-Log Message 2019-01-09 11:07:05,333 WARNING-Log Message 2019-01-09 11:07:05,333 ERROR-Log Message

إعداد Elasticsearch و Logstash و Kibana

في البداية ، لنقم بتنزيل البرامج الثلاثة مفتوحة المصدر من الروابط الخاصة بكل منها [elasticsearch] و [logstash] و [kibana]. قم بفك ضغط الملفات ووضع الثلاثة في مجلد المشروع.

هيا بنا نبدأ.

الخطوة 1 - قم بإعداد Kibana و Elasticsearch على النظام المحلي. نقوم بتشغيل Kibana بواسطة الأمر التالي في مجلد bin Kibana.

bin\kibana

وبالمثل ، تم إعداد Elasticsearch على النحو التالي:

bin\elasticsearch

الآن ، في المحطتين المنفصلتين ، يمكننا رؤية كلتا الوحدتين قيد التشغيل. للتحقق من أن الخدمات تعمل على مضيف محلي مفتوح : 5621 و localhost: 9600 .

بعد تشغيل كلتا الخدمتين بنجاح ، نستخدم برامج Logstash و Python لتحليل بيانات السجل الأولية وتوجيهها إلى Elasticsearch التي تستعلم منها Kibana البيانات.

الخطوة 2 - الآن دعنا نبدأ مع Logstash. قبل بدء Logstash ، يتم إنشاء ملف تكوين Logstash يتم فيه تحديد تفاصيل ملف الإدخال وموقع الإخراج وطرق التصفية.

input{ file{ path => "full/path/to/log_file/location/logFile.txt" start_position => "beginning" } } filter { grok{ match => {"message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:log-level}-%{GREEDYDATA:message}"} } date { match => ["timestamp", "ISO8601"] } } output{ elasticsearch{ hosts => ["localhost:9200"] index => "index_name"} stdout{codec => rubydebug} }

يلعب ملف التكوين هذا دورًا رئيسيًا في مكدس ELK. ألق نظرة على خط الفلتر {grok {…}} . هذا هو البرنامج المساعد Grok filter. يعد Grok طريقة رائعة لتحليل بيانات السجل غير المهيكلة إلى شيء منظم وقابل للاستعلام عنه. هذه الأداة مثالية لسجلات syslog و apache وسجلات خادم الويب الأخرى وسجلات mysql وبصفة عامة أي تنسيق سجل مكتوب بشكل عام للبشر وليس لاستهلاك الكمبيوتر. يخبر نمط grok المذكور في الكود Logstash كيفية تحليل كل إدخال سطر في ملف السجل الخاص بنا.

الآن احفظ الملف في مجلد Logstash وابدأ خدمة Logstash.

bin\logstash –f logstash-simple.conf
لمعرفة المزيد حول تكوين logstash ، انقر [ هنا ].

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

localhost:9200/_cat/indices?v

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

لوحة القيادة باستخدام Kibana

بعد إعداد كل شيء ، حان الوقت الآن لإنشاء رسوم بيانية لتصور بيانات السجل.

بعد فتح الصفحة الرئيسية لإدارة Kibana ، سيُطلب منا إنشاء نمط فهرس جديد. أدخل index_name*في حقل نمط الفهرس وحدد timestamp في القائمة المنسدلة اسم حقل عامل تصفية الوقت .

الآن لإنشاء الرسوم البيانية ، نذهب إلى علامة التبويب تصور .

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

بعد إنشاء بعض الرسوم البيانية ، يمكننا إضافة جميع التصورات المطلوبة وإنشاء لوحة تحكم ، كما يلي:

ملاحظة - عندما يتم تحديث السجلات الموجودة في ملف السجل أو إلحاقها بالسجلات السابقة ، طالما أن الخدمات الثلاث تقوم بتشغيل البيانات في elasticsearch وسيتم تحديث الرسوم البيانية في kibana تلقائيًا وفقًا للبيانات الجديدة.

تغليف

يمكن أن يساعد التسجيل في مكافحة الأخطاء وبرامج التصحيح بدلاً من استخدام بيان الطباعة. تقوم وحدة التسجيل بتقسيم الرسائل وفقًا لمستويات مختلفة. ينتج عن هذا فهم أفضل للكود وكيف يتم تدفق المكالمات دون مقاطعة البرنامج.

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

لمزيد من المراجع يمكنك الرجوع إلى وثائق ELK الرسمية من هنا - //www.elastic.co/learn وعلى تسجيل الدخول في بايثون - //docs.python.org/2/library/logging.html