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

Logstash HTTP输出回退:能否基于输出状态码触发其他输出?

如何基于Logstash HTTP输出的状态码触发另一个Elasticsearch输出

当然可以实现这个需求!Logstash的HTTP输出插件支持捕获响应的状态码,结合内置的条件判断逻辑,就能精准地把返回50x状态码的消息转发到另一个Elasticsearch实例中。下面是具体的实现方案:

核心思路

  • 开启HTTP输出的响应捕获功能,让Logstash把服务端返回的状态码存储到事件的元数据中;
  • 添加一个带有条件判断的Elasticsearch输出,仅当捕获到的状态码属于50x范围时,才将事件发送到目标ES。

配置示例

input {
  # 这里替换成你的实际输入源,比如Filebeat、日志文件等
  beats {
    port => 5044
  }
}

filter {
  # 按需添加你的过滤逻辑,比如字段清洗、数据转换等
}

output {
  # 主输出:向自定义服务发送数据
  http {
    url => "http://your-custom-service/api/ingest"
    method => "post"
    format => "json"
    # 关键配置:开启响应捕获,状态码会被存到[@metadata][http][status_code]
    capture_response => true
    # 可选:捕获响应体,方便后续排查错误原因
    capture_response_body => true
  }

  # 条件输出:仅当HTTP返回50x状态码时,转发到备用Elasticsearch
  if [@metadata][http][status_code] =~ /^5\d{2}$/ {
    elasticsearch {
      hosts => ["http://your-fallback-es:9200"]
      index => "logstash-http-50x-%{+YYYY.MM.dd}"
      # 按需添加ES认证、超时等配置
      # user => "elastic"
      # password => "your-password"
    }
  }
}

关键细节说明

  • capture_response参数:必须设置为true,这是触发后续条件判断的基础。开启后,Logstash会把HTTP响应的状态码、响应体等信息存入事件的[@metadata][http]元数据字段中(元数据不会被输出到最终目的地,仅用于内部逻辑判断)。
  • 条件判断逻辑:这里用正则/^5\d{2}$/匹配所有500-599的状态码,你也可以用范围判断替代:
    if [@metadata][http][status_code] >= 500 and [@metadata][http][status_code] < 600 {
      # ES输出配置
    }
    
  • 异常场景补充:如果遇到连接超时、DNS解析失败等无法获取状态码的情况,Logstash会把错误信息存入[@metadata][http][error]字段。如果需要覆盖这类场景,可以在条件中加入对该字段的判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:07:44