أفضل طريقة لتجميع ملفات سجل متعددة من عدة خوادم [مغلق]

StackOverflow https://stackoverflow.com/questions/83741

سؤال

أحتاج إلى طريقة بسيطة لمراقبة ملفات السجل النصية المتعددة الموزعة على عدد من خوادم HP-UX.وهي عبارة عن مزيج من الملفات النصية وملفات سجل XML من العديد من الأنظمة القديمة الموزعة.حاليًا نقوم فقط بتوصيل الخوادم واستخدامها الذيل -و و grep, ، لكن هذا لا يتسع عندما يكون لديك العديد من السجلات لتتبعها.

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

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

ما تنسيق السجل الذي يجب أن أحاول التحويل إليه إذا أردت تنفيذه بهذه الطريقة؟

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

هل كانت مفيدة؟

المحلول

خيارات:

  1. استخدم JackAppender لإرسال كافة السجلات إلى خادم واحد مباشرة.(قد يؤدي ذلك إلى إعاقة الأداء وإضافة نقطة فشل واحدة.)
  2. استخدم البرامج النصية لتجميع البيانات.أستخدم مفاتيح scp وssh والمصادقة للسماح للبرامج النصية الخاصة بي بالحصول على البيانات من جميع الخوادم دون أي مطالبات بتسجيل الدخول.

نصائح أخرى

من المحتمل أن يكون الحل الأخف وزنًا لمشاهدة السجلات في الوقت الفعلي هو الاستخدام قذيفة راقصة في الوضع المتزامن مع tail -f:

dsh -Mac -- tail -f /var/log/apache/*.log
  • إن -a مخصص لجميع أسماء الأجهزة التي قمت بتعريفها في ~/.dsh/machines.list
  • -c مخصص للتشغيل المتزامن للذيل
  • يضيف -M اسم المضيف إلى كل سطر من المخرجات.

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

#!/bin/bash
FILE=$1
for box in box1.foo.com box2.foo.com box3.foo.com box4.foo.com; do
     ssh $box tail -f $FILE &
done

فيما يتعلق بتعليق Mike Funk حول عدم القدرة على قتل الخلاف مع ^C ، أقوم بتخزين ما سبق في ملف يسمى multitails.sh وألحق ما يلي إلى نهايته.هذا ينشئ ملف kill_multitails.sh الذي تقوم بتشغيله عند الانتهاء من الخلاف ، ثم يحذف نفسه.

# create a bash script to kill off 
# all the tails when you're done
# run kill_multitails.sh when you're finished

echo '#!/bin/sh' > kill_multitails.sh
chmod 755 kill_multitails.sh
echo "$(ps -awx | grep $FILE)" > kill_multitails_ids
perl -pi -e 's/^(\d+).*/kill -9 $1/g' kill_multitails_ids
cat kill_multitails_ids >> kill_multitails.sh
echo "echo 'running ps for it'" >> kill_multitails.sh
echo "ps -awx | grep $FILE" >> kill_multitails.sh
echo "rm kill_multitails.sh" >> kill_multitails.sh
rm kill_multitails_ids


wait

لوغسكيب - مثل الروعة بدون ثمن

متعدد الذيلأو

"رقاقة هي أداة لتحليل ومراقبة السجلات المحلية والبعيدة لمسؤولي النظام والمطورين.
فهو يجمع ميزات العينة، والمحملة، والذيل، وgrep، وccze، والبريد في واحد، مع بعض الإضافات"

على سبيل المثال.

chip -f -m0 = 'run' -s0 = 'red' -M1 = '.*' -S1 user1@remote_ip1: '/var/log/log1/var/log/log/var/log/log3 user2@remote_ip2 : '/var/log/log1/var/log/log2/var/log/log3' '| Egrep "Run | ==> /"

سيؤدي ذلك إلى تسليط الضوء على حمراء النمط -M0 ، مرشحًا مسبقًا للنمط "Run | ==> /" من جميع ملفات السجل.

لقد كتبت vsConsole لهذا الغرض بالضبط - سهولة الوصول إلى ملفات السجل - ثم أضفت مراقبة التطبيق وتتبع الإصدار.أود أن أعرف ما رأيك في ذلك. http://vs-console.appspot.com/

يوفر Awstats برنامج Perl النصي الذي يمكنه دمج العديد من ملفات سجل Apache معًا.يتوسع هذا البرنامج النصي جيدًا نظرًا لأن مساحة الذاكرة منخفضة جدًا، ولا يتم تحميل ملفات السجلات في الذاكرة أبدًا.أعلم أن هذا ليس ما تحتاجه بالضبط، ولكن ربما يمكنك البدء من هذا البرنامج النصي وتكييفه ليناسب احتياجاتك.

يمكنك استخدام أجهزة الاستقبال المتنوعة المتوفرة مع Chainsaw (VFSLogFilePatternReceiver لإرسال الملفات عبر ssh وSocketReceiver وUDDPreceiver وCustomSQLDBReceiver وما إلى ذلك) ثم تجميع السجلات في علامة تبويب واحدة عن طريق تغيير معرف علامة التبويب الافتراضية أو إنشاء "لوحة تسجيل التعبير المخصصة" من خلال توفير تعبير يطابق الأحداث الموجودة في علامات تبويب المصدر المختلفة.

gltail - تصور في الوقت الفعلي لحركة مرور الخادم والأحداث والإحصائيات باستخدام Ruby وSSH وOpenGL من خوادم متعددة

XpoLog لجافا

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top