问题现象
agent停止,数据上传异常。查询业务数据后发现,业务数据也异常
问题分析
在10.1.228.172的agent目录下的在httpchanle.log中发现,这个机器的agent自发现把10.1.228.176当成了跳板机。
2019-06-18 21:40:38 ReceiverRunable - [ INFO ] 设置自动发现的跳板机IP= 10.1.228.176
2019-06-18 21:40:39 SendRunable - [ INFO ] 发送ping信号
2019-06-18 21:40:39 ReceiverRunable - [ INFO ] 接收到10.1.228.172发送的ping信号
2019-06-18 21:40:39 ReceiverRunable - [ INFO ] 接收到10.1.228.176发送的pong信号
又看了下errorCollection.log,确认了数据确实再向10.1.228.176,发送数据。
2019-06-18 21:46:14 HttpClientUtil - [ ERROR ] url = https://10.1.228.176:44444/send/api/metric
2019-06-18 21:46:14 ForwardEventSink - [ ERROR ] Sink send data happends IOException !!
java.io.IOException: Timeout waiting for connection from pool
at ycm.agent.util.send.HttpClientUtil.sendPost(HttpClientUtil.java:186)
at ycm.agent.util.send.HttpClientUtil.send(HttpClientUtil.java:110)
at ycm.agent.util.send.SinkTool.sendPost(SinkTool.java:39)
at ycm.agent.appmoni.trace.ForwardEventSink.sendTraceData(ForwardEventSink.java:214)
at ycm.agent.appmoni.trace.ForwardEventSink.dealEventData(ForwardEventSink.java:176)
at ycm.agent.appmoni.trace.ForwardEventSink.process(ForwardEventSink.java:67)
at org.apache.flume.sink.DefaultSinkProcessor.process(DefaultSinkProcessor.java:68)
at org.apache.flume.SinkRunner$PollingRunner.run(SinkRunner.java:148)
at java.lang.Thread.run(Thread.java:662)
去10.1.228.176看同样日志发现,这台机器的agent把数据发往了10.1.228.173上发送数据。在6月18号晚,云端新架构上线,agent自己连接不到这样所有的agent都这么做,使agent行程了闭环,数据在内网发不出来。
代码逻辑
当有两台以上的服务器能连公网的情况下:
2018年6月~2018年11月这个版本的agent的自发现跳板机逻辑是:如果当前agent检测agent和云端不能通信,那么他就会实时的去找在同一网段的别的机器的agent,认为他是跳板机,把数据发向他。
新版探针,也有这个自发现跳板机的功能,但是加了一层判断,每隔几分钟就检测本agent和云端的通信状况,如果可以通信,就用本agent把数据发往云端,进而避免了成环解不了套的局面。
解决办法
临时解决
重启其中一台agent,让环打开,各自把数据发往云端。
永久解决
更换最新版的探针