如何在Elasticsearch 5.4中记录_bulk API请求日志
问题原因及解决方法(Elasticsearch 5.4)
核心原因
Elasticsearch 5.4中,_bulk属于批量写入类请求,默认不会被纳入搜索查询日志的范围:
- 默认的
search请求日志由org.elasticsearch.action.search相关日志器控制,而_bulk请求归属于org.elasticsearch.action.bulk或索引操作日志器。 - 初始的log4j2配置通常仅开启了搜索请求的日志输出,未针对批量操作或写入请求的日志器做配置。
解决方法
1. 记录所有API请求(含_bulk)的基础访问日志
如果需要记录所有API请求的路径、方法、状态等基础信息,需开启HTTP访问日志:
- 修改
config/log4j2.properties,添加或调整以下配置:appender.rolling.type = RollingFile appender.rolling.name = rolling appender.rolling.fileName = ${sys:es.logs.base_path}/${sys:es.logs.cluster_name}_access.log appender.rolling.layout.type = PatternLayout appender.rolling.layout.pattern = [%d{ISO8601}] [%level] [%logger] %msg%n appender.rolling.filePattern = ${sys:es.logs.base_path}/${sys:es.logs.cluster_name}_access-%d{yyyy-MM-dd}-%i.log.gz appender.rolling.policies.type = Policies appender.rolling.policies.time.type = TimeBasedTriggeringPolicy appender.rolling.policies.time.interval = 1 appender.rolling.policies.time.modulate = true appender.rolling.policies.size.type = SizeBasedTriggeringPolicy appender.rolling.policies.size.size = 256MB appender.rolling.strategy.type = DefaultRolloverStrategy appender.rolling.strategy.max = 30 logger.access.name = org.elasticsearch.http.netty4.Netty4HttpServerTransport logger.access.level = INFO logger.access.appenderRef.rolling.ref = rolling logger.access.additivity = false - 重启Elasticsearch后,所有HTTP请求(包括
_bulk)的基础信息会写入*_access.log文件。
2. 记录_bulk内的具体操作日志
如果需要记录_bulk中每条文档的索引、更新、删除操作细节,需调整索引写入慢日志配置:
- 先在log4j2.properties中确保写入日志的appender和日志器配置到位:
appender.indexing_rolling.type = RollingFile appender.indexing_rolling.name = indexing_rolling appender.indexing_rolling.fileName = ${sys:es.logs.base_path}/${sys:es.logs.cluster_name}_indexing_slowlog.log appender.indexing_rolling.layout.type = PatternLayout appender.indexing_rolling.layout.pattern = [%d{ISO8601}] [%level] [%index] %msg%n appender.indexing_rolling.filePattern = ${sys:es.logs.base_path}/${sys:es.logs.cluster_name}_indexing_slowlog-%d{yyyy-MM-dd}-%i.log.gz appender.indexing_rolling.policies.type = Policies appender.indexing_rolling.policies.time.type = TimeBasedTriggeringPolicy appender.indexing_rolling.policies.time.interval = 1 appender.indexing_rolling.policies.time.modulate = true appender.indexing_rolling.policies.size.type = SizeBasedTriggeringPolicy appender.indexing_rolling.policies.size.size = 256MB appender.indexing_rolling.strategy.type = DefaultRolloverStrategy appender.indexing_rolling.strategy.max = 30 logger.indexing.name = index_indexing_slow_log logger.indexing.level = INFO logger.indexing.appenderRef.indexing_rolling.ref = indexing_rolling logger.indexing.additivity = false - 然后通过动态设置(无需重启)或修改
elasticsearch.yml(需重启),将写入日志阈值设为0,实现所有操作都被记录:
或在# 动态设置所有索引的写入日志规则 PUT _all/_settings { "index.indexing.slowlog.threshold.index.debug": "0ms", "index.indexing.slowlog.threshold.index.info": "0ms" }elasticsearch.yml中添加全局配置:index.indexing.slowlog.threshold.index.debug: 0ms index.indexing.slowlog.threshold.index.info: 0ms - 完成后,
_bulk中的每个操作都会被记录到*_indexing_slowlog.log中。
3. 记录_bulk请求的完整原始内容
如果需要记录_bulk请求的完整请求体,可调整org.elasticsearch.action.bulk日志器的级别:
- 在log4j2.properties中添加:
logger.bulk.name = org.elasticsearch.action.bulk logger.bulk.level = DEBUG logger.bulk.appenderRef.rolling.ref = rolling logger.bulk.additivity = false - 注意:DEBUG级别会输出大量详细内容,可能占用较多磁盘空间,需根据实际需求调整。
注意事项
- Elasticsearch 5.4已停止官方支持,存在安全风险,建议尽快升级到受支持的版本。
- 修改log4j2配置后需重启Elasticsearch生效;动态修改索引设置无需重启,但会覆盖原索引配置。
内容的提问来源于stack exchange,提问作者Karthik Gopalaswamy
相关产品推荐
相关产品推荐

