現在nginxのアクセスログを蓄積しており過去n分間の取引のうち処理時間(duration.rpが当たります)m秒以上がx%以上だったら警告というような運用を考えています。
データとして以下のようにn秒以上の件数をすべて抜き出し0秒以上の全件で割れば算出できるのではと考えましたがctx.payload.aggregations.duration_sla.bucketsの個別の要素へのアクセス方法と計算処理をどこに書けばよいかがいまいちわかっておらず、教えていただきたいです。
bucketsについては右記のようなアクセスを試して失敗しています。ctx.payload.aggregations.duration_sla.buckets['0.0-*']
{
"trigger": {
"schedule": {
"interval": "1m"
}
},
"input": {
"search": {
"request": {
"search_type": "query_then_fetch",
"indices": [
<<index>>
],
"types": [ ],
"body": {
"query": {
"bool": {
"must": [
{
"match_all": {}
},
{
"range": {
"timestamp.timefilter": {
"gte": "now-{{ctx.metadata.time_window}}"
}
}
}
],
"filter": [ ],
"should": [],
"must_not": []
}
},
"aggs": {
"duration_sla": {
"range": {
"field": "duration.rp",
"ranges": [
{
"from": 0
},
{
"from": 3
},
{
"from": 5
}
]
}
}
}
}
}
}
},
"transform": {
ここで割合を算出?
},
"condition": {
ここで割合のしきい値超過を判定
},
"actions": {
"email_me": {
"email": {
"profile": "standard",
"attachments": {
"<<filename>>": {
"reporting": {
"url": "<<URL>>",
"retries": 6,
"interval": "20s",
"auth": {
"basic": {
"username": "<<id>>",
"password": "<<pass>>"
}
}
}
}
},
"from": "<<mail>>",
"to": [
"<<mail>>"
],
"cc": [],
"subject": "<<subject>>",
"body": {
"html": "{{#ctx.payload.aggregations.duration_sla.buckets}}{{key}}:({{doc_count}}):{{/ctx.payload.aggregations.duration_sla.buckets}}"
}
}
}
},
"metadata": {
"time_window": "2m"
}
}