Ana içeriğe geç

Manuel ILM Politikası ve Template Oluşturma

uyarı

Eğer log yönetimi Apinizer üzerinden yapılacaksa bu işlemlerin yapılmasına gerek yoktur, bu işlemler Apinizer tarafından otomatik olarak yapılmaktadır.

Değişkenler​

İstekler yer alan dinamik değerler ve açıklamaları aşağıdaki tabloda görülmektedir.

DeğişkenAçıklaması
<ELASTICSEARCH_IP_ADDRESS>Elasticsearch cluster'ının host bilgisidir.
<ELASTICSEARCH_PORT>Elasticsearch cluster'ının port bilgisidir.
<INDEX_KEY>Index'in benzersiz tanımlayıcısıdır.
<INDEX_PATTERN_NAME>Index pattern adıdır. Index adının sonuna * eklenir (örn: apinizer-log-apiproxy-default*).
<ILM_POLICY_NAME>ILM politikası adıdır (örn: apinizer-log-ilm-policy-default).
<NUMBER_OF_SHARDS>Index'in shard sayısıdır (Apinizer varsayılanı: 1).
<NUMBER_OF_REPLICAS>Index'in replica sayısıdır (Apinizer varsayılanı: 0).
<REFRESH_INTERVAL>Index refresh aralığıdır (Apinizer varsayılanı: 5s).
<LOAD_FIXED_BITSET_FILTERS_EAGERLY>index.load_fixed_bitset_filters_eagerly ayarıdır (Apinizer varsayılanı: true).

ILM Politikaları Oluşturma​

apinizer-log-ilm-policy-default adlı ILM Politikası Oluşturma İsteği​

curl -XPUT "http://<ELASTICSEARCH_IP_ADDRESS>:<ELASTICSEARCH_PORT>/_ilm/policy/apinizer-log-ilm-policy-<INDEX_KEY>" \
-H 'Content-Type: application/json' \
--data-binary @- <<'EOF'
{
"policy": {
"phases": {
"hot": {
"min_age": "0ms",
"actions": {
"rollover": {
"max_age": "30d",
"max_size": "30gb",
"max_docs": 15000000
},
"set_priority": {
"priority": null
}
}
},
"warm": {
"actions": {
"readonly": {},
"allocate": {
"number_of_replicas": 0,
"include": {},
"exclude": {}
},
"shrink": {
"number_of_shards": 1
},
"forcemerge": {
"max_num_segments": 1
},
"set_priority": {
"priority": null
}
}
},
"cold": {
"min_age": "90d",
"actions": {
"set_priority": {
"priority": null
}
}
}
}
}
}
EOF

Template Oluşturma​

apinizer-log-apiproxy-template-default adlı Template Oluşturma İsteği​

