تحليل سجلات النظام المركزية (Centralized Logging) باستخدام ELK Stack


أهلاً يا جماعة، مهندس أنظمة لينكس هنا. اليوم بنتكلم عن موضوع مهم جداً لأي حد بيشتغل في إدارة الأنظمة: تحليل السجلات المركزية باستخدام ELK Stack. الموضوع ده هيوفر عليك وقت ومجهود كبير في تتبع المشاكل والأداء.

ليه أصلاً نحتاج سجلات مركزية؟

تخيل عندك 50 سيرفر، وكل سيرفر بيطلع سجلات خاصة بيه (أباتشي، Nginx، سجلات نظام، إلخ). لو حصلت مشكلة، هتدخل على كل سيرفر وتشوف السجلات يدوي؟ مستحيل! هنا تيجي أهمية السجلات المركزية:

  • رؤية شاملة: كل السجلات في مكان واحد.
  • سهولة البحث: تقدر تبحث عن أي شيء في كل السجلات بسرعة.
  • اكتشاف الأخطاء: تحديد المشاكل بسرعة أكبر.
  • تحسين الأداء: مراقبة الأداء وتحديد الاختناقات.
  • الأمان: مراقبة محاولات الاختراق أو الأنشطة المشبوهة.

إيه هو ELK Stack؟

ELK هي اختصار لـ Elasticsearch، Logstash، و Kibana. مؤخراً، انضاف ليها Beats (زي Filebeat) عشان يكمل المنظومة. دي مكونات الـ Stack:

  • Elasticsearch: محرك بحث وتحليلات قوي جداً. بيخزن السجلات ويفهرسها عشان تقدر تبحث فيها بسرعة خرافية.
  • Logstash: خط أنابيب لمعالجة البيانات. بياخد السجلات من مصادر مختلفة، بيعمل عليها فلترة وتحويل، وبعدين بيبعتها لـ Elasticsearch.
  • Kibana: واجهة رسومية (GUI) بتخليك تستعرض بياناتك في Elasticsearch، تعمل داشبوردات وتقارير جميلة وتفهم اللي بيحصل في نظامك.
  • Beats (مثل Filebeat): عميل خفيف (Lightweight agent) بيتم تثبيته على السيرفرات عشان يجمع السجلات ويبعتها لـ Logstash أو Elasticsearch مباشرة.

يلا نركب ELK Stack (بشكل مبسط)!

هنركز هنا على الخطوات الأساسية، وافترض إنك بتشتغل على توزيعة لينكس زي CentOS أو Ubuntu.

1. تثبيت Elasticsearch

أول حاجة، لازم يكون عندك Java (JRE) مثبتة. Elasticsearch بيعتمد عليها.

ملاحظة: استخدم أحدث إصدارات متوافقة من كل مكونات ELK لضمان أفضل أداء وميزات.

على Debian/Ubuntu:

sudo apt update
sudo apt install default-jre
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
sudo apt update
sudo apt install elasticsearch
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

بعد التثبيت، ممكن تتأكد إن Elasticsearch شغال بإنك تزور http://localhost:9200 من نفس السيرفر.

2. تثبيت Kibana

Kibana بيستخدم نفس مستودع Elasticsearch.

على Debian/Ubuntu:

sudo apt install kibana
sudo systemctl enable kibana
sudo systemctl start kibana

ممكن توصل لـ Kibana عن طريق http://localhost:5601 (غير البورت لو غيرته في الكونفيج).

نصيحة أمان: في بيئة الإنتاج، لازم تأمن الوصول لـ Elasticsearch و Kibana باستخدام جدار حماية (Firewall) وشهادات SSL وربما Basic Auth أو X-Pack Security.

3. تثبيت Logstash

برضه بيستخدم نفس المستودع.

على Debian/Ubuntu:

sudo apt install logstash

بعد التثبيت، لازم نعدل ملف إعدادات Logstash عشان يعرف منين ياخد السجلات وفين يوديها. ده مثال لملف بسيط logstash.conf في /etc/logstash/conf.d/:

input {
  beats {
    port => 5044
  }
}

filter {
  # هنا ممكن تضيف فلاتر زي:
  # grok { match => { "message" => "% {COMBINEDAPACHELOG}" } }
  # date { match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ] }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "my-app-logs-%{+YYYY.MM.dd}"
  }
  stdout { codec => rubydebug } # عشان تشوف الإخراج في الطرفية للتصحيح
}

بعد ما تحفظ الملف، شغل Logstash:

sudo systemctl enable logstash
sudo systemctl start logstash

4. تثبيت Filebeat (على السيرفرات اللي عايز تجمع سجلاتها)

Filebeat هو اللي هيجمع السجلات من السيرفرات بتاعتك ويبعتها لـ Logstash (أو Elasticsearch مباشرة لو مش محتاج معالجة مسبقة).

على Debian/Ubuntu (على السيرفر العميل):

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
sudo apt update
sudo apt install filebeat

عدل ملف إعدادات Filebeat في /etc/filebeat/filebeat.yml:

  • فعل الـ filebeat.inputs عشان تحدد ملفات السجلات اللي عايز تجمعها. مثال:
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/syslog
    - /var/log/*.log
  fields:
    env: production
    app_name: system
  • عطل الإخراج لـ Elasticsearch وفعّل الإخراج لـ Logstash، وعدّل الـ hosts لعنوان الـ IP بتاع سيرفر Logstash:
output.logstash:
  hosts: ["YOUR_LOGSTASH_SERVER_IP:5044"]

بعد الحفظ، شغل Filebeat:

sudo systemctl enable filebeat
sudo systemctl start filebeat

الـ Flow ماشي إزاي؟

العملية ببساطة كالتالي:

  1. Filebeat: بيراقب ملفات السجلات على السيرفرات العميلة.
  2. Filebeat: بيبعت السجلات الجديدة لـ Logstash على البورت 5044.
  3. Logstash: بيستقبل السجلات، بيحللها، بيعمل عليها أي فلترة أو تحويلات محتاجها.
  4. Logstash: بيبعت السجلات المعالجة لـ Elasticsearch.
  5. Elasticsearch: بيفهرس السجلات وبيخزنها.
  6. Kibana: بتستخدمه عشان تعرض السجلات، تعمل بحث، وتبني داشبوردات عشان تشوف كل حاجة بتحصل في نظامك في الوقت الفعلي.

إيه الخطوة الجاية؟

بعد ما كله يشتغل، ادخل على Kibana (عادةً على بورت 5601). أول حاجة هتعملها هي إنك تحدد الـ Index Pattern. غالباً هيكون حاجة زي my-app-logs-* (لو استخدمت الاسم ده في Logstash). بعدين، تقدر تروح لقسم Discover وتشوف كل السجلات اللي جاية، وتبدأ تبني داشبورداتك في Visualize و Dashboard.

نصيحة متقدمة: استكشف الـ Modules الجاهزة في Filebeat (مثل system, apache, nginx) بتوفر عليك وقت كبير في إعداد الـ parsers لسجلات شائعة.

وبكده نكون عملنا نظرة سريعة وعملية على إعداد نظام سجلات مركزية باستخدام ELK Stack. الموضوع فيه تفاصيل كتير طبعاً (زي الـ security، الـ scaling، الـ advanced filters)، بس دي البداية اللي هتخليك تحط رجلك على أول الطريق. بالتوفيق!