نکات و ترفندهایی برای تبدیل داده های بدون ساختار از لاگ به ELK Stack با استفاده از GROK در LogStash

ساختار داده های بدون ساختار با GROK

اگر از پشته Elastic (ELK) استفاده می کنید و علاقه مند به نگاشت لاگ های سفارشی Logstash به Elasticsearch هستید، این پست برای شما مناسب است.

نکات و ترفندهایی برای تبدیل داده های بدون ساختار از لاگ به ELK Stack با استفاده از GROK در LogStash

پشته ELK مخفف سه پروژه منبع باز است: Elasticsearch، Logstash و Kibana. آنها با هم یک پلت فرم مدیریت لاگ را تشکیل می دهند.

  • ارزیابی جستجو یک سیستم جستجو و تحلیل است.
  • لگستاش یک خط لوله پردازش داده در سمت سرور است که داده ها را از چندین منبع به طور همزمان دریافت می کند، آن را تبدیل می کند و سپس آن را به یک "پنهان" مانند Elasticsearch می فرستد.
  • کیبانا به کاربران اجازه می دهد تا داده ها را با استفاده از نمودارها و نمودارها در 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 چیست. ارائه هر یک از موارد در زیر مشخص شده است.

نمای ساخت یافته از داده های ما

  • localhost == محیط
  • روش GET ==
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • 400 == پاسخ_وضعیت
  • ​ 46ms == پاسخ_زمان
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

همانطور که در داده های ساختاریافته می بینیم، نظمی برای لاگ های بدون ساختار وجود دارد. مرحله بعدی پردازش نرم افزاری داده های خام است. اینجاست که گروک می درخشد.

قالب های Grok

قالب های داخلی Grok

Logstash دارای بیش از 100 قالب داخلی برای ساختاردهی داده های بدون ساختار است. قطعاً باید هر زمان که ممکن است برای سیستم‌های لاگ عمومی مانند آپاچی، لینوکس، هاپروکسی، aws و غیره از این مزیت استفاده کنید.

با این حال، چه اتفاقی می‌افتد هنگامی که شما لاگ‌های سفارشی مانند مثال بالا دارید؟ شما باید قالب Grok خود را بسازید.

قالب های سفارشی Grok

شما باید سعی کنید قالب Grok خود را بسازید. من استفاده کردم Grok Debugger и الگوهای گروک.

توجه داشته باشید که نحو قالب 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 را نصب کرده اید، به پیکربندی 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 در Kibana به روز کنید!

نکات و ترفندهایی برای تبدیل داده های بدون ساختار از لاگ به ELK Stack با استفاده از GROK در LogStash

با Grok، داده های ورود به سیستم شما ساختار یافته است!

نکات و ترفندهایی برای تبدیل داده های بدون ساختار از لاگ به ELK Stack با استفاده از GROK در LogStash

همانطور که در تصویر بالا می بینیم، Grok می تواند به طور خودکار داده های گزارش را با Elasticsearch مطابقت دهد. این امر مدیریت گزارش‌ها و جستجوی سریع اطلاعات را آسان‌تر می‌کند. به جای کاوش در فایل‌های گزارش برای اشکال‌زدایی، می‌توانید به سادگی بر اساس آنچه به دنبال آن هستید، مانند یک محیط یا یک آدرس اینترنتی، فیلتر کنید.

عبارات 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 پیوند به منبع

کانال تلگرام توسط ارزیابی جستجو

منبع: www.habr.com

اضافه کردن نظر