curl -X PUT "http://<ELASTICSEARCH_IP_ADDRESS>:<ELASTICSEARCH_PORT>/_index_template/apinizer-log-apiproxy-template-<INDEX_KEY>" \
-H 'Content-Type: application/json' \
--data-binary @- <<'EOF'
{
"index_patterns": ["<INDEX_PATTERN_NAME>"],
"data_stream": {},
"template": {
"settings": {
"index": {
"lifecycle": {
"name": "<ILM_POLICY_NAME>"
},
"number_of_shards": "<NUMBER_OF_SHARDS>",
"number_of_replicas": "<NUMBER_OF_REPLICAS>",
"refresh_interval": "<REFRESH_INTERVAL>",
"load_fixed_bitset_filters_eagerly": "<LOAD_FIXED_BITSET_FILTERS_EAGERLY>"
}
},
"mappings": {
"properties": {
"aprp": {
"type": "keyword"
},
"fcrb": {
"type": "text"
},
"hr1ru": {
"type": "keyword"
},
"aci": {
"type": "keyword"
},
"subi": {
"type": "keyword"
},
"subp": {
"type": "keyword"
},
"subpl": {
"type": "keyword"
},
"subo": {
"type": "keyword"
},
"ack": {
"type": "keyword"
},
"cot": {
"type": "keyword"
},
"coi": {
"type": "keyword"
},
"coo": {
"type": "keyword"
},
"usub": {
"type": "keyword",
"ignore_above": 256
},
"uids": {
"type": "keyword",
"ignore_above": 256
},
"ocid": {
"type": "keyword",
"ignore_above": 256
},
"mcprc": {
"type": "keyword"
},
"mcpap": {
"type": "keyword"
},
"tapt": {
"type": "integer"
},
"trqpt": {
"type": "integer"
},
"trspt": {
"type": "integer"
},
"hr1rp": {
"type": "keyword"
},
"uok": {
"ignore_above": 50,
"type": "keyword"
},
"sr2t": {
"type": "integer"
},
"fcrp": {
"type": "nested",
"properties": {
"k": {
"type": "keyword"
},
"v": {
"type": "keyword"
}
}
},
"api": {
"type": "keyword"
},
"appi": {
"type": "keyword"
},
"appin": {
"type": "keyword"
},
"fcrh": {
"type": "nested",
"properties": {
"k": {
"type": "keyword"
},
"v": {
"type": "keyword"
}
}
},
"apn": {
"type": "keyword"
},
"pet": {
"ignore_above": 75,
"type": "keyword"
},
"apr": {
"type": "short"
},
"tbah": {
"type": "nested",
"properties": {
"k": {
"type": "keyword"
},
"v": {
"type": "keyword"
}
}
},
"ei": {
"type": "keyword"
},
"apmi": {
"type": "keyword"
},
"hr1qs": {
"type": "keyword"
},
"tbap": {
"type": "nested",
"properties": {
"k": {
"type": "keyword"
},
"v": {
"type": "keyword"
}
}
},
"ra": {
"type": "keyword"
},
"et": {
"ignore_above": 75,
"type": "keyword"
},
"tba": {
"type": "text"
},
"hr1rh": {
"type": "keyword"
},
"trt": {
"type": "integer"
},
"rrc": {
"type": "integer"
},
"rfc": {
"type": "integer"
},
"icr": {
"type": "boolean"
},
"crs": {
"type": "keyword"
},
"mc": {
"type": "integer"
},
"msc": {
"type": "integer"
},
"mfc": {
"type": "integer"
},
"mtd": {
"type": "long"
},
"ma": {
"type": "keyword"
},
"sr1t": {
"type": "integer"
},
"hr1ra": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"loc": {
"type": "geo_point"
},
"xff": {
"type": "keyword"
},
"apmn": {
"type": "keyword"
},
"hr1hm": {
"ignore_above": 50,
"type": "keyword"
},
"rt": {
"ignore_above": 7,
"type": "keyword"
},
"hr1lp": {
"type": "keyword"
},
"hr1ln": {
"type": "keyword"
},
"hr1pi": {
"type": "keyword"
},
"sc": {
"type": "short"
},
"fbarh": {
"type": "nested",
"properties": {
"k": {
"type": "keyword"
},
"v": {
"type": "keyword"
}
}
},
"tcb": {
"type": "text"
},
"hr1rsi": {
"type": "keyword"
},
"tch": {
"type": "nested",
"properties": {
"k": {
"type": "keyword"
},
"v": {
"type": "keyword"
}
}
},
"eat": {
"type": "keyword"
},
"hr1r1u": {
"type": "keyword"
},
"hr1p": {
"type": "keyword"
},
"hr1s": {
"type": "keyword"
},
"fbarb": {
"type": "text"
},
"@timestamp": {
"format": "yyyy-MM-dd'T'HH:mm:ss.S'Z'||yyyy-MM-dd'T'HH:mm:ss.SS'Z'||yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
"type": "date"
},
"ch": {
"type": "boolean"
},
"hr1ce": {
"type": "keyword"
},
"hr1sp": {
"type": "keyword"
},
"hr1sn": {
"type": "keyword"
},
"hr1la": {
"type": "keyword"
},
"hr1ct": {
"ignore_above": 50,
"type": "keyword"
},
"pi": {
"type": "keyword"
},
"hr1cp": {
"type": "keyword"
},
"hr1cl": {
"type": "keyword"
},
"aip": {
"type": "keyword"
},
"aipid": {
"type": "keyword"
},
"aivs": {
"type": "keyword"
},
"aim": {
"type": "keyword"
},
"aiti": {
"type": "long"
},
"aito": {
"type": "long"
},
"aitc": {
"type": "long"
},
"aicm": {
"type": "long"
},
"aicim": {
"type": "long"
},
"aicom": {
"type": "long"
},
"aiccm": {
"type": "long"
},
"aittft": {
"type": "long"
},
"aitpot": {
"type": "long"
},
"ailat": {
"type": "long"
},
"aisch": {
"type": "boolean"
},
"aigh": {
"type": "keyword"
},
"aigc": {
"type": "keyword"
},
"aigv": {
"type": "keyword"
},
"aircl": {
"type": "keyword"
},
"aircs": {
"type": "keyword"
},
"aircms": {
"type": "long"
},
"aircti": {
"type": "long"
},
"aircto": {
"type": "long"
},
"airccm": {
"type": "long"
},
"aipd": {
"type": "boolean"
},
"aifr": {
"type": "keyword"
},
"aistr": {
"type": "boolean"
},
"aivk": {
"type": "keyword"
},
"aitid": {
"type": "keyword"
},
"aiff": {
"type": "keyword"
},
"aiqsc": {
"type": "integer"
},
"aiqao": {
"type": "boolean"
},
"aidt": {
"type": "keyword"
},
"aigtms": {
"type": "long"
},
"aiinf": {
"type": "long"
},
"aiovh": {
"type": "long"
},
"mcptn": {
"type": "keyword"
},
"mcpjrid": {
"type": "keyword"
},
"mcptno": {
"ignore_above": 256,
"type": "keyword"
},
"mcptco": {
"type": "integer"
},
"a2atk": {
"type": "keyword"
},
"a2act": {
"type": "keyword"
},
"a2ats": {
"type": "keyword"
},
"a2asno": {
"ignore_above": 256,
"type": "keyword"
},
"a2aaco": {
"type": "integer"
},
"afr": { "type": "keyword", "ignore_above": 256 },
"rfr": { "type": "keyword" },
"rco": { "type": "keyword" },
"rec": { "type": "keyword" },
"red": { "type": "keyword", "ignore_above": 256 },
"rdsel": { "type": "long" },
"rddns": { "type": "long" },
"rdtcp": { "type": "long" },
"rdtls": { "type": "long" },
"rdttfb": { "type": "long" },
"rdbrd": { "type": "long" },
"rdpw": { "type": "long" },
"usc": { "type": "short" },
"uip": { "type": "keyword" },
"crf": { "type": "boolean" },
"rtr": { "type": "boolean" },
"gw": { "type": "keyword" },
"pll": { "type": "short" },
"plp": { "type": "short" },
"pla": { "type": "short" },
"plm": { "type": "short" },
"cct": { "type": "integer" },
"crt": { "type": "integer" },
"ccrt": { "type": "integer" },
"cwms": { "type": "integer" },
"cr": { "type": "keyword" },
"cl": { "type": "keyword" },
"pxt": {
"type": "nested",
"properties": {
"o": { "type": "integer" },
"t": { "type": "keyword" },
"d": { "type": "integer" },
"f": { "type": "keyword", "ignore_above": 1 }
}
}
}
}
}
}
EOF

