نصائح وحيل لتحويل البيانات غير المهيكلة من السجلات إلى ELK Stack باستخدام GROK في LogStash

هيكلة البيانات غير المهيكلة مع GROK

إذا كنت تستخدم Elastic Stack (ELK) وكنت مهتمًا بتعيين سجلات Logstash المخصصة إلى Elasticsearch ، فإن هذا المنشور يناسبك.

نصائح وحيل لتحويل البيانات غير المهيكلة من السجلات إلى ELK Stack باستخدام GROK في LogStash

ELK stack هو اختصار لثلاثة مشاريع مفتوحة المصدر: Elasticsearch و Logstash و Kibana. معا يشكلون منصة إدارة السجل.

  • Elasticsearch هو نظام بحث وتحليلي.
  • Logstash هو عبارة عن مسار معالجة بيانات من جانب الخادم يقبل البيانات من مصادر متعددة في نفس الوقت ، ويحولها ، ثم يرسلها إلى "مخبأ" مثل Elasticsearch.
  • Kibana يسمح للمستخدمين بتصور البيانات باستخدام المخططات والرسوم البيانية في Elasticsearch.

يدق ظهر لاحقًا وهو ناقل بيانات سهل. أدى تقديم Beats إلى تحويل Elk Stack إلى Elastic Stack ، ولكن هذا ليس هو الهدف.

تتناول هذه المقالة Grok ، وهي ميزة في Logstash يمكنها تحويل سجلاتك قبل إرسالها إلى المخبأ. لأغراضنا ، سأتحدث فقط عن معالجة البيانات من Logstash إلى Elasticsearch.

نصائح وحيل لتحويل البيانات غير المهيكلة من السجلات إلى ELK Stack باستخدام GROK في LogStash

Grok هو عامل تصفية داخل Logstash يستخدم لتحليل البيانات غير المهيكلة إلى شيء منظم وقابل للاستعلام. يوجد أعلى التعبير العادي (regex) ويستخدم أنماط نصية لمطابقة السلاسل في ملفات السجل.

كما سنرى في الأقسام التالية ، فإن استخدام Grok يقطع شوطًا طويلاً عندما يتعلق الأمر بإدارة السجل الفعالة.

بدون Grok ، تكون بيانات السجل الخاصة بك غير منظمة

نصائح وحيل لتحويل البيانات غير المهيكلة من السجلات إلى ELK Stack باستخدام GROK في LogStash

بدون Grok ، عندما يتم إرسال السجلات من Logstash إلى Elasticsearch وعرضها في Kibana ، فإنها تظهر فقط في قيمة الرسالة.

يعد الاستعلام عن معلومات مفيدة في هذه الحالة أمرًا صعبًا لأن جميع بيانات السجل مخزنة في نفس المفتاح. سيكون من الأفضل لو كانت رسائل السجل منظمة بشكل أفضل.

البيانات غير المهيكلة من السجلات

localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0

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

للمطورين الأكثر خبرة ، ربما يمكنك تخمين ما يعنيه كل جزء وما هي رسالة السجل من استدعاء API. عرض كل عنصر مبين أدناه.

عرض منظم لبياناتنا

  • المضيف المحلي == البيئة
  • GET == طريقة
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • 400 == response_status
  • 46 مللي ثانية == وقت الاستجابة
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

كما نرى في البيانات المنظمة ، هناك طلب لسجلات غير منظمة. الخطوة التالية هي معالجة البيانات الأولية برمجيًا. هذا هو المكان الذي يضيء فيه Grock.

قوالب Grok

قوالب Grok المضمنة

يأتي Logstash مع أكثر من 100 قالب مدمج لهيكلة البيانات غير المهيكلة. يجب عليك بالتأكيد الاستفادة من هذا عندما يكون ذلك ممكنًا لمدونات النظام العامة مثل apache و linux و haproxy و aws وما إلى ذلك.

