ایندکسر در اسپلانک

ایندکس یک نوع خاص از استوریج داده می باشد. برای سادگی یک ایندکس یک ریپوزیتوری داده می باشد. به عنوان مثال برای پیدا کردن یک دیتا می شود آن را با ایندکس آن پیدا کرد.

دونوع ایندکس داریم :

Event Indexes

این نوع هر گونه داده متنی را ذخیره می کنند و نوع پیش فرض می باشند.

Metric Indexed

این نوع ایندکس برای ذخیره سازی داده های متریک استفاده می شود که باید با ساختار تعریف شده مطابق داشته باشد. دستوراتی که با m شروع می شوند مانند mstats و … برای کار با این نوع داده می باشند.

به صورت پیش فرض چندین ایندکس Event دارد که در زیر آنها را بررسی می کنیم :‌

Main

ایندکس پیش فرض که اگر ایندکسی روی ورودی خروجی مشخص نگردد از این ایندکس استفاده می شود.

summary

ایندکس پیش فرض خلاصه سازی برای نگه داشتن اطلاعات خلاصه داده.

_internal

برای نگه داری لاگ های داخلی اسپلانک از یک رنج از منابع داخلی مانند : splunkd daemon logs, web access logs, scheduler logs, python logs و موارد دیگر.

_audit

ذخیره کننده داده های مربوط به ورودها و جستجو ها و دسترسی به داده ها و فعالیت های ادمین.

_introspection

اطلاعات مربوط به مصرف منابع و پرفورمنس اسپلانک را ذخیره می کند. برنامه مانیتورینگ اسپلانک به این اطلاعات وابستگی شدیدی دارد.

_fishbucket

اطلاعات مربوطه به چک پوینت ورودی های فایل های ورودی را نگه داری می کند.

_telemetry

اطلاعات مربوط به instrumentation را درصورتی که در فایل telemetry.conf فعال شده باشد نگهداری می کند.

راه های مختلفی برای ایجاد ایندکسر وجود دارد اما در هرحال پیکربندی در فایل indexes.conf در داخل ایندکسر قرار می گیرد.

indexer :

یک instance از اسپلانک است که داده های ورودی را پردازش می کند قبل از ایندکس سازی و به کویری های جستجو پاسخ می دهد که توسط Search Head ارسال شده است.

برای دیدن ایندکس های پیکربندی شده از دستور زیر می توانیم استفاده کنیم :‌

 more /opt/splunk/etc/system/default/indexes.conf

ایندکس ها شامل داده های رسیده شده به صورت فرمت فشرده شده می باشند که به آنها Raw Data می گوییم. همچنین شامل فایل ایندکس به نام tsidx و متادیتا فایل ها هستند.

ایندکس ها داده ها را در فرم باکت Bucket مرتب سازی می کنند.

ایندکس ها به صورت پیش فرض در مسیر زیر ذخیره می شوند که به نام $SPLUNK_DB شناخته می شوند :

$SPLUNK_HOME/var/lib/splunk

وقتی داده داخل یک ایندکس ریخته شد دیگر نهایی شده و قابل تغییرات نمی باشد.

وقتی یک کاربر که دسترسی can_delete را دارد داده ای را با دستور delete اجرا می کند این داده از جستجو خارج می شود و مارک حذف شده می گیرد. اما برای اینکه به صورت کامل از دیتابیس کامل شود باید دستور splunk clean با احتیاط فراوان زده شود.

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

فهمیدن مفهوم باکت :

باکت ها قسمت های داخلی ایندکس ها هستند. آنها شامل داده های خام و فایل های ایندکس می باشند. آنها در فرم فولدر داخل سیستم فایلی مرتب می شوند و یک الگوی نامگذاری خاص دارند.

اگر تنظیمات یک ایندکس را داخل فایل indexes.conf را ببینیم موارد زیر تعریف شده است :

[_introspection]
homePath   = $SPLUNK_DB/_introspection/db
coldPath   = $SPLUNK_DB/_introspection/colddb
thawedPath = $SPLUNK_DB/_introspection/thaweddb
maxDataSize = 1024
frozenTimePeriodInSecs = 1209600

برای این ایندکس می بینیم که تعریف های زیر وجود دارد :

homePath :

برای نگهداری باکت های Hot و Warm

coldPath :

برای ذخیره کردن باکت cold

thawedPath :

ذخیره سازی داده های Preprocessed برای ایندکس سازی مجدد

همه باکت ها با پسوند db داخل پیکربندی مشخص می گردند. انواع باکتها به شرح زیر می باشند:

Hot - Warm - Cold - Frozan - Thawed

Hot :

شامل داده های تازه رسیده می باشد قبل از اینکه ذخیره شوند. داده ها وارد فرایند Parse شدن می شوند و از میان متریک های لایسنس عبور می کنند. این باکت قابلیت Read و Write به صورت همزمان را دارد. در همان مسیر Homepath اطلاعات ذخیره می شوند و شامل کلمه hot می باشند.

Warm :

اطلاعات از باکت Hot به باکت warm در سه سناریو وارد می شوند :

۱- وقتی ایندکسر ریست می شود.
۲- وقتی هات باکت به مقدار سایز ماگزیمم می رسد (maxDataSize)
۳- وقتی مقدار عمر ماکزیمم باکت به سر آمده باشد (maxHotSpanSpecs)

در همان مسیر Hot ذخیره سازی می شود. و فقط قابل خواندن هستند. به صورت زیر نامگذاری می شوند :

db_<earlieattime>_<latesttime>_uniqueid

زمان ها بر اساس epoch time هستند. وقتی یک جستجویی انجام می شود بر اساس زمان سیستم می داند که باید روی کدام یک از این داده ها جستجو را انجام دهد.

Cold :

بعد از اینکه شرایط مشخصی اتفاق افتاد اسپلانک داده ها را وارد قسمت Cold می کند. نام باکت ها همانند warm باقی می ماند. قدیمی ترین باکت warm ابتدا جابجا می شود وقتی مسیر HomePath به مقدار maxDataSizeMB می رسدیا اینکه تعداد باکت های warm به مقدار maxWarmDBCount برسد. داده ها در باکت Cold قابل خواندن و جستجو کردن هستند.

Frozen :

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

باکت Frozen قابل جستجو نیستند. شما می توانید چه از طریف coldToFrozenScript و coldToFrozenDir برای جابجایی داده ها از باکت Cold به باکت Frozen استفاده کنید. اگر هیچ کدام از این دو مورد استفاده نگردد داده ها پس از تمام شدن عمرشان در باکت Cold حذف خواهند شد. اگر هر دو مشخص شده باشند coldToFrozenDir ارجحیت دارد.

شرایط برای حذف داده ها در باکت سرد یا جابجایی به باکت Frozen یا وقتی است که دیتا در باکت Cold به آخر عمرش رسیده باشد که در تنظیمات frozenTimePeriodInSecs مشخص گردیده است . یا وقتی که ماگزیمم سایز حجم ایندکس فرا رسیده باشد. مدت زمان عمر باکت نسبت به سایز ارجحیت دارد هنگام حذف یا انتقال داده ها به باکت Frozen.

Thawed :

این باکت هم به صورت اختیاری می باشد و با باکت Frozen کار می کند. ما می دانیم که در باکت Frozen نمی توان چیزی را جستجو کرد. برای آنکه بتوان در باکت Frozen چیزی را جستجو کرد داده باید از باکت Frozen به مسیر thawedPath کپی شود و با دستور زیر اطلاعات مجدد ساخته شود :

./splunk rebuild <bucket>

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