• (:зゝ∠) 刚撸了下 input-raw 代码
    目测在 listener.go -> func dispatchMessage 新增管道丢数据到 ES 插件看看是否可行

    tag v1.0.0

    func (t *Listener) dispatchMessage(message *TCPMessage) {
        // If already dispatched
        if _, ok := t.messages[message.ID()]; !ok {
            return
        }
    
        t.deleteMessage(message)
    
        if !message.complete {
            if !message.IsIncoming {
                delete(t.respAliases, message.Ack)
                delete(t.respWithoutReq, message.Ack)
            }
    
            return
        }
    
        if message.IsIncoming {
            // If there were response before request
            // log.Println("Looking for Response: ", t.respWithoutReq, message.ResponseAck)
            if t.trackResponse {
                if respID, ok := t.respWithoutReq[message.ResponseAck]; ok {
                    if resp, rok := t.messages[respID]; rok {
                        // if resp.AssocMessage == nil {
                        // log.Println("FOUND RESPONSE")
                        resp.setAssocMessage(message)
                        message.setAssocMessage(resp)
    
                        if resp.complete {
                            defer t.dispatchMessage(resp)
                        }
                        // }
                    }
                }
    
                if resp, ok := t.messages[message.ResponseID]; ok {
                    resp.setAssocMessage(message)
                }
            }
        } else {
            if message.AssocMessage == nil {
                if responseRequest, ok := t.respAliases[message.Ack]; ok {
                    message.setAssocMessage(responseRequest)
                    responseRequest.setAssocMessage(message)
                }
            }
    
            delete(t.respAliases, message.Ack)
            delete(t.respWithoutReq, message.Ack)
    
            // Do not track responses which have no associated requests
            if message.AssocMessage == nil {
                // log.Println("Can't dispatch resp", message.Seq, message.Ack, string(message.Bytes()))
                return
            }
        }
    
        t.messagesChan <- message
        //TODO 
        //此处不清楚 es chan 是多少,或者自己搞一个 _(:зゝ∠)_
        t.esChan <- message 
    }
    
  • (:зゝ∠)

    脑袋一热,想着是否可在--input-raw-track-response plugins 编写下丢 ES 的代码

    但又想想 ELK 全家桶是否更简单点。。。。。

  • 多谢 , 节省了我继续踩坑的时间 (:зゝ∠)

  • 感谢回复

    采用 gor 监控流量并发送给 ES,出于两个目的(1、流量收集【测试团队进行整体回归时】,2、流量监控【开发集成环境快速定位接口与入出参数】)

    第一个目的基本已经达到了、第二个目的还剩下些疑问:
    假设不回放,不增加--output-http 是没办法触发数据发送至 ES、(代码层面我没细看,但看了文档没发现此方面描述)
    回放的话、现在拿不到 response,则无法很好判断此次请求是否 success

    (:зゝ∠)

  • @ShaoNianyr 请教个问题,刚接触 gor、
    --input-raw 监控 5000 端口情况下,
    --output-http 又回放到 5000 端口,此情况应用程序和 ES 都会进入无脑循环阶段,一条简单的请求,ES 会增加重复数据几百几千次。

    以上问题实测,分支:go-es-6x

    回访地址改成 openrestry(虽然回放失败)但 ES 和应用程序此时正常接收到 1 条请求消息 但拿不到 response