You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 20:15:16