بدأت سلسلة من المقالات حيث أريد مشاركة تجربتي في ربط Exchange و ELK. ستساعدك هذه المجموعة في معالجة كميات كبيرة من السجلات ولا تتساءل عن الحجم الذي سترفض أدوات التسجيل المعتادة مساعدتنا. دعنا نتعرف على المقاتل الجديد بالسجلات.
الصرف لديه نظام تسجيل واسع النطاق إلى حد ما. أكثر السجلات شيوعًا هي سجلات التتبع ، التي تتبع المرور خطوة بخطوة لحرف معين داخل المؤسسة البريدية ؛ سجلات خادم الويب ، التي تتعقب كل جلسة مستخدم جديدة في النظام ، وسجلات تطبيقات الويب المحددة بدرجات متفاوتة من دقة الجلسة. يمكن لـ Exchange أيضًا تخزين بروتوكولات smtp و imap و pop3 الأولية.
ما هي الأدوات التي يمكننا استخدامها للعمل مع السجلات:
- معيار Get-MessageTrackingLog cmdlet: ملائم للتعامل مع سجلات التعقب ؛
- أداة logparser: تستخدم لغة بحث pseudo-SQL للتسجيل وتعمل بسرعة كبيرة ؛
- خادم SQL خارجي: لحالات محددة بشكل خاص (على سبيل المثال ، تحليل البيانات على مدى فترات زمنية طويلة).
كل هذا يعمل بشكل جيد عندما يكون لدينا خادمان ويقاس حجم السجلات المعالجة بعشرات أو مئات الجيجابايت. ولكن ماذا لو كان هناك عشرات الخوادم وتجاوز حجم السجلات واحد تيرابايت؟ من المرجح أن يبدأ هذا المخطط في الانهيار.
وإليك ما يحدث: يبدأ Get-MessageTrackingLog في الانخفاض بسبب انتهاء المهلة ، ويصل logparser إلى سقف بنية 32 بت ، والتحميل إلى فواصل خادم SQL في أكثر اللحظات غير المناسبة ، دون استيعاب استثناء متعدد الخطوط من الخدمة.
هنا يدخل لاعب جديد إلى المشهد - مكدس ELK ، المصمم خصيصًا للتعامل مع كميات ضخمة من السجلات في وقت معقول وباستهلاك مقبول للموارد.
في الجزء الأول سأشرح بالتفصيل كيفية توصيل Filebeat ، وهو جزء من مكدس ELK- مسؤول عن قراءة وإرسال ملفات نصية بسيطة تكتب عليها التطبيقات المختلفة سجلاتها. في المقالات التالية ، سوف نتناول المزيد من التفاصيل حول مكونات Logstash و Kibana.
التركيب
لذلك ، يمكن تنزيل أرشيف ملف وكيل filebeat من هذا الموقع .
سنكمل التثبيت ببساطة عن طريق تفريغ محتويات الملف المضغوط. على سبيل المثال ، في
c:\Program Files\filebeat. ثم تحتاج إلى تشغيل برنامج PowerShell النصي install-service-filebeat.ps1الذي يأتي مع المجموعة لتثبيت خدمة Filebeat.
نحن الآن جاهزون لبدء تخصيص ملف التكوين.
التسامح مع الخطأ
يضمن Filebeat تسليم السجلات إلى نظام تجميع السجلات. يتم ذلك عن طريق الاحتفاظ بسجل للإدخالات في ملفات السجل. يخزن السجل معلومات حول تلك السجلات التي تمت قراءتها من ملفات السجل ، ويضع علامة على السجلات المحددة التي تم تسليمها إلى الوجهة.
إذا تعذر تسليم بعض السجلات ، فسيحاول filebeat إرسالها مرة أخرى حتى يتلقى تأكيدًا بالتسليم من نظام الاستلام أو يتم حذف ملف السجل الأصلي أثناء الدوران.
عند إعادة تشغيل الخدمة ، سيقرأ filebeat المعلومات حول آخر سجلات تمت قراءتها وتسليمها من السجل وسيقرأ السجلات في ملفات السجل بناءً على المعلومات الموجودة في السجل.
يتيح لك ذلك تقليل مخاطر فقدان المعلومات حول السجلات التي يجب إرسالها إلى خوادم مرنة \ logstash في عملية الفشل غير المتوقع وتنفيذ عمليات صيانة الخادم.
يمكنك قراءة المزيد عن هذا في الوثائق في الفقرات : كيف يحافظ Filebeat على حالة الملفات وكيف يضمن Filebeat التسليم مرة واحدة على الأقل؟
التخصيص
تتم جميع التكوينات في ملف تكوين التنسيق
yml، والذي ينقسم إلى عدة أقسام. دعونا نلقي نظرة على بعض منهم الذين يشاركون في جمع السجلات من خوادم Exchange.
وحدة معالجة السجل
تبدأ كتلة معالجة السجل بالحقل:
filebeat.inputs:
سوف نستخدم أداة مشتركة لجمع السجلات:
- type: log
بعد ذلك ، نشير إلى الحالة (ممكّن) والمسارات إلى المجلد بالسجلات. على سبيل المثال ، في حالة سجلات IIS ، يمكن أن تكون الإعدادات كما يلي:
enabled: true
paths:
- C:\inetpub\logs\LogFiles\W3SVC1\*.log
- C:\inetpub\logs\LogFiles\W3SVC2\*.log
إعداد آخر مهم هو كيفية قراءة Filebeat للتسجيلات متعددة الأسطر. بشكل افتراضي ، يعتبر filebeat أن سطر واحد من ملف السجل هو سجل واحد. يعمل هذا بشكل جيد ، طالما أننا لا نبدأ في تلقي الاستثناءات المتعلقة بالتشغيل غير الصحيح للخدمة في السجل. في هذه الحالة ، يمكن أن تمتد الاستثناءات على عدة أسطر. لذلك يجب أن يتعامل filebeat مع السجل متعدد الأسطر على أنه واحد إذا كان السطر التالي يبدأ بتاريخ. يكون تنسيق تسجيل السجلات في Exchange كما يلي: يبدأ كل سجل جديد في ملف السجل بتاريخ. في التكوين ، تبدو هذه الحالة كما يلي:
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: after
من المنطقي إضافة علامات إلى المنشور الذي ترسله ، على سبيل المثال:
tags: ['IIS', 'ex-srv1']
ولا تنسَ استبعاد الأسطر التي تبدأ برمز التجزئة من المعالجة:
exclude_lines: ['^#']
لذلك ، ستبدو كتلة قراءة السجلات كما يلي:
filebeat.inputs:
- type: log
enabled: true
paths:
- C:\inetpub\logs\LogFiles\W3SVC1\*.log
- C:\inetpub\logs\LogFiles\W3SVC2\*.log
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: after
tags: ['IIS', 'ex-srv1']
exclude_lines: ['^#']
كتلة إرسال السجل
يرسل Filebeat إدخالات فردية في ملف السجل ككائن json ، حيث يتم تضمين إدخال محدد من السجل في حقل رسالة واحد. إذا أردنا العمل بطريقة ما مع هذه المعلومات ، نحتاج أولاً إلى تحليل هذا الحقل إلى حقول منفصلة. يمكن القيام بذلك ، على سبيل المثال ، في logstash. سيكون هو المستفيد من السجلات من Filebeat. هذا هو الشكل الذي قد يبدو عليه في ملف تكوين Filebeat:
output.logstash:
hosts: ["logstash1.domain.com:5044"]
إذا كانت هناك عدة خوادم ، فيمكن تمكين الموازنة لها: عندئذٍ سيرسل filebeat السجلات ليس إلى أول خادم متاح من القائمة ، ولكنه سيوزع السجلات المرسلة بين عدة خوادم:
hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
loadbalance: true
Filebeat ، عند معالجة السجلات في json المرسل ، بالإضافة إلى إدخال السجل ، الموجود في حقل الرسالة ، يضيف قدرًا معينًا من البيانات الوصفية ، مما يؤثر على حجم المستند الذي يصبح مرنًا. يمكن إزالة هذه البيانات الوصفية بشكل انتقائي من الإرسال. يتم ذلك في كتلة المعالج باستخدام المعالج
drop_fields. يمكنك استثناء الحقول التالية ، على سبيل المثال:
processors:
- drop_fields:
fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]
يجب التعامل مع اختيار الحقول المستبعدة بعناية ، لأنه يمكن استخدام بعضها على الجانب المرن لبناء الفهارس.
لذلك ، سيبدو حظر إرسال السجلات كما يلي:
output.logstash:
hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
loadbalance: true
processors:
- drop_fields:
fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]
إعدادات التسجيل في Filebeat
من المنطقي تعيين إعدادات التسجيل التالية:
- معلومات مستوى التسجيل ؛
- نكتب السجلات إلى الملفات الموجودة افتراضيًا (دليل السجلات ، في دليل تثبيت filebeat) ؛
- اسم ملف السجل هو filebeat ؛
- احتفظ بآخر 10 ملفات سجل ؛
- ابدأ التدوير عندما يصل الحجم إلى 1 ميغا بايت.
أخيرًا ، ستبدو كتلة إعدادات التسجيل كما يلي:
logging.level: info
logging.to_files: true
logging.files:
name: filebeat
keepfiles: 10
rotateeverybytes: 1048576
التكوين النهائي
لقد جمعنا التكوين ، والآن يبدو كما يلي:
filebeat.inputs:
- type: log
enabled: true
paths:
- C:\inetpub\logs\LogFiles\W3SVC1\*.log
- C:\inetpub\logs\LogFiles\W3SVC2\*.log
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: after
tags: ['IIS', 'ex-srv1']
exclude_lines: ['^#']
output.logstash:
hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
loadbalance: true
processors:
- drop_fields:
fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]
logging.level: info
logging.to_files: true
logging.files:
name: filebeat
keepfiles: 10
rotateeverybytes: 1048576
من المهم أن نفهم أن تنسيق ملف التكوين هو yml. لذلك ، من المهم وضع المسافات وعلامات الطرح بشكل صحيح.
يمكن لـ Filebeat فحص ملف التكوين ، وإذا كانت البنية تحتوي على أخطاء ، فستشير إلى أي سطر ومكان في السطر غير صحيح بناء الجملة. يتم الفحص على النحو التالي:
.\filebeat.exe test config
كما يمكن لـ filebeat التحقق من توفر الشبكة لجهاز استقبال السجل. بدأ الشيك مثل هذا:
.\filebeat.exe test output
في الأجزاء التالية سأتحدث عن اتصال التبادل والصداقة مع مكونات Logstash و Kibana.