

آموزش Splunk در این صفحه، راهنمایی عملی و جامع است برای هر کسی که میخواهد از جمعآوری لاگ تا تحلیل پیشرفته و ساخت داشبوردهای حرفهای را بهصورت مرحلهبهمرحله یاد بگیرد. ابتدا میفهمید Splunk چیست و چگونه دادهها را ایندکس میکند، سپس نصب، ورود دادهها (UF/HEC)، پارسینگ (props/transforms)، جستجو با SPL، و در نهایت آلارم، امنیت، و مقیاسپذیری را تمرین میکنید. با مثالهای واقعی (مثل Nginx) و نکات بهینهسازی (tstats، Acceleration) پیش میروید تا سریعتر و دقیقتر تحلیل کنید. اگر دنبال یک مرجع فارسی عمیق برای Splunk هستید، از همینجا شروع کنید.
Splunk یک پلتفرم Observability و Analytics دادههای رویدادی است که لاگها، متریکها و رخدادها را از منابع متنوع جمعآوری، ایندکس و قابلجستجو میکند. خروجی: جستوجوی سریع، بصریسازی، آلارم و کشف الگو/ناهنجاری برای تیمهای DevOps، SecOps و BizOps.
Universal Forwarder (UF): عامل سبک برای جمعآوری و ارسال لاگ از سرورها/کانتینرها.
Heavy Forwarder (HF): عامل با قابلیت پردازش (پارس/فیلتر/مسیردهی) قبل از ایندکس.
Indexer: دریافت، پارس، ایندکس و ذخیرهسازی دادهها؛ پاسخگوی اولیه به جستجو.
Search Head (SH): رابط کاربری، مدیریت جستجوها/داشبوردها/آلارمها.
Deployment Server / Cluster Master / Deployer / Monitoring Console: اجزای مدیریتی.
مدل لایسنس: معمولاً بر اساس حجم ورودی روزانه.
Index: فضای منطقی ذخیرهسازی (مثلاً main، web, security).
Sourcetype: الگوی فرمت داده (مثلاً access_combined یا json).
Host/Source: منشأ فیزیکی/مسیر فایل.
Bucket Lifecycle: hot → warm → cold → (اختیاری) frozen.
Linux (خلاصهٔ عملی):
# 1) ایجاد کاربر اختصاصی
sudo useradd -m splunk
sudo su – splunk
# 2) نصب (فرض: بستهٔ .tgz در /opt)
cd /opt
tar -xzf splunk-<version>-linux.tgz
/opt/splunk/bin/splunk start –accept-license
# 3) ساخت کاربر ادمین و ورود به وب
# وب UI پیشفرض: http://<host>:8000
Windows: نصبگر را اجرا کنید، سرویس Splunk را بهعنوان Service Account امن نصب کنید، پورت 8000 را بررسی کنید.
تنظیمات اولیهٔ حیاتی:
تغییر پورتها در صورت نیاز، فعالسازی SSL برای UI، زمانبندی پشتیبانگیری از کانفیگها.
در UI: Add Data → Monitor → Files & Directories
نکته: sourcetype صحیح، تعیین index اختصاصی.
ارسال از سرورها به HF/Indexer (پورت UDP/TCP).
برای حجم بالا: TCP و صفبندی؛ چرخش لاگ و محدود کردن نرخ.
در Settings → Data Inputs → HTTP Event Collector: یک Token بسازید.
ارسال نمونه (cURL):
curl -k https://splunk:8088/services/collector \
-H “Authorization: Splunk <TOKEN>” \
-d ‘{“event”:”hello”,”sourcetype”:”my_json”,”host”:”web-1″,”fields”:{“env”:”prod”}}’
دیتابیسها (DB Connect)، کلود (S3، GCS)، کانتینر/کوبِرنِتِس (UF + HEC)، متریکها (StatsD/TELEGRAF→HEC).
اهداف: زمان، جداسازی رویداد، استخراج فیلد، روتینگ/ریرایت.
$SPLUNK_HOME/etc/system/local/props.conf (یا در اپ اختصاصی):
[my_nginx]
SHOULD_LINEMERGE = false
TIME_FORMAT = %d/%b/%Y:%H:%M:%S %z
TIME_PREFIX = \[
LINE_BREAKER = ([\r\n]+)
TRUNCATE = 100000
REPORT-extract = my_nginx_fields
transforms.conf:
[my_nginx_fields]
REGEX = ^(?P<client>[^ ]+) [^ ]+ [^ ]+ \[(?P<time>[^\]]+)\] “(?P<method>\w+) (?P<uri>[^”]+) HTTP/(?P<httpver>[^”]+)” (?P<status>\d{3}) (?P<bytes>\d+)
FORMAT = client::$1 time::$2 method::$3 uri::$4 httpver::$5 status::$6 bytes::$7
نکتهٔ حرفهای: تا حد ممکن از sourcetype استاندارد (مثل access_combined) استفاده کنید تا با CIM سازگار باشید.
index=web sourcetype=access_combined status>=500 earliest=-24h@h latest=now
| stats count by status uri
| sort - count
search/فیلتر اولیه، سپس Pipe به دستورات آماری/تبدیلی.
فیلترینگ: search, where, fields, dedup
تبدیل/محاسبه: eval, replace, coalesce, split, mvexpand
آمار: stats, eventstats, streamstats, timechart, chart
پردازش متن/JSON: rex, spath, replace, match
ترنزاکشن/سشن: transaction (محتاطانه برای هزینهٔ محاسباتی بالا)، جایگزین با stats+streamstats
Lookup/KV: lookup, inputlookup, outputlookup
کارایی: tstats روی Data Modelهای شتابگرفته، accelerate، summary indexing.
نرخ خطای 5xx به تفکیک سرویس/مسیر:
index=web sourcetype=access_combined status>=500
| bin _time span=5m
| stats count as errors by _time uri
| timechart span=5m sum(errors) by uri limit=10
Anomaly Detection ساده با z-score:
index=web sourcetype=access_combined status=200
| bin _time span=5m
| stats count as hits by _time
| eventstats avg(hits) as avg stdev(hits) as stdev
| eval z=(hits-avg)/stdev
| where z>3
تحلیل JSON (مثلاً لاگ اپلیکیشن):
index=app sourcetype=my_json
| spath| stats count by level component error.code
| where level="ERROR"
CSV Lookup: تطبیق شناسهها با توضیحات/تگها.
KV Store: ذخیرهٔ کلید-مقدار پایدار برای پیکرهبندی/وایتلیست/بلکلیست.
CIM (Common Information Model): استانداردسازی فیلدها برای اپهای امنیتی/مانیتورینگ.
Data Model & Acceleration: ایجاد لایهٔ تحلیلی و استفاده از tstats برای سرعت بالا.
نمونهٔ tstats:
| tstats count where index=web by host, sourcetypeپنلها، base search و post-process برای صرفهجویی منابع.
توکنها (tokens) برای فیلتر پویا.
UI مدرن با ویجتهای غنی و JSON-based.
بهترینروش: جداسازی لایهٔ جستوجو (saved searches) از لایهٔ ارائه.
Trigger Conditions: آستانهها، تغییرات درصدی، ناهنجاری.
Actions: ایمیل، وبهوک، ServiceNow/Jira، نوشتن به Index.
Throttling: جلوگیری از اسپم آلارم.
Notable Events: در سناریوهای امنیتی/ES.
RBAC: نقشها → قابلیتها → دسترسی به Indexها.
HEC Tokens: حداقل سطح دسترسی، چرخش دورهای، محدودیت سورس/اندپوینت.
TLS: برای UI و HEC فعال کنید؛ گواهی معتبر.
Secrets Management: محافظت از گذرواژهها و credها.
Indexer Clustering: کپیبرداری داده (Replication Factor) و جستجوپذیری (Search Factor).
Search Head Clustering: هماهنگی اشیای دانشی/جستجوها بین SHها.
Multisite: تابآوری بین دیتاسنترها.
Partitioning منطقی: ایندکسهای جدا برای محیطها/دامنههای لاگ.
Guidelines جستجو: فیلتر با index/sourcetype، محدود کردن بازهٔ زمانی، fields برای کاهش payload.
Acceleration: Report/Data Model Acceleration، Summary Indexing.
Metrics Index: برای متریکها از mstats استفاده کنید (فشرده، سریع).
Base + Post-Process: یک جستجوی سنگین → چند پنل سبک.
Sampling: sample/head برای تست.
Monitoring Console (DMC): سلامت ایندکسر/سرچهد، تاخیر ایندکس، خطاها.
btool: تشخیص منبع نهایی کانفیگها.
$SPLUNK_HOME/bin/splunk btool props list my_nginx --debug
diag: بستهٔ عیبیابی برای پشتیبانی.
splunk diag
internal logs: ایندکسهای _internal, _audit برای بررسی مشکلات و کارایی.
هدف: نرخ ارور، کندی پاسخ، و نقاط داغ ترافیک را نظارت کنیم.
روی سرور وب UF نصب کنید و مسیر access.log/error.log را مانیتور کنید.
sourcetype=access_combined و index=web تعیین کنید.
در props.conf زمان/line breaking را تثبیت کنید.
در صورت JSON در error.log از INDEXED_EXTRACTIONS=json یا spath در سرچ استفاده کنید.
KPIها: RPS, نرخ 5xx, میانگین bytes, توزیع status.
Top URIs, Top Clients, Latency percentiles (اگر زمان پاسخ را دارید).
index=web sourcetype=access_combined
| eval is_error=if(status>=500,1,0)
| bin _time span=1m
| stats count as rps sum(is_error) as errors avg(bytes) as avg_bytes by _time| eval err_rate=round(100*errors/rps,2)
اگر err_rate > 2% بهمدت 10 دقیقه → ایمیل/وبهوک.
Throttle: 30 دقیقه.
index=web sourcetype=access_combined status>=500
| bin _time span=5m
| stats count as errors by _time uri
| eventstats avg(errors) as avg stdev(errors) as sd by uri
| eval z=(errors-avg)/sd
| where z>3برای هر دامنهٔ داده index اختصاصی و retention متناسب.
sourcetype استاندارد و سازگار با CIM انتخاب کنید.
تا میتوانید پارس را در ایندکس انجام دهید (پایداری و کارایی بهتر).
برای داشبوردها از saved searches و base search استفاده کنید.
آلارمها را با Throttle و متن عملیاتی (Playbook) تنظیم کنید.
بهطور منظم DMC را بررسی و capacity planning داشته باشید.
نسخه/اپها را در App اختصاصی نگهداری و ورژنگذاری کنید (Git).
دسترسیها را با RBAC حداقلی مدیریت کنید؛ Tokenها را بچرخانید.
برای متریکها بهجای لاگ از metrics index بهره ببرید.
کانفیگها را با btool اعتبارسنجی و با diag پشتیبانگیری کنید.
Splunk Enterprise vs Splunk Cloud؟
Cloud مدیریت زیرساخت را بر عهده میگیرد؛ Enterprise انعطاف و کنترل کامل On-Prem میدهد.
Universal Forwarder یا Heavy Forwarder؟
UF سبک و پرکاربرد است؛ اگر قبل از ایندکس به پارس/مسیردهی پیچیده نیاز دارید HF.
چه زمانی transaction مناسب است؟
برای همبندی رویدادهای مرتبط (مثل شروع/پایان سشن). در اغلب موارد stats/streamstats کاراتر است.
tstats چه مزیتی دارد؟
روی Data Modelهای شتابگرفته جستجو میکند؛ بسیار سریعتر از stats روی raw events.