ساختار داده های بدون ساختار با GROK
اگر از پشته Elastic (ELK) استفاده می کنید و علاقه مند به نگاشت لاگ های سفارشی Logstash به Elasticsearch هستید، این پست برای شما مناسب است.
پشته ELK مخفف سه پروژه منبع باز است: Elasticsearch، Logstash و Kibana. آنها با هم یک پلت فرم مدیریت لاگ را تشکیل می دهند.
- ارزیابی جستجو یک سیستم جستجو و تحلیل است.
- لگستاش یک خط لوله پردازش داده در سمت سرور است که داده ها را از چندین منبع به طور همزمان دریافت می کند، آن را تبدیل می کند و سپس آن را به یک "پنهان" مانند Elasticsearch می فرستد.
- کیبانا به کاربران اجازه می دهد تا داده ها را با استفاده از نمودارها و نمودارها در Elasticsearch تجسم کنند.
ضربه بعداً آمد و یک ارسال کننده داده سبک وزن است. معرفی Beats، Elk Stack را به Elastic Stack تبدیل کرد، اما موضوع این نیست.
این مقاله درباره Grok است، که یکی از ویژگیهای Logstash است که میتواند لاگهای شما را قبل از ارسال به انبار تغییر دهد. برای اهداف ما، من فقط در مورد پردازش داده ها از Logstash به Elasticsearch صحبت خواهم کرد.
Grok یک فیلتر در داخل Logstash است که برای تجزیه داده های بدون ساختار به چیزی ساختاریافته و قابل پرس و جو استفاده می شود. روی یک عبارت منظم (regex) قرار می گیرد و از الگوهای متنی برای مطابقت با رشته ها در فایل های گزارش استفاده می کند.
همانطور که در بخش های بعدی خواهیم دید، استفاده از Grok در مدیریت کارآمد لاگ تفاوت بزرگی ایجاد می کند.
بدون Grok دادههای گزارش شما بدون ساختار است
بدون 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 به شرح زیر است: %{SYNTAX:SEMANTIC}
اولین کاری که سعی کردم انجام دهم این بود که به برگه بروید گردش در دیباگر Grok. من فکر میکردم اگر این ابزار بتواند به طور خودکار یک الگوی Grok تولید کند، خیلی خوب است، اما از آنجایی که فقط دو مورد منطبق را پیدا کرد، خیلی مفید نبود.
با استفاده از این کشف، من شروع به ایجاد الگوی خود در اشکالزدای Grok با استفاده از نحو موجود در صفحه Elastic Github کردم.
پس از بازی با سینتکس های مختلف، سرانجام توانستم داده های گزارش را آنطور که می خواستم ساختار دهم.
لینک دیباگر Grok
متن اصلی:
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 به روز کنید!
با Grok، داده های ورود به سیستم شما ساختار یافته است!
همانطور که در تصویر بالا می بینیم، Grok می تواند به طور خودکار داده های گزارش را با Elasticsearch مطابقت دهد. این امر مدیریت گزارشها و جستجوی سریع اطلاعات را آسانتر میکند. به جای کاوش در فایلهای گزارش برای اشکالزدایی، میتوانید به سادگی بر اساس آنچه به دنبال آن هستید، مانند یک محیط یا یک آدرس اینترنتی، فیلتر کنید.
عبارات Grok را امتحان کنید! اگر راه دیگری برای انجام این کار دارید یا با مثال های بالا مشکلی دارید، فقط یک نظر در زیر بنویسید تا به من اطلاع دهید.
از خواندن متشکریم—و لطفاً برای مقالات مهندسی نرم افزار جالب تر، من را در اینجا در Medium دنبال کنید!
منابع
کانال تلگرام توسط
منبع: www.habr.com