دروس Logstash: استخدام Logstash لتبسيط إخطارات البريد الإلكتروني

نشرت: 2022-03-11

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

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

عاجلاً أم آجلاً ، يصبح التمييز بين رسائل البريد الإلكتروني "القابلة للتنفيذ" والإشعارات غير المجدية أمرًا صعبًا. يمكنك إعداد القواعد والفلاتر على بريدك ، ولكن حتى هذه يمكن أن تبدأ في أن تصبح غير قابلة للإدارة.

تعليمي logstash

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

إعداد وإدخال Logstash

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

انقل جميع رسائل البريد الإلكتروني من "[email protected]" إلى المجلد "MyAwesomeAppEmails". إذا كان لديك صندوق بريد منفصل لرسائل البريد الإلكتروني هذه ، فسيكون الأمر أسهل.

يمكننا الآن إعداد Logstash لاستطلاع الرأي على هذا المجلد وتحليل رسائل البريد باستخدام المكون الإضافي IMAP. يدعم الإصدار 1.4.2 فقط سحب رسائل البريد الإلكتروني من علبة الوارد ، ولكن هناك إصلاح بسيط نسبيًا تم تطبيقه في الإصدار 1.5 للسماح باستقصاء مجلد معين. إذا لم يكن لديك صندوق بريد منفصل ، فالرجاء تطبيق التصحيح على المكون الإضافي IMAP في مثيل Logstash الخاص بك قبل المتابعة.

 # /etc/logstash/conf.d/01-imap-input.conf input { imap { host => "imap.yourmailserver.com" user => "username" password => "password" secure => true fetch_count => 15 folder => "MyAwesomeAppEmails" # This line will only work if you apply the above mentioned patch } }

سيبدأ هذا في فحص رسائل البريد الإلكتروني الجديدة وتحليلها في أحداث Logstash.

أحداث logstash

مرشح Logstash

يتم تحليل الكثير من البيانات المفيدة من رسائل البريد الإلكتروني إلى خصائص أحداث مختلفة - لاحظ أن الطابع الزمني للبريد الإلكتروني يُستخدم باعتباره "timestamp" للحدث. علاوة على ذلك ، من الرؤوس وحدها يمكننا القيام بأشياء مثل تحديد المضيف الذي نشأ الخطأ منه:

 filter { mutate { replace => [ "received", "%{[received][-1]}" ] } grok { match => [ "received", "from %{HOSTNAME:hostname} \(%{HOSTNAME:full_hostname} \[%{IP:ip}\]\)" ] } mutate { remove_field => [ "received" ] } }

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

  • نوع الخطأ
  • شدة الخطأ
  • أي تفاصيل خطأ مدرجة في البريد الإلكتروني

لنفترض أنك أدخلت اسم الخطأ ، على سبيل المثال "فشل عنصر واجهة المستخدم" ، بالإضافة إلى خطورة الخطأ "ERROR" في موضوع البريد الإلكتروني مثل هذا: "خطأ: فشل عنصر واجهة المستخدم في / var / www / myapp / foobar .php 20 ".

سنستخدم هذا لتعيين عدة خصائص للحدث:

 filter { grok { match => [ "subject", "%{WORD:severity}: %{DATA:type} in %{PATH:path} %{POSINT:line}" ] } }

يأتي Logstash مع عدد من الأنماط المحددة مسبقًا التي يمكنك توقع رؤيتها في السجلات وأماكن مختلفة أخرى. استخدمها لبناء أنماط Grok الخاصة بك وتسهيل قراءتها. لقد استخدمنا "WORD" (كلمة واحدة) ، و "DATA" (مجمع غير جشع) ، و "PATH" (مسار ملف Unix أو Windows) و "POSINT" (عدد صحيح موجب). يمكنك أيضًا استخدام Grok Debugger لتصحيح أخطاء أنماط Grok الخاصة بك. الرسائل التي لا تتطابق مع النمط سيتم تمييزها بعلامة “_grokparsefailure”.

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

ضبط دقيق لوغستاش

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

 filter { mutate { # gsub takes 3 elements per substitution: field, regular expression and substitution gsub => [ "message", "Your Dev Team", "", "message", "More error details:", "" ] } mutate { strip => "message" } # Split the message into an array of lines, each containing a line of the stacktrace mutate { split => [ "message", "\n" ] } }

تستخدم طفرة "gsub" كائن Ruby Regexp القياسي ، لذا تتوفر جميع الخيارات والميزات في logstash أيضًا.

الإخراج عبر Elasticsearch و Amazon SNS

دعنا نطبق هذا على مثيل Elasticsearch الخاص بنا باستخدام إخراج Logstash Elasticsearch حتى نتمكن بسهولة من البحث وتحديد البيانات التي نجمعها:

 output { if "_grokparsefailure" not in [tags] { elasticsearch { } } }

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

يأتي Logstash مع عدد كبير من المخرجات ، لذلك دعونا نحسن هذا أكثر باستخدام مخرجات SNS لإعلامنا بالأخطاء الجسيمة باستخدام خدمة الإشعارات البسيطة من Amazon (SNS). سنفترض أن جميع الأخطاء من النوع "قابل للإبلاغ" تحتاج إلى إنشاء إشعار. إذا لم تكن تستخدم مثيل EC2 ، فستحتاج إلى تحديد مفتاح وسر AWS.

 output { if "notifiable" in [tags] { sns { region => "us-east-1" arn => "arn:aws:sns:us-east-1:1234567890123456:mytopic" access_key_id => "AWS ACCESS_KEY" # Only specify these if you're not on an EC2 instance secret_access_key => "AWS ACCESS SECRET" # Only specify these if you're not on an EC2 instance } } }

يعود الأمر إليك بشأن وضع علامة على الأخطاء على أنها "قابلة للإبلاغ". يمكنك القيام بذلك من خلال النظر إلى مدى خطورة الخطأ أو النظر إلى نوع الخطأ.

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