Security Data Lake-ийн Search Scripting API-г хэрхэн ашиглах вэ?
Энэ хуудсыг AI-аар орчуулж, автоматаар шалгасан. Нарийн тохиргоо хийхээсээ өмнө англи эхтэй тулгаж болно.
Scripting API нь API дуудлагаар хайлт болон aggregation (нэгтгэл) функцэд хялбар хандах зорилгоор бүтээгдсэн. Scripting API нь нэг дор зөвхөн нэг өгөгдлийн багц, нэг мессежийн жагсаалт, эсвэл нэг aggregation-ий үр дүнг өгдөг. Хүсэлтийн ихэнх параметр нь заавал биш бөгөөд ингэснээр процесс бүр хялбар болдог.
Хариултын контентын төрөл нь өгсөн accept header-ээс хамаарна. Дэмжигдэх утгууд:
- text/plain
- text/csv
- application/json
Plaintext болон CSV хариултын формат өөр боловч агуулах өгөгдлийн хэмжээ ижил. Харин JSON хариулт нь schema property дахь баганын талаарх болон metadata property дахь хүчинтэй хугацааны завсрын талаарх нэмэлт мэдээллийг агуулна.
Мессеж хайх (Search Messages)
Энэ endpoint нь хайлтын хуудасны мессежүүдэд шууд хандах боломж олгоно. Мессежүүд анхдагчаар timestamp-аар эрэмбэлэгдэж, хамгийн сүүлийнх нь эхэнд байна. Ердийн хэрэглээ нь сүүлийн X ширхэг (анхдагч нь 10) мессежийг авах бөгөөд хариуд аль талбар хамааралтайг та тодорхойлно.
GET https://example.org/api/search/messages?fields=source,http_method,http_response_code,took_msPOST https://example.org/api/search/messages{
"query": "http_method:POST",
"streams": ["620f890b70fb980467aca611"],
"fields": [
"timestamp",
"source",
"http_method",
"http_response_code",
"took_ms"
],
"from": 2,
"size": 15,
"timerange": {
"type": "keyword",
"keyword": "last five minutes"
},
"sort": "took_ms",
"sort_order": "desc"
}GET хүсэлт нь POST хүсэлттэй ижил параметр хүлээн авна. Цорын ганц ялгаа нь зөвхөн POST хүсэлт хугацааны завсар хүлээн авдаг. Хугацааны завсрын параметр нь relative, absolute, keyword гэсэн утгуудыг хүлээн авна. Дэлгэрэнгүй мэдээллийг time frame selector-ийн талаарх энэ нийтлэлээс үзнэ үү.
.id залгана.Хүсэлт ба хариултын жишээ
Дараах нь хүсэлт, хариултын зарим жишээ. accept header дахь text/csv, text/plain, application/json утгууд нь хариултын форматыг тодорхойлно.
➜ curl -H 'Accept: text/csv' -H 'X-Requested-By: cli' -u username:password 'https://example.org/api/search/messages?fields=source,http_method,http_response_code,took_ms'
"field: source","field: http_method","field: http_response_code","field: took_ms"
"example.org","GET","200","36"
"example.org","GET","200","36"
"example.org","GET","200","48"
"example.org","PUT","200","129"
"example.org","POST","201","134"
"example.org","POST","201","134"
"example.org","GET","200","52"
"example.org","GET","200","48"
"example.org","GET","200","48"
"example.org","GET","200","63"➜ curl -H 'Accept: text/plain' -H 'X-Requested-By: cli' -u username:password 'https://example.org/api/search/messages?fields=source,http_method,http_response_code,took_ms'
┌────────────────────────┬────────────────────────┬────────────────────────┬───────────────────────┐
│field: source │field: http_method │field: │field: took_ms │
│ │ │http_response_code │ │
├────────────────────────┼────────────────────────┼────────────────────────┼───────────────────────┤
│example.org │GET │200 │56 │
│example.org │GET │200 │45 │
│example.org │GET │200 │44 │
│example.org │GET │200 │56 │
│example.org │GET │200 │42 │
│example.org │DELETE │204 │89 │
│example.org │DELETE │204 │89 │
│example.org │GET │200 │38 │
│example.org │GET │200 │38 │
│example.org │DELETE │204 │95 │
└────────────────────────┴────────────────────────┴────────────────────────┴───────────────────────┘%➜ curl -H 'Accept: application/json' -H 'X-Requested-By: cli' -u username:password 'https://example.org/api/search/messages?fields=source,http_method,http_response_code,took_ms'
{
"schema": [
{
"column_type": "field",
"type": "unknown",
"field": "source",
"name": "field: source"
},
{
"column_type": "field",
"type": "string",
"field": "http_method",
"name": "field: http_method"
},
{
"column_type": "field",
"type": "unknown",
"field": "http_response_code",
"name": "field: http_response_code"
},
{
"column_type": "field",
"type": "numeric",
"field": "took_ms",
"name": "field: took_ms"
}
],
"datarows": [
[
"example.org",
"GET",
200,
50
],
[
"example.org",
"GET",
200,
50
],
[
"example.org",
"GET",
200,
55
],
[
"example.org",
"GET",
200,
63
],
[
"example.org",
"GET",
200,
63
],
[
"example.org",
"GET",
200,
63
],
[
"example.org",
"GET",
200,
37
],
[
"example.org",
"GET",
200,
46
],
[
"example.org",
"GET",
200,
59
],
[
"example.org",
"GET",
200,
52
]
],
"metadata": {
"effective_timerange": {
"from": "2023-04-05T09:08:23.193Z",
"to": "2023-04-06T09:08:23.193Z",
"type": "absolute"
}
}
}Aggregation (Нэгтгэл)
Энэ endpoint нь хэд хэдэн бүлэглэлт болон metric-тэй нэг aggregation-ийг ажиллуулах боломж олгоно. Жишээ нь HTTP хүсэлттэй мессежүүдийг HTTP method болон хариултын кодоор бүлэглэж болно. Мөн эдгээр бүлгүүдийн хамгийн бага, хамгийн их хариу өгөх хугацааг олж болно.
GET болон POST хэлбэрийн хүсэлт ижил өгөгдөл авна. POST хүсэлт нь GET хэлбэрт байхгүй нэмэлт тохиргоо хийх боломж олгоно. Жишээ нь POST хүсэлтээр бүлэглэх aggregation-ы limit болон sort-ыг тодорхойлж болно.
GET https://example.org/api/search/aggregate?groups=http_method&metrics=avg:took_ms&metrics=countPOST https://example.org/api/search/aggregate{
"query": "source:example.org",
"streams": [
"620f890b70fb980467aca611"
],
"timerange": {
"type": "keyword",
"keyword": "last five minutes"
},
"group_by": [
{
"field": "http_method"
},
{
"field": "http_response_code",
"limit": 2
}
],
"metrics": [
{
"function": "min",
"field": "took_ms"
},
{
"function": "max",
"field": "took_ms",
"sort": "desc"
}
]
}Metric-үүдийг function:field_name хос хэлбэрээр тодорхойлно. POST хүсэлтээр metric-үүдийг sort-той нь нэмж тодорхойлж болно. POST хүсэлтэд GET хүсэлтээс илүү их мэдээлэл оруулах боломжтой.
Percentile metric-ийг дараах байдлаар нэмж тохируулж болно:
{
"function": "percentile",
"field": "took_ms",
"configuration":
{"percentile": 90}
}Бусад боломжит metric функцүүд: average, count, latest, max, min, percentile, stdDev, sum, sumOfSquares, variance.
Хүсэлт ба хариултын жишээ
Дараах нь aggregation-ий хүсэлт, хариултын зарим жишээ. Accept header дахь text/plain, text/csv, application/json утгууд нь хариултын форматыг тодорхойлно.
➜ curl -H 'Accept: text/plain' -H 'X-Requested-By: cli' -u username:password 'https://example.org/api/search/aggregate?groups=http_method&metrics=avg:took_ms&metrics=count'
┌────────────────────────┬────────────────────────┬───────────────────────┐
│grouping: http_method │metric: avg(took_ms) │metric: count() │
├────────────────────────┼────────────────────────┼───────────────────────┤
│GET │84.59519448510214 │3326553 │
│DELETE │96.02973055642204 │330199 │
│POST │170.11398232130765 │329323 │
│PUT │132.19959919839678 │154690 │
└────────────────────────┴────────────────────────┴───────────────────────┘➜ curl -H 'Accept: text/csv' -H 'X-Requested-By: cli' -u username:password 'https://example.org/api/search/aggregate?groups=http_method&metrics=avg:took_ms&metrics=count'
"grouping: http_method","metric: avg(took_ms)","metric: count()"
"GET","84.58997204888469","3326522"
"DELETE","96.02450487553752","330220"
"POST","170.08947537817832","329342"
"PUT","132.2030966157029","154685"➜ curl -H 'Accept: application/json' -H 'X-Requested-By: cli' -u username:password 'https://example.org/api/search/aggregate?groups=http_method&metrics=avg:took_ms&metrics=count'
{
"schema": [
{
"column_type": "grouping",
"type": "string",
"field": "http_method",
"name": "grouping: http_method"
},
{
"column_type": "metric",
"type": "numeric",
"function": "avg",
"field": "took_ms",
"name": "metric: avg(took_ms)"
},
{
"column_type": "metric",
"type": "numeric",
"function": "count",
"name": "metric: count()"
}
],
"datarows": [
[
"GET",
84.6043288978779,
3326528
],
[
"DELETE",
96.02355285311111,
330236
],
[
"POST",
170.09012904205252,
329350
],
[
"PUT",
132.20231038249952,
154693
]
],
"metadata": {
"effective_timerange": {
"from": "2023-04-05T09:14:39.731Z",
"to": "2023-04-06T09:14:39.731Z",
"type": "absolute"
}
}
}Энэ хуудсанд гарсан нэр томъёо
- Endpoint
- Хамгаалж буй компьютер, сервер, виртуал машин
