- API调用:
- 使用Elasticsearch的
search
API。
- 构建查询体,示例如下:
{
"query": {
"bool": {
"filter": [
{
"range": {
"@timestamp": {
"gte": "2023 - 01 - 01T00:00:00Z",
"lte": "2023 - 01 - 02T00:00:00Z"
}
}
},
{
"match": {
"log_level": "ERROR"
}
}
]
}
},
"aggs": {
"error_messages": {
"terms": {
"field": "error_message.keyword",
"size": 10
}
}
}
}
- 在上述查询体中:
range
子句用于指定时间范围,这里假设时间字段为@timestamp
,需根据实际情况调整。
match
子句用于匹配日志级别为ERROR
的日志。
aggs
部分使用terms
聚合,对error_message
字段进行统计,size
指定返回出现频率最高的前10条错误日志(可按需调整)。
- 数据处理步骤:
- 发送上述构建好的查询到Elasticsearch集群。
- 接收Elasticsearch返回的响应,响应体结构类似如下:
{
"took": 23,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 100,
"relation": "eq"
},
"max_score": null,
"hits": []
},
"aggregations": {
"error_messages": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "Error message 1",
"doc_count": 50
},
{
"key": "Error message 2",
"doc_count": 30
},
// 其他错误消息及计数
]
}
}
}
- 从响应体的
aggregations.error_messages.buckets
中提取错误消息及其出现次数。
- 以清晰易读的格式展示,例如:
错误消息:Error message 1,出现次数:50
错误消息:Error message 2,出现次数:30