You need to enable JavaScript to run this app. Logstash解析ModSecurity审计日志时嵌套JSON无法正确拆分字段
优惠活动
大模型
产品
解决方案
定价
更多

Logstash解析ModSecurity审计日志时嵌套JSON无法正确拆分字段

从你提供的Elasticsearch查询结果来看,当前Logstash的JSON解析逻辑已经正常生效,原始日志内容已经被结构化存储到transaction字段下,你感知到的解析异常通常是字段冗余、层级不符合使用习惯、时间戳不准确这类问题,可通过补充filter配置优化:

优化后的Logstash配置

filter段参考

filter {
  json {
    source => "message"
    skip_on_invalid_json => "true"
    tag_on_failure => ["_jsonparsefailure"]
    # 无需保留原始日志字符串可开启此行删除冗余字段
    remove_field => ["message"]
  }

  # 校正时间为日志实际生成时间,替换默认的Logstash采集时间
  date {
    match => ["[transaction][time_stamp]", "EEE MMM dd HH:mm:ss yyyy"]
    timezone => "Asia/Shanghai" # 请替换为你服务器实际使用的时区
    target => "@timestamp"
  }

  # 可选:将transaction下的所有字段提取到根层级,无需层级嵌套可开启
  ruby {
    code => '
      event.get("transaction")&.each do |key, value|
        event.set(key, value)
      end
      event.remove("transaction")
    '
  }

  # 可选:字段类型转换,适配后续查询统计需求
  mutate {
    convert => {
      "[transaction][host_port]" => "integer"
      "[transaction][client_port]" => "integer"
      "[transaction][request][http_version]" => "float"
      "[transaction][response][http_code]" => "integer"
    }
  }

  # 可选:解析失败的日志处理逻辑,可选择丢弃或者保留排查
  if "_jsonparsefailure" in [tags] {
    # drop {} # 无需保留解析失败的日志可开启此行
  }
}

配置说明

  • 冗余字段清理:remove_field => ["message"]会删除原始的JSON字符串字段,避免重复存储占用磁盘,有原始日志留存需求可删除该行配置。
  • 时间校正:默认@timestamp是Logstash读取到日志的时间,通过date过滤器替换为ModSecurity记录的真实请求时间,符合日志查询的常规使用场景,注意时区参数要和你的服务器时区匹配,否则会出现时间偏移。
  • 字段层级扁平化:ruby段会将原本嵌套在transaction下的client_ip、request、response等字段提取到根层级,在Kibana查询时无需额外加transaction.前缀,习惯保留层级结构可删除该段配置。
  • 类型转换:将端口、状态码等字段转为数值类型,方便后续做范围查询、聚合统计,比如统计不同状态码的请求占比、筛选指定端口的访问日志。IP字段的类型转换更建议在Elasticsearch的索引模板中设置为ip类型,适配IP段查询需求。

内容的提问来源于stack exchange,提问作者Blason R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 02:45:04