MST

星途 面试题库

面试题:ElasticSearch复杂聚合在日志分析中的实现

假设存在一个包含多种服务日志的ElasticSearch索引,日志中包含时间戳、服务名称、日志级别、错误信息等字段。现在要求通过聚合操作,找出在过去一周内,每个服务出现频率最高的错误信息及其出现次数,且只关注错误级别为'ERROR'的日志。请描述实现这一需求的ElasticSearch聚合查询语句及步骤。
35.4万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试
  1. 聚合查询语句
{
    "query": {
        "bool": {
            "filter": [
                {
                    "range": {
                        "时间戳": {
                            "gte": "now-1w"
                        }
                    }
                },
                {
                    "term": {
                        "日志级别": "ERROR"
                    }
                }
            ]
        }
    },
    "aggs": {
        "by_service": {
            "terms": {
                "field": "服务名称",
                "size": 10000
            },
            "aggs": {
                "top_error": {
                    "terms": {
                        "field": "错误信息",
                        "size": 1
                    }
                }
            }
        }
    }
}
  1. 步骤
    • 查询筛选
      • 使用range过滤器,通过now - 1w指定时间范围为过去一周,确保只考虑在这个时间范围内的日志。
      • 使用term过滤器,指定日志级别ERROR,只关注错误级别的日志。
    • 聚合操作
      • 外层聚合by_service使用terms聚合按服务名称进行分组,size设置为足够大的值以获取所有服务。
      • 内层聚合top_error使用terms聚合在每个服务分组内按错误信息进行分组,并通过size设置为1,获取出现频率最高的错误信息。最终返回的结果将按服务名称分组,每个服务分组下包含出现频率最高的错误信息及其出现次数。