使用Freemark模板生成ES查询参数

时间:2022-12-24 19:42:01

需求1:查询ES数据并聚合

查询,然后聚合,当httpCode=400> 100,告警

{
"query": {
"bool": {
"must": [
{
"term": {
"pn": {
"value": "${pkgName}"
}
}
},
{
"range": {
"local_time": {
"gte": "${startTime}",
"lte": "${endTime}"
}
}
},
{
"bool": {
"should": [
<#list hostApiList as hostApi>
{
"bool": {
"must": [
{
"term": {
"fr": {
"value": "${hostApi.host}"
}
}
},
{
"term": {
"api": {
"value": "${hostApi.api}"
}
}
}
]
}
}<#if hostApi_has_next>,</#if></#list>
]
}
}
]
}
}
,
"size": 0,
"aggs": {
"group-by-host": {
"terms": {
"field": "fr",
"size": 1000
}
,
"aggs": {
"group-by-api": {
"terms": {
"field": "api",
"size": 1000
}
,
"aggs": {
"group-by-httpcode": {
"terms": {
"field": "http_code",
"size": 1000
}
}
}
}
}
}
}
}

需求2:倒序导出原始数据

光收到告警并不能排查问题,于是需要导出错误日志的记录以便查找问题.
导出最新的xxx条数据

模板文件ExportTemplate.ftl

{
"size": ${limitSize},
"query": {
"bool": {
"must": [
{
"term": {
"pn": {
"value": "${pkgName}"
}
}
},
{
"range": {
"local_time": {
"gte": "${startTime}",
"lte": "${endTime}"
}
}
},
{
"bool": {
"should": [
<#list queryInfoArray as queryInfo>
{
"bool": {
"must": [
{
"term": {
"fr": {
"value": "${queryInfo.host}"
}
}
},
{
"term": {
"api": {
"value": "${queryInfo.api}"
}
}
},
{
"term": {
"${codeKey}": {
"value": "${queryInfo.code}"
}
}
}
]
}
}<#if queryInfo_has_next>,</#if></#list>
]
}
}
]
}
},
"sort":{
"local_time":"desc"
}
}