ومع ذلك ، ماذا يحدث عندما يكون لديك سجلات مخصصة كما في المثال أعلاه؟ يجب عليك بناء قالب Grok الخاص بك.

قوالب Grok المخصصة

يجب أن تحاول بناء قالب Grok الخاص بك. إستعملت مصحح أخطاء جروك и أنماط Grok.

لاحظ أن بناء جملة قوالب Grok كما يلي: %{SYNTAX:SEMANTIC}

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

نصائح وحيل لتحويل البيانات غير المهيكلة من السجلات إلى ELK Stack باستخدام GROK في LogStash

باستخدام هذا الاكتشاف ، بدأت في بناء القالب الخاص بي على مصحح أخطاء Grok باستخدام الصيغة الموجودة في صفحة Elastic Github.

نصائح وحيل لتحويل البيانات غير المهيكلة من السجلات إلى ELK Stack باستخدام GROK في LogStash

بعد التلاعب بصيغ مختلفة ، تمكنت أخيرًا من هيكلة بيانات السجل بالطريقة التي أريدها.

نصائح وحيل لتحويل البيانات غير المهيكلة من السجلات إلى ELK Stack باستخدام GROK في LogStash

الارتباط بمصحح أخطاء Grok https://grokdebug.herokuapp.com/

النص الأصلي:

localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0

نمط:

%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}

ماذا حدث في النهاية

{
  "environment": [
    [
      "localhost"
    ]
  ],
  "method": [
    [
      "GET"
    ]
  ],
  "url": [
    [
      "/v2/applink/5c2f4bb3e9fda1234edc64d"
    ]
  ],
  "response_status": [
    [
      "400"
    ]
  ],
  "BASE10NUM": [
    [
      "400"
    ]
  ],
  "response_time": [
    [
      "46ms"
    ]
  ],
  "user_id": [
    [
      "5bc6e716b5d6cb35fc9687c0"
    ]
  ]
}

مع وجود نموذج Grok والبيانات المعينة في متناول اليد ، فإن الخطوة الأخيرة هي إضافته إلى Logstash.

قم بتحديث ملف التكوين Logstash.conf

على الخادم حيث قمت بتثبيت ELK stack ، انتقل إلى تكوين Logstash:

sudo vi /etc/logstash/conf.d/logstash.conf

الصق تغييراتك.

input { 
  file {
    path => "/your_logs/*.log"
  }
}
filter{
  grok {
    match => { "message" => "%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}"}
  }
}
output {
  elasticsearch {
    hosts => [ "localhost:9200" ]
  }
}

بعد حفظ التغييرات ، أعد تشغيل Logstash وتحقق من حالته للتأكد من أنه لا يزال قيد التشغيل.

sudo service logstash restart
sudo service logstash status

أخيرًا ، للتأكد من سريان التغييرات ، تأكد من تحديث فهرس Elasticsearch لـ Logstash في كيبانا!

نصائح وحيل لتحويل البيانات غير المهيكلة من السجلات إلى ELK Stack باستخدام GROK في LogStash

مع Grok ، يتم تنظيم بيانات السجل الخاصة بك!

نصائح وحيل لتحويل البيانات غير المهيكلة من السجلات إلى ELK Stack باستخدام GROK في LogStash

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

جرب تجربة تعبيرات Grok! إذا كانت لديك طريقة أخرى للقيام بذلك ، أو كانت لديك أي مشاكل مع الأمثلة أعلاه ، فما عليك سوى ترك تعليق أدناه لإعلامي.

نشكرك على القراءة - ويرجى متابعتني هنا على موقع Medium لمزيد من مقالات هندسة البرمجيات الشيقة!

موارد

https://www.elastic.co/blog/do-you-grok-grok
https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns
https://grokdebug.herokuapp.com/

PS رابط المصدر

قناة برقية بواسطة Elasticsearch

المصدر: www.habr.com

إضافة تعليق