OwlFocus

pinpoint java.net.PortUnreachableException ICMP Port Unreachable

pinpoint java.net.PortUnreachableException: ICMP Port Unreachable

错误

使用pinpoint代理监控应用程序时,出现错误 java.net.PortUnreachableException: ICMP Port Unreachable

1
2
3
4
5
6
7
8
9
10
2017-10-04 16:06:37 [INFO ](c.n.p.p.s.UdpDataSender ) packet send error. size:339, TSpan(agentId:pft-rest, applicationName:pft-rest, agentStartTime:1507104270410, transactionId:00 01 CA D0 A8 B3 EE 2B 10, spanId:7542318718835916861, startTime:1507104397297, elapsed:95, rpc:/rest/v1/pft.ticket/update, serviceType:1030, endPoint:192.168.20.144:80, remoteAddr:192.168.20.144, flag:0, spanEventList:[TSpanEvent(sequence:3, startElapsed:10, endElapsed:83, serviceType:9110, endPoint:192.168.20.144:18902, annotations:[TAnnotation(key:90, value:<TAnnotationValue stringValue:[Ljava.lang.Object;@19fffe8c>), TAnnotation(key:91, value:<TAnnotationValue stringValue:RpcResult [result=true, exception=null]>)], depth:4, nextSpanId:-4375591379758469409, destinationId:192.168.20.144:18902, apiId:-41), TSpanEvent(sequence:2, startElapsed:9, endElapsed:84, serviceType:5071, depth:3, apiId:31), TSpanEvent(sequence:1, startElapsed:1, endElapsed:94, serviceType:5051, depth:2, apiId:2), TSpanEvent(sequence:0, startElapsed:0, endElapsed:95, serviceType:1031, depth:1, apiId:-1)], apiId:1, applicationServiceType:1030)
java.net.PortUnreachableException: ICMP Port Unreachable
at java.net.PlainDatagramSocketImpl.send(Native Method)
at java.net.DatagramSocket.send(DatagramSocket.java:693)
at com.navercorp.pinpoint.profiler.sender.UdpDataSender.sendPacket(UdpDataSender.java:134)
at com.navercorp.pinpoint.profiler.sender.AbstractDataSender$1.execute(AbstractDataSender.java:68)
at com.navercorp.pinpoint.profiler.sender.AsyncQueueingExecutor.doExecute(AsyncQueueingExecutor.java:172)
at com.navercorp.pinpoint.profiler.sender.AsyncQueueingExecutor.doExecute(AsyncQueueingExecutor.java:96)
at com.navercorp.pinpoint.profiler.sender.AsyncQueueingExecutor.run(AsyncQueueingExecutor.java:79)
at java.lang.Thread.run(Thread.java:745)

解决

pinpoint收集程序跑在docker容器中,在暴露pinpoint收集器端口时,没有区分通信协议,导致数据不能被收集器收集。
pinpoint收集器端口,其中profiler.collector.span.port=29996和profiler.collector.stat.port=29995需要走upd协议;profiler.collector.tcp.port=29994走tcp协议。

1
2
3
4
5
6
7
8
profiler.collector.span.ip=${profiler.collector.ip}
profiler.collector.span.port=29996
profiler.collector.stat.ip=${profiler.collector.ip}
profiler.collector.stat.port=29995
profiler.collector.tcp.ip=${profiler.collector.ip}
profiler.collector.tcp.port=29994
  • 修改前

    1
    docker run -i -t -p 9380:28080/tcp -p 29994:29994/tcp -p 29995:29995/udp -p 29996:29996/udp pft/pinpoint:latest bash
  • 修改后

    1
    docker run -i -t -p 9380:28080/tcp -p 29994:29994/tcp -p 29995:29995/udp -p 29996:29996/udp pft/pinpoint:latest bash