Goaccess: في الوقت الحقيقي مع سجل متعدد

تم إنشاؤها على ٢٣ ديسمبر ٢٠١٦  ·  3تعليقات  ·  مصدر: allinurl/goaccess

أهلا بكم،

هل هناك طريقة للحصول على وضع الوقت الفعلي مع سجل في ملفات متعددة (تدوير السجل) مثل access.log.0 و access.log.1 و ...؟ أنا أستخدم nginx ، لكنه ليس خاصًا به ويجب أن يكون مشكلة شائعة.

إنه سهل بدون الوقت الفعلي حيث يمكننا فقط تجميع كل السجل وتشغيل البرنامج عليه.

تكمن المشكلة في أنني إذا استخدمت فقط -f access.log.0 ليس لدي بياناتي القديمة (ولست متأكدًا من أنه عند إجراء تدوير السجل ، فسوف يحتفظ بالبيانات الحالية؟). أو إذا أعدت تشغيل goaccess ، فسأفقد البيانات القديمة.

إحدى الطرق التي وجدتها هي تحميل تجميع الملفات القديمة بـ --keep-db ، ثم بدء goaccess بـ - read-from-disk and --keep-db ولكن إذا أعدت تشغيله عدة مرات في نفس اليوم ، البيانات من acess.log.0 - إعادة قراءتها والاحتفاظ بها عدة مرات. لذلك لا يزال غير حل.

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

شكرا،
توم

duplicate enhancement

التعليق الأكثر فائدة

لقد دفعت التزامًا يتيح القدرة على إخراج إحصائيات مباشرة من دفق أو STDIN غير مغلق ، على سبيل المثال ، tail -f بالإضافة إلى تحليل سجلات متعددة في الوضع المباشر:

goaccess --log-format=COMBINED access.log access.log.1

أو

tail -f access.log | goaccess --log-format=COMBINED -

او حتى

tail -f access.log | goaccess --log-format=COMBINED -o report.html --real-time-html -

كما أنه يفتح إمكانية تصفية البيانات الحية من الأنبوب مثل:

tail -f access.log | grep -i --line-buffered 'firefox' | goaccess --log-format=COMBINED -

شيء واحد يجب ملاحظته هو أن Tail -f ستبقي الأنبوب مفتوحًا حتى عندما يكون goaccess قد خرج بالفعل. على سبيل المثال ، سيخرج tail -f syslog | grep -q 'cron' tail على SIGPIPE ، لكنه سيحصل فقط على SIGPIPE حتى تتم كتابة بايت إضافي في الملف tail'd. على الرغم من أن SIGTERM, SIGINT يجب أن يغلق الذيل بشكل جيد.

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

ال 3 كومينتر

لا توجد حاليًا طريقة للحصول على وظائف الوقت الفعلي عند توصيل عدة ملفات سجلات. سيتم تناول هذا في # 428 و # 459. كما قلت ، سيكون الحل البديل هو تخصيص سجلات متعددة وإلحاقها بملف سجل جديد وإدخال ذلك في GoAccess.

ومع ذلك ، فقط لتوضيح دوران السجل ، سيعرض GoAccess محتويات ملف السجل الجديد كما في حالة tail -F .

نعم ! ينتظر.

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

zcat /var/log/nginx/access.log*gz | goaccess -p /etc/goaccess.conf -a -o /dev/null --keep-db-files
goaccess -p /etc/goaccess.conf -f /var/log/nginx/access.log --real-time-html -a -o /usr/share/nginx/html/goaccess.html --load-from-disk

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

لقد دفعت التزامًا يتيح القدرة على إخراج إحصائيات مباشرة من دفق أو STDIN غير مغلق ، على سبيل المثال ، tail -f بالإضافة إلى تحليل سجلات متعددة في الوضع المباشر:

goaccess --log-format=COMBINED access.log access.log.1

أو

tail -f access.log | goaccess --log-format=COMBINED -

او حتى

tail -f access.log | goaccess --log-format=COMBINED -o report.html --real-time-html -

كما أنه يفتح إمكانية تصفية البيانات الحية من الأنبوب مثل:

tail -f access.log | grep -i --line-buffered 'firefox' | goaccess --log-format=COMBINED -

شيء واحد يجب ملاحظته هو أن Tail -f ستبقي الأنبوب مفتوحًا حتى عندما يكون goaccess قد خرج بالفعل. على سبيل المثال ، سيخرج tail -f syslog | grep -q 'cron' tail على SIGPIPE ، لكنه سيحصل فقط على SIGPIPE حتى تتم كتابة بايت إضافي في الملف tail'd. على الرغم من أن SIGTERM, SIGINT يجب أن يغلق الذيل بشكل جيد.

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

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

eroldru picture eroldru  ·  3تعليقات

ArunDahiya1 picture ArunDahiya1  ·  3تعليقات

SerenaAi picture SerenaAi  ·  3تعليقات

canepa picture canepa  ·  3تعليقات

LoanDEV picture LoanDEV  ·  3تعليقات