سؤال

لقد كتبت تطبيقًا يقوم بجمع سجلات Windows من Linux ، عبر حزمة Zenoss Wmi-Client.

ويستخدم WQL للاستعلام عن سجل الأحداث وتوصيف العائد. مشكلتي هي محاولة العثور على أحدث إدخال في السجل.

تعثرت عبر هذه الذي يخبرني أن أستخدم عمود NumberOfRecords في استعلام مثل هذا

Select NumberOfRecords from Win32_NTEventLogFile Where LogFileName = 'Application'

واستخدم قيمة الإرجاع من ذلك كأعلى سجل.

سؤالي هو ، لقد سمعت أن سجل أحداث Windows عبارة عن مخزن مؤقت دائري ، وهو يكتب فوقه أقدم سجلات مع سجلات جديدة مع امتلاء السجل. هل سيكون لهذا تأثير على الرقم الأرقام ، كما لو أن ذلك يحدث ، ستستمر خاصية "سجل السجل" للأحداث في الزيادة ، ومع ذلك فإن العدد الفعلي للسجلات في سجل الأحداث لن يتغير (كما هو الحال بالنسبة لكل إدخال مكتوب ، يتم إسقاط واحد ).

هل يمكن لأي شخص أن يلقِ نظرة ثاقبة على كيفية عمل هذا فعليًا (سواء كان عدد الأرقام القياسية هو أعلى عدد من السجلات ، أو العدد الفعلي للأحداث في السجل) ، وربما اقترح حلًا؟

تحديث

لذلك نحن نعلم الآن أن NumberOfRecords لن تعمل لوحدها لأن سجل الأحداث هو مخزن مؤقت. يتمثل حل MS في الحصول على أقدم سجل وإضافته إلى NumberOfRecords للحصول على أحدث سجل فعلي.

هذا ممكن من خلال Winapi ، لكنني أتصل عن بعد من Linux. هل يعرف أحد كيف يمكنني تحقيق ذلك في السيناريو الخاص بي؟

شكرًا

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

المحلول

لن يكون NumberOfRecords دائمًا رقم السجل الأقصى لأن السجل دائري ويمكن مسح السجل وقد يكون لديك إدخال واحد ولكن رقم السجل هو 1000.

ستكون الطريقة التي ستفعل بها ذلك باستخدام واجهة برمجة تطبيقات Win هي الحصول على أقدم رقم سجل وإضافة عدد السجلات في السجل للحصول على رقم سجل Max. لا يبدو أن win32_nteventlogfile لديه أقدم حقل رقم سجل لاستخدامه.

هل تحاول الحصول على أحدث سجل في كل مرة تقوم فيها بالاستعلام عن السجل؟ يمكنك استخدام الوقت الذي تم إنشاؤه وقتًا عند الاستعلام عن Win32_ntlogevent للحصول على كل شيء> الآن. يمكنك تكرار تلك القائمة للعثور على رقم سجل Max الخاص بك.

نصائح أخرى

أنت بحاجة إلى رقم سجل لأحدث السجلات ، ولكن لا توجد طريقة سريعة للحصول عليه. بشكل عام ، عليك أن:

SELECT RecordNumber FROM Win32_NTLogEvent WHERE LogFile='Application'

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

ولكن! يمكنك الحصول على عدد من السجلات:

SELECT NumberOfRecords FROM Win32_NTEventlogFile WHERE LogfileName='Application'

هذا سريع جدا. ثم قلل من التحديد لتسريع البحث عن أحدث سجل:

SELECT RecordNumber FROM Win32_NTLogEvent WHERE LogFile='Application' AND RecordNumber>='_number_of_records_'

وقت تنفيذ هذا <= من الحالة العامة.

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