pinpoint-apm/pinpoint · warning

Failed to send agentInfo={}

Error message

Failed to send agentInfo={}

What it means

logError is the catch-all error logger for exceptions thrown during the AgentInfo send (TimeoutException, ExecutionException cause, etc.). It logs 'Failed to send agentInfo=<AgentInformation>' plus the cause when agent details are available. The send is considered failed and retried on the next cycle.

Source

Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/AgentInfoSender.java:210

                    } else {
                        logger.warn("Failed to send agentInfo. request unsuccessful, response={}", result.getMessage());
                    }
                }
                return result.isSuccess();
            } catch (ExecutionException ex) {
                logError(agentInfo, ex.getCause());
            } catch (InterruptedException ex) {
                Thread.currentThread().interrupt();
                logError(agentInfo, ex);
            } catch (TimeoutException ex) {
                logError(agentInfo, ex);
            }
            return false;
        }

        private void logError(AgentInfo agentInfo, Throwable cause) {
            if (agentInfo != null && agentInfo.getAgentInformation() != null) {
                logger.warn("Failed to send agentInfo={}", agentInfo.getAgentInformation(), cause);
            } else {
                logger.warn("Failed to send agentInfo", cause);
            }
        }
    }

    public static class Builder {
        private final AsyncDataSender<MetaDataType, ResultResponse> dataSender;
        private final AgentInfoFactory agentInfoFactory;
        private long refreshIntervalMs = DEFAULT_AGENT_INFO_REFRESH_INTERVAL_MS;
        private long sendIntervalMs = DEFAULT_AGENT_INFO_SEND_INTERVAL_MS;
        private int maxTryPerAttempt = DEFAULT_MAX_TRY_COUNT_PER_ATTEMPT;

        public Builder(AsyncDataSender<MetaDataType, ResultResponse> dataSender, AgentInfoFactory agentInfoFactory) {
            this.dataSender = Objects.requireNonNull(dataSender, "dataSender");
            this.agentInfoFactory = Objects.requireNonNull(agentInfoFactory, "agentInfoFactory");
        }

View on GitHub (pinned to 744c3d3075)

Solutions

  1. Read the chained 'cause' exception in the log — TimeoutException means network/collector latency, ExecutionException wraps transport errors
  2. Verify collector host/port in pinpoint.config (profiler.collector.ip / .tcp / .span / .stat ports) and connectivity (telnet/nc)
  3. Check collector load and GC/HBase latency; increase capacity or raise the 3s threshold by adjusting code if persistently slow
  4. Transient failures self-heal via retry; alert on repeated occurrences
Defensive patterns

Strategy: try-catch

Validate before calling

// connectivity pre-check before agent start
telnet <collector-host> 9994  # or nc -zv host port

Try / catch

try { ResultResponse r = future.get(3000, TimeUnit.MILLISECONDS); ... }
catch (ExecutionException ex) { logError(agentInfo, ex.getCause()); return false; }
catch (TimeoutException ex) { logger.warn("agentInfo send timed out; collector unreachable/slow"); return false; }
catch (InterruptedException ex) { Thread.currentThread().interrupt(); return false; }

Prevention

When it happens

Trigger: future.get(3000, MILLISECONDS) throws TimeoutException (collector did not respond in 3s) or ExecutionException whose cause is passed to logError; also InterruptedException handled elsewhere.

Common situations: Collector unreachable, slow, or overloaded; network partition between agent and collector; collector restart; firewall dropping the RPC port.

Understand the failure class

Background: Request timed out: what client-side request timeouts mean across libraries (Request timed out, TIMED_OUT, APITimeoutError) — this error's family across 39 libraries.

Related errors


AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07). Data as JSON: /api/errors/09a564dc8e422b7c. Report an issue: GitHub.