如何在ElasticSearch中找出占索引容量最多的日志文件及来源服务器
ElasticSearch 查询Top10服务器与日志文件容量占比
前提说明
要统计日志的容量占比,需先确保能获取每条日志文档的字节大小:
- 若你的索引已启用
_size字段(存储每个文档的字节大小),可直接使用该字段; - 若未启用,可通过脚本计算
_source的大小(性能略差),或在日志摄入阶段(如Filebeat/Logstash)添加自定义字段记录单条日志的大小。
1. 查询Top10来源服务器的容量占比
替换请求中的字段和索引名为你的实际信息:
GET /your-daily-index/_search { "size": 0, "aggs": { "top_servers": { "terms": { "field": "server_ip.keyword", # 替换为你的服务器标识字段(需用keyword类型) "size": 10, "order": { "total_size": "desc" } }, "aggs": { "total_size": { "sum": { "field": "_size" # 若用_source大小,替换为:"script": "doc['_source'].length()" } }, "size_percentage": { "bucket_script": { "buckets_path": { "bucketSize": "total_size", "totalSize": "_total_size" }, "script": "(bucketSize / totalSize) * 100" } } } }, "_total_size": { "sum": { "field": "_size" # 与上面的sum字段保持一致 } } } }
2. 查询Top10日志文件的容量占比
仅需替换分组字段为日志文件名字段:
GET /your-daily-index/_search { "size": 0, "aggs": { "top_log_files": { "terms": { "field": "log_filename.keyword", # 替换为你的日志文件名字段(需用keyword类型) "size": 10, "order": { "total_size": "desc" } }, "aggs": { "total_size": { "sum": { "field": "_size" # 若用_source大小,替换为:"script": "doc['_source'].length()" } }, "size_percentage": { "bucket_script": { "buckets_path": { "bucketSize": "total_size", "totalSize": "_total_size" }, "script": "(bucketSize / totalSize) * 100" } } } }, "_total_size": { "sum": { "field": "_size" # 与上面的sum字段保持一致 } } } }
关键说明
size: 0:仅返回聚合结果,不返回具体日志文档,提升查询效率;terms聚合:按指定字段分组,size:10限制返回Top10结果;sum聚合:计算每个分组的总字节大小;bucket_script:计算当前分组占索引总容量的百分比;- 字段类型:必须使用
keyword类型的字段进行分组,避免因分词导致分组混乱。
内容的提问来源于stack exchange,提问作者Dilshad Abduwali
相关产品推荐
相关产品推荐

