ترحيل قواعد الكشف عن Splunk إلى Azure Sentinel
توضح هذه المقالة كيفية تحديد قواعد الكشف عن Splunk ومقارنتها وترحيلها إلى قواعد Azure Sentinel المضمنة.
إذا كنت ترغب في ترحيل نشر Splunk Observability، فتعرف على المزيد حول كيفية الترحيل من Splunk إلى سجلات Azure Monitor.
تحديد القواعد وترحيلها
يستخدم Azure Sentinel تحليلات التعلم الآلي لإنشاء حوادث عالية الدقة وقابلة للتنفيذ، وقد تكون بعض عمليات الكشف الحالية متكررة في Azure Sentinel. لذلك، لا تقم بترحيل جميع قواعد الكشف والتحليلات بشكل أعمى. راجع هذه الاعتبارات خلال تحديد قواعد الكشف الحالية.
- تأكد من تحديد حالات الاستخدام التي تبرر ترحيل القواعد، مع مراعاة أولوية العمل وكفاءته.
- تحقق من فهمك أنواع قواعد Azure Sentinel.
- تحقق من فهمك للمصطلحات الخاصة بالقاعدة.
- راجع أي قواعد لم تشغل أي تنبيهات في الأشهر 6-12 الماضية، وحدد ما إذا كانت لا تزال ذات صلة.
- تخلص من التهديدات أو التنبيهات منخفضة المستوى التي تتجاهلها بشكل روتيني.
- استخدم الوظائف الموجودة، وتحقق مما إذا كانت قواعد التحليلات المضمنة في Microsoft Sentinel قد تعالج حالات الاستخدام الحالية. نظرا لأن Microsoft Sentinel يستخدم تحليلات التعلم الآلي لإنتاج أحداث عالية الدقة وقابلة للتنفيذ، فمن المحتمل أن بعض عمليات الكشف الحالية لن تكون مطلوبة بعد الآن.
- أكد مصادر البيانات المتصلة وراجع طرق اتصال البيانات الخاصة بك. أعد زيارة محادثات جمع البيانات لضمان عمق البيانات واتساعها عبر حالات الاستخدام التي تخطط للكشف عنها.
- اختبر قدرات تجربة ترحيل SIEM لتحديد ما إذا كانت الترجمة التلقائية مناسبة.
- استكشف موارد المجتمع مثل SOC Prime Threat Detection Marketplace للتحقق مما إذا كانت القواعد الخاصة بك متوفرة أم لا.
- ضع في اعتبارك ما إذا كان محول استعلام عبر الإنترنت مثل Uncoder.io يمكن أن يعمل مع القواعد الخاصة بك أم لا.
- إذا لم تكن القواعد متوفرة أو لا يمكن تحويلها، فيجب إنشاؤها يدويا، باستخدام استعلام KQL. راجع تعيين قواعد لإنشاء استعلامات جديدة.
تعرف على المزيد عن أفضل الممارسات لترحيل قواعد الكشف.
لترحيل قواعد التحليلات الخاصة بك إلى Azure Sentinel:
تأكد من وجود نظام اختبار لكل قاعدة تريد ترحيلها.
أعد عملية التحقق من الصحة للقواعد التي تم ترحيلها، بما في ذلك سيناريوهات الاختبار الكاملة والبرامج النصية.
تأكد من أن فريقك لديه موارد مفيدة لاختبار القواعد التي رحلت.
تأكد من حصولك علي أي مصادر بيانات مطلوبة متصلة، وراجع أساليب اتصال البيانات.
تحقق مما إذا كانت اكتشافاتك متاحة كقوالب مضمنة في Azure Sentinel:
استخدم تجربة ترحيل SIEM لأتمتة الترجمة والترحيل.
لمزيد من المعلومات، راجع استخدام تجربة ترحيل SIEM.
في حالة كون القواعد المضمنة كافية، فاستخدم نماذج القواعد المضمنة لإنشاء قواعد لمساحة العمل الخاصة بك.
في Azure Sentinel، انتقل إلى علامة التبويب Configuration > Analytics >Rule templates، وأنشئ وحدث كل قاعدة تحليلات ذات صلة.
لمزيد من المعلومات، راجع الكشف عن التهديدات الجاهزة.
إذا كان لديك اكتشافات لا تغطيها القواعد المضمنة في Microsoft Sentinel، فجرب محول استعلام عبر الإنترنت، مثل Uncoder.io أو SPL2KQL لتحويل استعلاماتك إلى KQL.
حدد شرط المشغل وقاعدة الإجراء، ثم أنشئ استعلام KQL الخاص بك ومراجعته.
إذا لم تكن القواعد المضمنة ولا محول القواعد عبر الإنترنت كافيين ، فستحتاج إلى إنشاء القاعدة يدوياً. في مثل هذه الحالات، استخدم الخطوات الموضحة أدناه لبدء إنشاء القاعدة الخاصة بك:
حدد مصادر البيانات التي ترغب استخدامها في القاعدة الخاصة بك. ستحتاج إلى إنشاء جدول تعيين بين مصادر البيانات وجداول البيانات في Azure Sentinel لتحديد الجداول التي تريد الاستعلام عنها.
حدد أي سمات أو حقول أو كيانات في البيانات الخاصة بك تريد استخدامها في القواعد.
حدد المعايير الخاصة بالقاعدة والمنطق. في هذه المرحلة، يمكن أن تحتاج إلى استخدام نماذج القواعد كعينات لكيفية إنشاء استعلامات KQL.
النظر في عوامل التصفية وقواعد الارتباط والقوائم النشطة ومجموعات المراجع وقوائم المشاهدة والحالات الشاذة للكشف والتجميعات، وما إلى ذلك. يمكنك استخدام المراجع التي يوفرها SIEM القديم لفهم كيفية أفضل طريقة لتعيين بناء جملة الاستعلام الخاص بك.
حدد شرط المشغل وقاعدة الإجراء، ثم أنشئ استعلام KQL الخاص بك ومراجعته. أثناء مراجعة الاستعلام الخاص بك، ضع في اعتبارك موارد إرشادات التحسين KQL.
تأكد من اختبار القاعدة مع كل حالة من حالات الاستخدام ذات الصلة. في حالة عدم توفر النتائج المتوقعة، فقد تحتاج إلى مراجعة KQL واختباره مرة أخرى.
عندما تكون راضياً، يمكنك اعتبار القاعدة التي تم ترحيلها. أنشئ دليل المبادئ لإجراءات القاعدة الخاصة بك عند الحاجة. للمزيد من المعلومات، راجع أتمتة الاستجابة للمخاطر باستخدام أدلة المبادئ في Azure Sentinel.
تعرف على المزيد عن قواعد التحليلات:
- أنشئ قواعد تحليلات مخصصة للكشف عن التهديدات. استخدم تجميع التنبيهات لتقليل إجهاد التنبيه عن طريق تجميع التنبيهات التي تحدث ضمن إطار زمني معين.
- تعيين حقول البيانات إلى كيانات في Azure Sentinel لتمكين مهندسي SOC من تحديد الكيانات كجزء من الأدلة التي يجب تعقبها أثناء التحقيق. كما يتيح تعيين الكيان لمحللي SOC الاستفادة من [الرسم البياني للتحقيق] البديهي (investigate-cases.md#use-the-investigation-graph-to-deep-dive) الذي يمكن أن يساعد في تقليل الوقت والجهد.
- تحقق من الأحداث باستخدام بيانات UEBA، كمثال على كيفية استخدام الأدلة لعرض الأحداث والتنبيهات وأي إشارات مرجعية ذات صلة بحدث معين في جزء الإصدار الأولي للحدث.
- لغة استعلام الخاصة بـ Kusto (KQL) والتي يمكنك استخدامها لإرسال طلبات للقراءة فقط إلى قاعدة بيانات Log Analytics لمعالجة البيانات وإرجاع النتائج. يستخدم KQL أيضاً من خلال خدمات Microsoft الأخرى، مثل Microsoft Defender لنقطة النهاية وApplication Insights.
مقارنة مصطلحات القاعدة
يساعدك هذا الجدول على توضيح مفهوم القاعدة في Azure Sentinel مقارنةً بـ Splunk.
Splunk | Microsoft Sentinel | |
---|---|---|
نوع القاعدة | • مجدولة • الوقت الحقيقي |
• استعلام مجدول • Fusion • Microsoft Security • تحليلات سلوك التعلم الآلي من Microsoft Azure |
المعايير | التعريف في SPL | تعريف في KQL |
شرط المشغل | • عدد النتائج • عدد المضيفين • عدد المصادر • مخصص |
الحد: عدد نتائج الاستعلام |
الإجراء | • إضافة إلى التنبيهات التي شغلت • حدث التسجيل • نتائج الإخراج للبحث عن • وأكثر |
• أنشئ تنبيه أو حدث • تكامل مع Logic Apps |
تعيين نماذج القواعد ومقارنتها
استخدم هذه العينات لمقارنة القواعد وتعيينها من Splunk إلى Azure Sentinel في سيناريوهات مختلفة.
أوامر البحث العامة
الأمر الخاص بـ SPL | الوصف | عامل تشغيل خاص بـ KQL | مثال خاص بـ KQL |
---|---|---|---|
chart/ timechart |
تُرجع النتائج في إخراج جدولي لتخطيط السلاسل الزمنية. | عامل تشغيل العرض | … | render timechart |
dedup |
يعمل علي إزالة النتائج اللاحقة التي تطابق معيارًا محددًا. | • distinct • summarize |
… | summarize by Computer, EventID |
eval |
يحسب التعبير. تعرف على أوامر التقييم المنتشرة. | extend | T | extend duration = endTime - startTime |
fields |
يزيل الحقول من نتائج البحث. | • project • project-away |
T | project cost=price*quantity, price |
head/tail |
يُرجع أول أو آخر نتيجتين. | top | T | top 5 by Name desc nulls last |
lookup |
يضيف قيم الحقل من مصدر خارجي. | • externaldata • بحث |
مثال خاص بـ KQL |
rename |
يعيد تسمية حقل. استخدم أحرف بدل لتحديد حقول متعددة. | إعادة تسمية المشروع | T | project-rename new_column_name = column_name |
rex |
يحدد أسماء المجموعات باستخدام التعبيرات العادية لاستخراج الحقول. | matches regex | … | where field matches regex "^addr.*" |
search |
يقوم بتصفية النتائج إلى النتائج التي تطابق تعبير البحث. | search | search "X" |
sort |
يفرز نتائج البحث حسب الحقول المحددة. | sort | T | sort by strlen(country) asc, price desc |
stats |
يوفر الإحصائيات، مجمعة اختيارياً حسب الحقول. تعرف على المزيد عن أوامر الإحصائيات الشائعة. | summarize | مثال خاص بـ KQL |
mstats |
على غرار الإحصائيات، تُستخدم في المقاييس بدلاً من الأحداث. | summarize | مثال خاص بـ KQL |
table |
يحدد الحقول المطلوب الاحتفاظ بها في مجموعة النتائج، ويحتفظ بالبيانات بتنسيق جدولي. | project | T | project columnA, columnB |
top/rare |
يعرض القيم الأكثر شيوعًا أو الأقل شيوعًا للحقل. | top | T | top 5 by Name desc nulls last |
transaction |
مجموعات نتائج البحث في المعاملات. مثال على SPL |
مثال: row_window_session | مثال خاص بـ KQL |
eventstats |
يولد إحصائيات موجزة من الحقول في الأحداث الخاصة بك ويحفظ تلك الإحصائيات في حقل جديد. مثال على SPL |
أمثلة: • join • make_list • mv-expand |
مثال خاص بـ KQL |
streamstats |
أوجد المجموع التراكمي للحقل. مثال علي SPL: ... | streamstats sum(bytes) as bytes _ total \| timechart |
row_cumsum | ...\| serialize cs=row_cumsum(bytes) |
anomalydetection |
ابحث عن الحالات الشاذة في الحقل المُحدد. مثال على SPL |
series_decompose_anomalies() | مثال خاص بـ KQL |
where |
تصفية نتائج البحث باستخدام التعبيرات eval . تستخدم للمقارنة بين مجالين مختلفين. |
حيث | T | where fruit=="apple" |
أمر البحث: مثال علي KQL
Users
| where UserID in ((externaldata (UserID:string) [
@"https://storageaccount.blob.core.windows.net/storagecontainer/users.txt"
h@"?...SAS..." // Secret token to access the blob
])) | ...
أمر stats : مثال KQL
Sales
| summarize NumTransactions=count(),
Total=sum(UnitPrice * NumUnits) by Fruit,
StartOfMonth=startofmonth(SellDateTime)
الأمر mstats: مثال على KQL
T | summarize count() by price_range=bin(price, 10.0)
أمر المعاملة: مثال SPL
sourcetype=MyLogTable type=Event
| transaction ActivityId startswith="Start" endswith="Stop"
| Rename timestamp as StartTime
| Table City, ActivityId, StartTime, Duration
أمر المعاملة: مثال KQL
let Events = MyLogTable | where type=="Event";
Events
| where Name == "Start"
| project Name, City, ActivityId, StartTime=timestamp
| join (Events
| where Name == "Stop"
| project StopTime=timestamp, ActivityId)
on ActivityId
| project City, ActivityId, StartTime,
Duration = StopTime – StartTime
استخدم row_window_session()
لحساب قيم بدء جلسة العمل لعمود في مجموعة صفوف متسلسلة.
...| extend SessionStarted = row_window_session(
Timestamp, 1h, 5m, ID != prev(ID))
الأمر eventstats: مثال على SPL
… | bin span=1m _time
|stats count AS count_i by _time, category
| eventstats sum(count_i) as count_total by _time
الأمر eventstats: مثال على KQL
فيما يلي مثال على العبارة join
:
let binSize = 1h;
let detail = SecurityEvent
| summarize detail_count = count() by EventID,
tbin = bin(TimeGenerated, binSize);
let summary = SecurityEvent
| summarize sum_count = count() by
tbin = bin(TimeGenerated, binSize);
detail
| join kind=leftouter (summary) on tbin
| project-away tbin1
فيما يلي مثال على العبارة make_list
:
let binSize = 1m;
SecurityEvent
| where TimeGenerated >= ago(24h)
| summarize TotalEvents = count() by EventID,
groupBin =bin(TimeGenerated, binSize)
|summarize make_list(EventID), make_list(TotalEvents),
sum(TotalEvents) by groupBin
| mvexpand list_EventID, list_TotalEvents
أمر anomalydetection: مثال على SPL
sourcetype=nasdaq earliest=-10y
| anomalydetection Close _ Price
أمر anomalydetection: مثال على KQL
let LookBackPeriod= 7d;
let disableAccountLogon=SignIn
| where ResultType == "50057"
| where ResultDescription has "account is disabled";
disableAccountLogon
| make-series Trend=count() default=0 on TimeGenerated
in range(startofday(ago(LookBackPeriod)), now(), 1d)
| extend (RSquare,Slope,Variance,RVariance,Interception,
LineFit)=series_fit_line(Trend)
| extend (anomalies,score) =
series_decompose_anomalies(Trend)
أوامر eval الشائعة
الأمر الخاص بـ SPL | الوصف | مثال على SPL | أمر KQL | مثال خاص بـ KQL |
---|---|---|---|---|
abs(X) |
تُرجع القيمة المطلقة لـ X. | abs(number) |
abs() | abs(X) |
case(X,"Y",…) |
يأخذ أزواجا من X وY ، وسيطات إذ X تكون الوسيطات تعبيرات منطقية. أثناء تقييمها إلى TRUE ، ترجع الوسيطات الوسيطة المقابلة Y . |
مثال على SPL | case | مثال خاص بـ KQL |
ceil(X) |
حد أعلي رقم X. | ceil(1.9) |
ceiling() | ceiling(1.9) |
cidrmatch("X",Y) |
يحدد عناوين IP التي تنتمي إلى شبكة فرعية معينة. | cidrmatch ("123.132.32.0/25",ip) |
• ipv4_is_match() • ipv6_is_match() |
ipv4_is_match('192.168.1.1', '192.168.1.255') == false |
coalesce(X,…) |
تُرجع القيمة الأولى غير الفارغة. | coalesce(null(), "Returned val", null()) |
coalesce() | coalesce(tolong("not a number"), tolong("42"), 33) == 42 |
cos(X) |
يحسب جيب تمام X. | n=cos(0) |
cos() | cos(X) |
exact(X) |
يقيّم التعبير X باستخدام حساب النقطة العائمة مزدوج الدقة. | exact(3.14*num) |
todecimal() | todecimal(3.14*2) |
exp(X) |
ترجع eX. | exp(3) |
exp() | exp(3) |
if(X,Y,Z) |
في حالة X تقييم إلى TRUE ، تكون النتيجة هي الوسيطة الثانية Y . في حالة X تقييم إلى FALSE ، تقيم النتيجة إلى الوسيطة الثالثة Z . |
if(error==200, "OK", "Error") |
iif() | مثال خاص بـ KQL |
isbool(X) |
يرجع TRUE إذا كان X منطقيًا. |
isbool(field) |
• iif() • gettype |
iif(gettype(X) =="bool","TRUE","FALSE") |
isint(X) |
يرجع TRUE إذا كان X عددًا صحيحًا. |
isint(field) |
• iif() • gettype |
مثال خاص بـ KQL |
isnull(X) |
يرجع TRUE إذا كان X فارغًا. |
isnull(field) |
isnull() | isnull(field) |
isstr(X) |
يرجع TRUE إذا كانت X سلسلة. |
isstr(field) |
• iif() • gettype |
مثال خاص بـ KQL |
len(X) |
تُرجع هذه الدالة طول حرف سلسلة X . |
len(field) |
strlen() | strlen(field) |
like(X,"y") |
يرجع TRUE إذا كان و فقط إذا كان X مثل نمط SQLite في Y . |
like(field, "addr%") |
• has • المحتويات • startswith • matches regex |
مثال خاص بـ KQL |
log(X,Y) |
يرجع سجل الوسيطة X الأولى باستخدام الوسيطة Y الثانية كأساس. وتكون القيمة الافتراضية لـ Y هي 10 . |
log(number,2) |
• log • log2 • log10 |
log(X) log2(X) log10(X) |
lower(X) |
ترجع القيمة الصغيرة لـ X . |
lower(username) |
tolower | tolower(username) |
ltrim(X,Y) |
ترجع X مع اقتطاع الأحرف في المعلمة Y من الجانب الأيسر. الإخراج الافتراضي هو مسافات Y وعلامات تبويب. |
ltrim(" ZZZabcZZ ", " Z") |
trim_start() | trim_start(“ ZZZabcZZ”,” ZZZ”) |
match(X,Y) |
تُرجع إذا تطابق X مع نمط التعبير العادي Y. | match(field, "^\d{1,3}.\d$") |
matches regex | … | where field matches regex @"^\d{1,3}.\d$") |
max(X,…) |
ترجع القيمة القصوى في عمود. | max(delay, mydelay) |
• max() • arg_max() |
… | summarize max(field) |
md5(X) |
تُرجع تجزئة MD5 لقيمة سلسلةX . |
md5(field) |
hash_md5 | hash_md5("X") |
min(X,…) |
تُرجع الحد الأدنى للقيمة في عمود. | min(delay, mydelay) |
• min_of() • min() • arg_min |
مثال خاص بـ KQL |
mvcount(X) |
يرجع عدد (إجمالي) X القيم. |
mvcount(multifield) |
dcount | …| summarize dcount(X) by Y |
mvfilter(X) |
يصفي حقل متعدد القيم استنادًا إلى التعبير المنطقي X . |
mvfilter(match(email, "net$")) |
mv-apply | مثال خاص بـ KQL |
mvindex(X,Y,Z) |
ترجع مجموعة فرعية من الوسيطة متعددة القيم X من موضع البدء (المستند إلى الصفر) Y إلى Z (اختياري). |
mvindex( multifield, 2) |
array_slice | array_slice(arr, 1, 2) |
mvjoin(X,Y) |
نظرًا لحقل X متعدد القيم ومحدد Y سلسلة، ويربط القيم X الفردية لاستخدام Y . |
mvjoin(address, ";") |
strcat_array | مثال خاص بـ KQL |
now() |
لعرض الوقت الحالي المُمثل بوقت Unix. | now() |
now() | now() now(-2d) |
null() |
لا يقبل الوسيطات والعوائد NULL . |
null() |
قيمة فارغة | null |
nullif(X,Y) |
يشمل وسيطتين، X ، وY وإرجاع X في حالة كانت الوسيطات مختلفة. خلاف ذلك، يعود NULL . |
nullif(fieldA, fieldB) |
iif | iif(fieldA==fieldB, null, fieldA) |
random() |
ترجع هذه الدالة رقما عشوائيًا مستعارًا بين 0 إلى 2147483647 . |
random() |
rand() | rand() |
relative_ time(X,Y) |
نظرا إلى وقت X الفترة ومحدد Y الوقت النسبي، تُرجع قيمة Y وقت الفترة المطبقة على X . |
relative_time(now(),"-1d@d") |
unix time | مثال خاص بـ KQL |
replace(X,Y,Z) |
ترجع سلسلة تم تشكيلها عن طريق استبدال سلسلة Z لكل تكرار لسلسلة Y التعبير العادية في السلسلة X . |
تاريخ الإرجاع مع تبديل أرقام الشهر واليوم. على سبيل المثال، فيما يتعلق بـ 4/30/2015 الإدخال، يكون الإخراج هو 30/4/2009 :replace(date, "^(\d{1,2})/ (\d{1,2})/", "\2/\1/") |
replace() | مثال خاص بـ KQL |
round(X,Y) |
يرجع X مقربًا إلى عدد المنازل العشرية المحددة بواسطة Y . الافتراضي هو التقريب إلى عدد صحيح. |
round(3.5) |
round | round(3.5) |
rtrim(X,Y) |
يرجع X مع أحرف Y اقتطاع من الجانب الأيمن. في حالة Y لم يتم تحديدها، يتم اقتطاع المسافات وعلامات التبويب. |
rtrim(" ZZZZabcZZ ", " Z") |
trim_end() | trim_end(@"[ Z]+",A) |
searchmatch(X) |
ترجع TRUE إذا كان الحدث يطابق سلسلة البحثX . |
searchmatch("foo AND bar") |
iif() | iif(field has "X","Yes","No") |
split(X,"Y") |
ترجع X كخانة متعددة القيم، مقسمة حسب المحدد Y . |
split(address, ";") |
split() | split(address, ";") |
sqrt(X) |
يرجع الجذر التربيعي لرقم X . |
sqrt(9) |
sqrt() | sqrt(9) |
strftime(X,Y) |
ترجع قيمة X وقت الفترة المعروضة باستخدام التنسيق المحدد بواسطة Y . |
strftime(_time, "%H:%M") |
format_datetime() | format_datetime(time,'HH:mm') |
strptime(X,Y) |
بالنظر إلى الوقت الذي تمثله سلسلة X ، ترجع القيمة التي حللت من التنسيق Y . |
strptime(timeStr, "%H:%M") |
format_datetime() | مثال خاص بـ KQL |
substr(X,Y,Z) |
يرجع حقل X سلسلة فرعية من موضع البدء (مستند إلى واحد) Y للأحرف Z (اختياري). |
substr("string", 1, 3) |
substring() | substring("string", 0, 3) |
time() |
يرجع وقت ساعة الحائط بدقة ميكروثانية. | time() |
format_datetime() | مثال خاص بـ KQL |
tonumber(X,Y) |
تحول سلسلة X الإدخال إلى رقم، إذ أن Y (القيمة الافتراضية الاختيارية هي 10 ) تحدد قاعدة الرقم الذي سيحول إليه. |
tonumber("0A4",16) |
toint() | toint("123") |
tostring(X,Y) |
الوصف | مثال على SPL | tostring() | tostring(123) |
typeof(X) |
ترجع تمثيل سلسلة لنوع الحقل. | typeof(12) |
gettype() | gettype(12) |
urldecode(X) |
يرجع عنوان URL X الذي تم فك ترميزه. |
مثال على SPL | url_decode | مثال خاص بـ KQL |
مثال علي الحالة (X,"Y",…) SPL
case(error == 404, "Not found",
error == 500,"Internal Server Error",
error == 200, "OK")
مثال علي الحالة (X,"Y",…) KQL
T
| extend Message = case(error == 404, "Not found",
error == 500,"Internal Server Error", "OK")
مثال على KQL if(X,Y,Z)
iif(floor(Timestamp, 1d)==floor(now(), 1d),
"today", "anotherday")
مثال على isint(X) KQL
iif(gettype(X) =="long","TRUE","FALSE")
مثال على isstr(X) KQL
iif(gettype(X) =="string","TRUE","FALSE")
مثال على like(X,"y")
… | where field has "addr"
… | where field contains "addr"
… | where field startswith "addr"
… | where field matches regex "^addr.*"
مثال علي min(X,…) KQL
min_of (expr_1, expr_2 ...)
…|summarize min(expr)
…| summarize arg_min(Price,*) by Product
مثال على mvfilter(X) KQL
T | mv-apply Metric to typeof(real) on
(
top 2 by Metric desc
)
مثال علي mvjoin(X,Y) KQL
strcat_array(dynamic([1, 2, 3]), "->")
مثال KQL علي الوقت النسبي (X,Y)
let toUnixTime = (dt:datetime)
{
(dt - datetime(1970-01-01))/1s
};
مثال على استبدال(X,Y,Z) KQL
replace( @'^(\d{1,2})/(\d{1,2})/', @'\2/\1/',date)
مثال على strptime(X,Y) KQL
format_datetime(datetime('2017-08-16 11:25:10'),
'HH:mm')
مثال على time() KQL
format_datetime(datetime(2015-12-14 02:03:04),
'h:m:s')
tostring(X,Y)
ترجع قيمة X
حقل كسلسلة.
- في حالة كانت قيمة
X
رقمًا،X
يعاد تنسيقها إلى قيمة سلسلة. - إذا كانت
X
قيمة منطقية،X
يعاد تنسيقها إلىTRUE
أوFALSE
. - في حالة كانت
X
الوسيطة رقمًا، فإن الوسيطةY
الثانية اختيارية ويمكن أن تكونhex
إما (تحويلX
إلى رقم سداسي عشري)،commas
أو (تنسيقاتX
بفواصل ومنزلتين عشريتين)، أوduration
(تحويلX
من تنسيق زمني بالثواني إلى تنسيق زمني قابل للقراءة:HH:MM:SS
).
مثال على tostring(X,Y) SPL
هذا المثال يرجع:
foo=615 and foo2=00:10:15:
… | eval foo=615 | eval foo2 = tostring(
foo, "duration")
مثال على urldecode(X) SPL
urldecode("http%3A%2F%2Fwww.splunk.com%2Fdownload%3Fr%3Dheader")
مثال على أوامر إحصائيات شائعة KQL
الأمر الخاص بـ SPL | الوصف | أمر KQL | مثال خاص بـ KQL |
---|---|---|---|
avg(X) |
ترجع متوسط قيم الحقل X . |
avg() | avg(X) |
count(X) |
ترجع عدد تكرارات الحقل X . للإشارة إلى قيمة حقل معينة لمطابقتها، نسق X باعتباره eval(field="value") . |
count() | summarize count() |
dc(X) |
ترجع عدد القيم المميزة للحقل X . |
dcount() | …\| summarize countries=dcount(country) by continent |
earliest(X) |
ترجع القيمة التي تمت عرضها حسب الترتيب الزمني لـ X . |
arg_min() | … \| summarize arg_min(TimeGenerated, *) by X |
latest(X) |
يعرض القيمة التي تمت عرضها حسب الترتيب الزمني لـ X . |
arg_max() | … \| summarize arg_max(TimeGenerated, *) by X |
max(X) |
ترجع القيمة القصوى للحقل X . إذا كانت قيم X غير رقمية، يعثر على القيمة القصوى عبر الترتيب الأبجدي. |
max() | …\| summarize max(X) |
median(X) |
تعيد هذه الدالة القيمة المتوسطة للحقل X . |
القيمة المئوية() | …\| summarize percentile(X, 50) |
min(X) |
تعيد القيمة القصوى للحقل X . إذا كانت قيم X غير رقمية، يعثر على القيمة الدنيا من خلال الترتيب الأبجدي. |
min() | …\| summarize min(X) |
mode(X) |
ترجع القيمة الأكثر تكراراً للحقل X . |
top-hitters() | …\| top-hitters 1 of Y by X |
perc(Y) |
ترجع القيمة المئوية X للحقل Y . على سبيل المثال، perc5(total) ترجع القيمة المئوية الخامسة الخاصة بحقل total . |
القيمة المئوية() | …\| summarize percentile(Y, 5) |
range(X) |
ترجع الفرق بين القيم القصوى والحد الأدنى للحقل X . |
range() | range(1, 3) |
stdev(X) |
يرجع نموذج الانحراف المعياري للحقل X . |
stdev | stdev() |
stdevp(X) |
يرجع الانحراف المعياري لفحص المحتوى للحقل X . |
stdevp() | stdevp() |
sum(X) |
يرجع مجموع قيم الحقل X . |
sum() | sum(X) |
sumsq(X) |
يرجع مجموع مربعات قيم الحقل X . |
||
values(X) |
ترجع قائمة بجميع القيم المميزة للحقل X كإدخال متعدد القيم. ترتب القيم أبجديًا. |
make_set() | …\| summarize r = make_set(X) |
var(X) |
يرجع تباين العينة للحقل X . |
variance | variance(X) |
الخطوات التالية
في هذه المقالة، تعلمت كيفية تعيين قواعد الترحيل الخاصة بك من Splunk إلى Azure Sentinel.