راهنمای جامع جستجو و تحلیل دادهها در Splunk

اسپلانک (Splunk) یکی از قدرتمندترین ابزارها برای مدیریت، تحلیل و بصریسازی (Visualization) دادههای ماشین است. این دادهها که شامل لاگها، رویدادها و دیگر دادههای ایجادشده توسط سیستمها و برنامهها هستند، اغلب حجم بالایی دارند و تحلیل آنها به شیوههای سنتی میتواند چالشبرانگیز باشد. اسپلانک با ارائه یک رابط کاربری پیشرفته و استفاده از زبان پردازش اسپلانک (SPL)، کاربران را قادر میسازد تا به سرعت اطلاعات موردنیاز خود را از میان حجم وسیعی از دادهها استخراج کرده و به تصمیمگیریهای هوشمندانهتر کمک کنند.
درک نحوه استفاده از زبان پردازش اسپلانک (SPL) و جستجوی دقیق در دادهها، برای بهرهبرداری کامل از تواناییهای این ابزار ضروری است. در این مقاله، گام به گام با اصول اولیه جستجو در اسپلانک آشنا میشوید، از دستورات ساده گرفته تا تحلیلهای پیشرفته و بصریسازی دادهها. همچنین نکات و تکنیکهایی برای بهینهسازی عملکرد جستجو و مدیریت دادهها ارائه شده است تا به شما کمک کند از دادههای خود بهترین استفاده را ببرید.
۱. شروع با جستجوی پایه
برای کار با اسپلانک، اولین قدم جستجوی دادهها با استفاده از دستورات پایه است. اسپلانک تمامی دادههای شما را در ساختاری به نام ایندکس ذخیره میکند. هر ایندکس مانند یک مخزن داده است که اطلاعات مرتبط به یک سیستم، اپلیکیشن یا دستهبندی خاص را نگهداری میکند. برای شروع، باید مشخص کنید که دادههای مورد نظر در کدام ایندکس قرار دارد.
دستور پایه:
index=<نام ایندکس>
این دستور تمامی دادههای موجود در ایندکس مورد نظر را نمایش میدهد. به عنوان مثال:
index=web_logs
این کوئری، تمام دادههای مربوط به لاگهای وب را برمیگرداند.
نمایش کلیه ایندکسها:
اگر نام ایندکس مورد نظر خود را نمیدانید، میتوانید از بخش مدیریت اسپلانک (Settings > Indexes) لیست ایندکسهای موجود را مشاهده کنید یا در محیط جستجو نام ایندکسها را بیابید.
| eventcount summarize=false index=*
ترکیب جستجوی ساده:
برای بهدست آوردن اطلاعات خاص از دادههای ایندکسشده، میتوانید مستقیماً کلمات کلیدی یا فیلدها را همراه دستور پایه استفاده کنید. این ترکیب ساده به شما کمک میکند تا نتایج را محدود کرده و به دادههای مرتبطتری دست یابید.
مثال:
index=web_logs error
این دستور، تمامی دادههایی که شامل کلمه “error” هستند را در ایندکس web_logs برمیگرداند.
استفاده از فیلترهای ساده
شما میتوانید فیلترهای بیشتری به دستور جستجو اضافه کنید تا نتایج دقیقتر شوند. به عنوان مثال:
index=web_logs status=404
این دستور تمامی درخواستهایی را که دارای وضعیت 404 هستند، از لاگهای وب بازیابی میکند.
کار با زمانبندی
جستجو در اسپلانک بهصورت پیشفرض تمام دادهها را بدون توجه به زمانبندی خاصی انجام میدهد. اما در اغلب موارد، نیاز دارید که جستجوی خود را به یک بازه زمانی خاص محدود کنید. از دو روش برای تنظیم زمانبندی میتوان استفاده کرد:
- تنظیمات رابط کاربری (UI): در بالای صفحه جستجو، گزینهای برای تعیین زمانبندی (Last 15 minutes, Last 24 hours, Custom) وجود دارد.
- استفاده از دستورات SPL:
index=web_logs earliest=-7d latest=now
با استفاده از این اصول پایه، میتوانید اولین قدمهای خود را در جستجو و استخراج دادههای موردنیاز در اسپلانک بردارید.
۲. فیلتر کردن با استفاده از فیلدها
یکی از ویژگیهای کلیدی Splunk توانایی فیلتر کردن دادهها براساس فیلدها (Fields) است. در هر دادهای که در Splunk ایندکس شده است، اطلاعاتی تحت عنوان فیلد وجود دارند که شامل مقادیر کلیدی هستند. این فیلدها میتوانند از نوع ازپیشتعریفشده (مانند: host, source, sourcetype) یا سفارشی باشند (مانند: status, method, user_agent).
جستجوی دادهها با استفاده از فیلدها
برای محدود کردن نتایج به دادههایی که دارای مقدار مشخصی در یک فیلد هستند، میتوانید از دستور زیر استفاده کنید:
index=<نام ایندکس> field_name=<مقدار>
مثال:
index=web_logs status=200
این کوئری تمامی رکوردهایی که وضعیت HTTP آنها برابر با 200 است را برمیگرداند.
کاربرد فیلترهای چندگانه
میتوانید چندین فیلد را به صورت ترکیبی استفاده کنید تا دادهها را بیشتر محدود کنید:
index=web_logs status=200 method=GET
این دستور تنها رکوردهایی را که وضعیت 200 دارند و از متد GET استفاده میکنند، برمیگرداند.
عملگرهای منطقی در فیلترها
- OR: برای نمایش دادههایی که حداقل یکی از شرایط را داشته باشند:
index=web_logs status=200 OR status=404
این دستور تمام لاگهایی که وضعیت 200 یا 404 دارند را جستجو میکند.
- NOT: برای حذف دادههایی که شرایط خاصی دارند:
index=web_logs status!=200
این دستور تمام لاگهایی بهجز وضعیت 200 را برمیگرداند.
استفاده از Wildcard در فیلترها
اگر نمیدانید مقدار دقیق یک فیلد چیست یا بهدنبال مقادیری مشابه هستید، میتوانید از کاراکتر * استفاده کنید:
index=web_logs url_path=/home*
این دستور تمامی لاگهایی که مسیر URL آنها با /home شروع میشود را برمیگرداند.
جستجو در مقادیر عددی
برای فیلتر کردن دادههایی با مقادیر عددی خاص، میتوانید از عملگرهای مقایسهای استفاده کنید:
- مقدار بزرگتر یا کوچکتر:
index=server_logs response_time>500
- این دستور لاگهایی را که زمان پاسخ بالاتر از 500 میلیثانیه داشته باشند، نمایش میدهد.
- بین دو مقدار:
index=server_logs response_time>=300 response_time<=800
- این دستور لاگهایی را که زمان پاسخ بین 300 تا 800 میلیثانیه دارند، برمیگرداند.
کشف فیلدها با ابزار Field Extractor
اگر مطمئن نیستید که کدام فیلدها در دسترس هستند:
- یک جستجوی پایه در اسپلانک اجرا کنید (مانند index=web_logs).
- در قسمت نتایج، به تب Selected Fields یا Interesting Fields مراجعه کنید. این بخش، فیلدهای موجود در دادههای شما را نمایش میدهد.
- فیلدی که نیاز دارید را به جستجوی خود اضافه کنید.
استفاده عملی از فیلترها
یک نمونه جستجوی واقعی:
index=web_logs status=500 host=webserver1 source="/var/log/nginx/error.log"
این دستور لاگهای خطای وضعیت 500 را از سرور webserver1 و مسیر خاص لاگ error.log جستجو میکند.
با فیلتر کردن صحیح دادهها، میتوانید جستجوهای دقیقتری اجرا کرده و سریعتر به نتایج مورد نظر خود دست یابید.
۴. جستجوهای پیشرفته با دستورات SPL
Splunk Processing Language (SPL) یکی از مهمترین ابزارها برای مدیریت و تحلیل دادهها در Splunk است. این زبان به شما امکان میدهد تا جستجوهای پیچیدهتری انجام دهید و دادهها را با استفاده از دستورات مختلف پردازش، گروهبندی و تجزیهوتحلیل کنید.
ساختار کلی دستورات SPL
هر کوئری SPL از چندین بخش تشکیل میشود که با کاراکتر | به یکدیگر متصل میشوند. هر بخش، خروجی مرحله قبل را به عنوان ورودی دریافت کرده و پردازش جدیدی روی دادهها انجام میدهد.
مثال:
index=<نام ایندکس> | command1 | command2 | ...
دستورات اصلی SPL
۱. دستور stats برای آمارگیری
index=web_logs | stats count by status
این دستور دادهها را براساس یک یا چند فیلد گروهبندی کرده و عملیات آماری مانند جمع، میانگین و شمارش را انجام میدهد.
مثال:
این دستور تعداد رویدادها را براساس کد وضعیت (status) نمایش میدهد.
مثالهای پیشرفته:
- میانگین اندازه پاسخ:
index=web_logs | stats avg(bytes) by status
- حداکثر و حداقل زمان پاسخ:
index=server_logs | stats max(response_time) min(response_time) by host
۲. دستور timechart برای تحلیل زمانی
این دستور دادهها را در طول زمان جمعآوری و در قالب یک جدول زمانی سازماندهی میکند.
مثال:
index=web_logs | timechart count by status
این دستور تعداد رویدادها را براساس کد وضعیت و در طول زمان نمایش میدهد.
نکات:
- برای بازههای زمانی خاص، از گزینه span استفاده کنید:
index=web_logs | timechart span=1h count by status
- این دستور دادهها را در بازههای یکساعته گروهبندی میکند.
۳. دستور eval برای محاسبات و تبدیلها
با استفاده از دستور eval میتوانید مقادیر فیلدها را تغییر دهید یا فیلدهای جدیدی ایجاد کنید.
مثال:
index=web_logs | eval response_time_ms=response_time*1000
این دستور یک فیلد جدید به نام response_time_ms ایجاد میکند که زمان پاسخ را به میلیثانیه تبدیل میکند.
نمونههای کاربردی:
برچسبدهی به رویدادها براساس شرط:
index=web_logs | eval status_label=if(status==200, "Success", "Failure")
- محاسبه درصد استفاده از منابع:
index=server_logs | eval cpu_usage_percent=(cpu_used/cpu_total)*100
۴. دستور sort برای مرتبسازی دادهها
index=web_logs | eval status_label=if(status==200, “Success”, “Failure”)
برای مرتبسازی نتایج براساس مقادیر فیلدها استفاده میشود.
مثال:
این دستور تعداد درخواستها براساس کد وضعیت را مرتب کرده و بیشترین تعداد را در بالا نمایش میدهد.
نکات:
- مرتبسازی نزولی: sort -field_name
- مرتبسازی صعودی (پیشفرض): sort field_name
۵. دستور where برای فیلترهای پیشرفته
index=web_logs | where bytes > 5000
از این دستور برای ایجاد فیلترهای پیشرفته و اعمال شرط بر روی دادهها استفاده میشود.
مثال:
این دستور فقط رکوردهایی را نمایش میدهد که فیلد bytes بزرگتر از ۵۰۰۰ باشد.
نمونههای پیشرفته:
index=web_logs | where status=200 AND response_time<300
۶. دستور dedup برای حذف مقادیر تکراری
این دستور رکوردهای تکراری براساس فیلد خاصی را حذف میکند.
مثال:
index=web_logs | dedup user_ip
این دستور فقط یک رکورد از هر آدرس IP کاربر را نمایش میدهد.
۷. دستور regex برای استفاده از عبارات منظم
index=web_logs | regex _raw="error|fail"
این دستور برای استخراج، فیلتر یا حذف دادهها براساس Regular Expressions استفاده میشود.
مثال:
این دستور فقط رکوردهایی را که شامل عبارت error یا fail در محتوای خام (_raw) هستند، نمایش میدهد.
ترکیب دستورات برای جستجوهای پیچیده
ترکیب دستورات SPL امکان ایجاد تحلیلهای پیچیدهتر را فراهم میکند. به مثال زیر توجه کنید:
index=web_logs status=200 | stats count by user_agent | sort -count | where count > 10
- درخواستهایی با وضعیت 200 جستجو میشوند.
- تعداد درخواستها براساس مرورگر (user_agent) شمارش میشود.
- نتایج براساس بیشترین تعداد درخواست مرتب میشوند.
- فقط مرورگرهایی که تعداد درخواستهای آنها بیشتر از 10 است نمایش داده میشوند.
نکات مهم در جستجوهای پیشرفته
- بهینهسازی کوئریها: فقط فیلدهای موردنیاز را جستجو کنید و از دستورات سنگین مانند join یا transaction کمتر استفاده کنید.
- گروهبندی زمانی: در تحلیل زمانی حتماً بازههای مناسب (span) تعریف کنید تا جستجوها سریعتر شوند.
- نگهداری خوانایی: کوئریهای طولانی را با استفاده از کامنت یا تفکیک دستورات بهینه کنید.
جستجوهای پیشرفته با دستورات SPL به شما این امکان را میدهد که دادهها را به روشی کارآمد و خلاقانه تحلیل کنید و اطلاعات ارزشمندی از آن استخراج نمایید.
در ادامه این مقاله: راهنمای جامع جستجو و تحلیل دادههای پیشرفته در Splunk
مطالب زیر را حتما بخوانید
-
مبانی و تکنیکهای ذخیرهسازی دادهها در اسپلانک: از ایندکسها تا امنیت و مقیاسپذیری
130 بازدید
-
راهنمای جامع نصب، پیکربندی و راهاندازی Splunk Enterprise Security برای تحلیل پیشرفته تهدیدات امنیتی
199 بازدید
-
راهنمای جامع نصب و راهاندازی Splunk در معماری مقیاس بزرگ: تفکیک کامپوننتها و پیکربندی حرفهای
156 بازدید
-
راهنمای نصب و راهاندازی Splunk روی لینوکس
154 بازدید
-
راهنمای جامع جستجو و تحلیل دادههای پیشرفته در Splunk
175 بازدید
-
مقایسه Splunk ES با IBM QRadar برترین های SIEM
3.29k بازدید
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.