Template Veri Yapısı Tablosu​

Alan AdıAlanda Tutulan Veri/AçıklamasıJava Mapping TypeElastic Search Mapping Type
@timestampTime StampInstantdate format: yyyy-MM-dd'T'HH:mm:ss.S'Z' yyyy-MM-dd'T'HH:mm:ss.SS'Z' yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
aciApinizer Correlation IDStringkeyword
eiEnvironment IDStringkeyword
piProject IDStringkeyword
appiApplication IDStringkeyword
appinApplication NameStringkeyword
apiAPI Proxy IDStringkeyword
apnAPI Proxy NameStringkeyword
eatAPI TypeEnumkeyword
aprpAPI Proxy Relative PathStringkeyword
apmiAPI Proxy Method IDStringkeyword
apmnAPI Proxy Method NameStringkeyword
xffX Forwarded ForStringkeyword
hr1raHTTP Request Remote AddressStringtext, keyword
hr1hmHTTP Request HTTP MethodStringkeyword ignore_above: 50
hr1ctHTTP Request Content TypeStringkeyword ignore_above: 50
hr1piHTTP Request Path InfoStringkeyword
uokUsername or KeyStringkeyword ignore_above: 50
ackAPI Client KeyStringkeyword
cotClient Owner TypeStringkeyword
coiClient Owner IdStringkeyword
cooClient Organization IdStringkeyword
hr1cpHTTP Request Context PathStringkeyword
hr1qsHTTP Request Query StringStringkeyword
hr1ruHTTP Request Remote UserStringkeyword
hr1rsiHTTP Request Requested SessionIDStringkeyword
hr1r1uHTTP Request Request URIStringkeyword
hr1ceHTTP Request Character EncodingStringkeyword
hr1clHTTP Request Content LengthStringkeyword
hr1pHTTP Request ProtocolStringkeyword
hr1sHTTP Request SchemeStringkeyword
hr1snHTTP Request Server NameStringkeyword
hr1spHTTP Request Server PortStringkeyword
locLocationGeoLocation{ Double lat, Double lon }geo_point
hr1rhHTTP Request Remote HostStringkeyword
hr1rpHTTP Request Remote PortStringkeyword
hr1lnHTTP Request Local NameStringkeyword
hr1laHTTP Request Local AddrStringkeyword
hr1lpHTTP Request Local PortStringkeyword
trqptTime Request Pipeline TotalIntegerinteger
trsptTime Response Pipeline TotalIntegerinteger
rrcRouting Retry CountIntegerinteger
rfcRouting Failover CountIntegerinteger
trtTime Routing TotalIntegerinteger
taptTime API Proxy TotalIntegerinteger
chCache HitBooleanboolean
sr1tSize Request TotalIntegerinteger
sr2tSize Response TotalIntegerinteger
scStatus Codeintshort
rtResult TypeEnumkeyword ignore_above: 7
etError TypeEnumkeyword ignore_above: 75
petParent Error TypeEnumkeyword ignore_above: 75
afrAuthentication Failure ReasonEnumkeyword ignore_above: 256
fcrpFrom Client Read Only ParameterMap<String,String>nested k: keyword v: keyword
fcrhFrom Client Read Only HeaderMap<String,String>nested k: keyword v: keyword
fcrbFrom Client Read Only BodyStringtext
tbapTo Backend API ParameterMap<String,String>nested k: keyword v: keyword
tbahTo Backend API HeaderMap<String,String>nested k: keyword v: keyword
tbaTo Backend API BodyStringtext
fbarhFrom Backend API Read Only HeaderMap<String,String>nested k: keyword v: keyword
fbarbFrom Backend API Read Only BodyStringtext
tchTo Client HeaderMap<String,String>nested k: keyword v: keyword
tcbTo Client BodyStringtext
pxtPolitika Çalışma Süreleri (yalnızca log hedefinde ayar açıkken yazılır)List<PolicyExecutionTiming>nested o: integer t: keyword d: integer f: keyword ignore_above: 1
usubKararlı kullanıcı kimliği: IdP token'ının sub değeri; client_credentials token'ında istemcinin kendisiStringkeyword ignore_above: 256
uidsIdP token'ının veren tarafı (iss); Apinizer'ın verdiği token için apinizerStringkeyword ignore_above: 256
ocidToken'ın verildiği OAuth client'ı (azp, yoksa client_id)Stringkeyword ignore_above: 256
subiAbonelik ID'siStringkeyword
subpAbonelik ürün ID'siStringkeyword
subplAbonelik plan ID'siStringkeyword
suboAboneliğin tüketici organizasyon ID'siStringkeyword
aprAPI Proxy RevisionIntegershort
raRouting AddressStringkeyword
icrİsteğin canary isteği olarak yönlendirilip yönlendirilmediğiBooleanboolean
crsCanary yönlendirme durumuEnumkeyword
mcGönderilen mirror isteği sayısıIntegerinteger
mscBaşarılı mirror isteği sayısıIntegerinteger
mfcBaşarısız mirror isteği sayısıIntegerinteger
mtdMirror isteklerinin toplam süresiLonglong
maMirror adresleriList<String>keyword
rfrYönlendirme hatası nedeniStringkeyword
rcoHata nedeninin güvenilirliği (HIGH, MEDIUM, LOW)Stringkeyword
recException sınıf adıStringkeyword
redTemizlenmiş ve kısaltılmış exception mesajıStringkeyword ignore_above: 256
rdselUpstream seçim süresi (ns)Longlong
rddnsDNS çözümleme süresi (ns)Longlong
rdtcpTCP bağlantı süresi (ns)Longlong
rdtlsTLS handshake süresi (ns)Longlong
rdttfbİlk byte'a kadar geçen süre (ns); yanıt yoksa -1Longlong
rdbrdYanıt body okuma süresi (ns)Longlong
rdpwHavuzdan bağlantı beklerken geçen süre (ns)Longlong
uscBackend'in döndürdüğü ham durum kodu (istemciye dönenden ayrıdır)Shortshort
uipGerçekte bağlanılan upstream ip:portStringkeyword
crfHavuzdaki bağlantının yeniden kullanılıp kullanılmadığıBooleanboolean
rtrİsteğin yanıt veren bir backend'e ulaşıp ulaşmadığıBooleanboolean
gwİsteği işleyen worker pod/hostStringkeyword
pllHavuzda kullanımda olan bağlantı sayısıShortshort
plpHavuzda bekleyen bağlantı isteği sayısıShortshort
plaHavuzda boştaki bağlantı sayısıShortshort
plmHavuzdaki en fazla bağlantı sayısıShortshort
cctYapılandırılmış bağlantı zaman aşımı (ms)Integerinteger
crtYapılandırılmış okuma zaman aşımı (ms)Integerinteger
ccrtYapılandırılmış bağlantı isteği (havuz) zaman aşımı (ms)Integerinteger
cwmsYanıtı istemciye yazma süresi (ms); streaming yanıtlarda -1Integerinteger
mcptnİstekle çağrılan MCP tool'unun adıStringkeyword
mcpjridJSON-RPC korelasyon ID'siStringkeyword
mcprcBir tools/call sonuç sınıfı: OK, TOOL_ERROR, JSONRPC_ERROR, TRANSPORT, POLICY_REJECTStringkeyword
mcpapOnay için bekletilen bir tools/call çağrısının onay durumuStringkeyword
mcptnoİstek boyunca çağrılan giden MCP tool'larının virgülle ayrılmış benzersiz adları (256 karakterde kesilir, ,… ile işaretlenir)Stringkeyword ignore_above: 256
mcptcoİstek boyunca yapılan toplam giden tool çağrısı sayısıIntegerinteger
a2atkA2A görev ID'siStringkeyword
a2actA2A bağlam ID'si (çok turlu korelasyon)Stringkeyword
a2atsA2A görevinin son durumu, örneğin COMPLETED veya FAILEDStringkeyword
a2asnoİstek boyunca çağrılan giden agent skill'lerinin virgülle ayrılmış benzersiz adları (256 karakterde kesilir)Stringkeyword ignore_above: 256
a2aacoİstek boyunca yapılan toplam giden agent çağrısı sayısıIntegerinteger
aipLLM sağlayıcı tipi (örneğin openai, anthropic)Stringkeyword
aipidİsteği karşılayan LLM sağlayıcı kaydının ID'siStringkeyword
aimModel adıStringkeyword
aidtDağıtım tipi: CLOUD, ON_PREM veya OTHERStringkeyword
aitiPrompt (girdi) token sayısıLonglong
aitoCompletion (çıktı) token sayısıLonglong
aitcÖnbellekten gelen prompt token sayısıLonglong
aicmMikro USD cinsinden maliyet (maliyet × 1.000.000)Longlong
aicimGirdi token maliyeti (mikro USD)Longlong
aicomÇıktı token maliyeti (mikro USD)Longlong
aiccmÖnbellek token maliyeti (mikro USD)Longlong
aittftİlk token'a kadar geçen süre (ms)Longlong
aitpotÇıktı token'ı başına ortalama süre (ms)Longlong
ailatToplam gecikme (ms)Longlong
aigtmsGuardrail aşamasının toplam süresi (ms)Longlong
aiinfUpstream LLM HTTP gecikmesi (ms)Longlong
aiovhGateway ek yükü: toplam eksi guardrail eksi inference (ms)Longlong
aischSemantic cache'in isabet verip vermediğiBooleanboolean
aighTetiklenen guardStringkeyword
aigcTetiklenen kuralın kategorisiStringkeyword
aigvDış guardrail'in kararı: SAFE, UNSAFE, TIMEOUT, ERROR veya SKIPStringkeyword
aipdPII tespit edilip edilmediğiBooleanboolean
aifrBitiş nedeni (stop, length, tool_use, content_filter)Stringkeyword
aistrYanıtın streaming olup olmadığıBooleanboolean
aivkKimliği doğrulanmış çağıranın kimliği (principal; kayıt ID'si değildir)Stringkeyword
aitidAI trace kaydı referansıStringkeyword
aiffFailover yapılan birincil sağlayıcıStringkeyword
aiqscAşılan yumuşak limit yüzdesi (örneğin 80)Integerinteger
aiqaoALERT_ONLY taşma eyleminin tetiklenip isteğin devam edip etmediğiBooleanboolean
airclRoute classifier'ın döndürdüğü etiketStringkeyword
aircsRoute classifier sonucu: MATCHED, NONE, UNKNOWN_LABEL, TIMEOUT, ERROR, TRUNCATED, BACKOFF, NO_PROVIDER veya NO_INPUTStringkeyword
aircmsRoute classifier çağrı gecikmesi (ms)Longlong
airctiRoute classifier prompt token sayısıLonglong
airctoRoute classifier completion token sayısıLonglong
airccmRoute classifier maliyeti (mikro USD; aicm içinde değildir)Longlong
aivsİsteğin vektör katmanı olmadan neden devam ettiği (RAG, semantic cache veya Topic Guard)Stringkeyword
crLog politikası kaydının alındığı pipeline konumu (FROM_CLIENT, TO_BACKEND, FROM_BACKEND, TO_CLIENT); yalnız Log politikası kayıtlarında yazılırEnumkeyword
clLog politikasının atama seviyesi (API_PROXY_GROUP, API_PROXY, API_PROXY_METHOD); yalnız Log politikası kayıtlarında yazılırEnumkeyword
bilgi

Bu veri yapısında oluşan veri örneğini API Trafiği Log Kaydı Veri Yapısı sayfasında inceleyebilirsiniz.

Indeks Oluşturma ve Sorgulama​

Data stream ile indeks oluşurken ya da sorgulama yapılırken, istekler template'in içerisinde yer alan index_patterns meta verisi içerindeki değere gönderilir.

Indeks Oluşturma​

curl -XPOST "http://<ELASTICSEARCH_IP_ADDRESS>:<ELASTICSEARCH_PORT>/apinizer-log-apiproxy-<INDEX_KEY>/_doc" -H 'Content-Type: application/json' -d'{"@timestamp": "2023-05-31T11:40:36.376Z"}'

Sorgu Çalıştırma​

curl -XGET "http://<ELASTICSEARCH_IP_ADDRESS>:<ELASTICSEARCH_PORT>/apinizer-log-apiproxy-<INDEX_KEY>/_search" \
-H 'Content-Type: application/json' \
--data-binary @- <<'EOF'
{
"from": 0,
"size": 10,
"query": {
"bool": {
"filter": [
{
"range": {
"@timestamp": {
"from": "now-10m/m",
"to": "now/m",
"include_lower": true,
"include_upper": true
}
}
}
],
"adjust_pure_negative": true,
"boost": 1
}
},
"sort": [
{
"@timestamp": {
"order": "desc"
}
}
]
}
EOF
bilgi

Bu sayfadaki şablon API trafik logu içindir. SIEM hedeflerinin index şablonları farklıdır: SIEM Hedefleri için Elasticsearch Index Şablonları sayfasına bakabilirsiniz.