pinpoint-apm/pinpoint · warning

Failed to send agentInfo

Error message

Failed to send agentInfo

What it means

Fallback branch of logError: the same exception-driven send failure is logged without agent details because agentInfo or its AgentInformation is null. Cause is chained in the log; the send fails and retries.

Source

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

                    }
                }
                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");
        }

        public Builder refreshInterval(long refreshIntervalMs) {
            this.refreshIntervalMs = refreshIntervalMs;

View on GitHub (pinned to 744c3d3075)

Solutions

  1. Populate AgentInformation correctly (agentId, applicationName, agentStartTime, hostname) in pinpoint.config / Builder
  2. Fix the underlying network/collector issue revealed by the chained cause
  3. Confirm collector reachability with a connection test from the agent host
  4. Monitor retry success after fixing; agent registration completes once a send succeeds

Example fix

// before: agentInfo without information
new AgentInfo(null, jvmInfo, serverMetaData, serviceInfoCollection)
// after
new AgentInfo(new AgentInformation(agentId, applicationName, ...), jvmInfo, serverMetaData, serviceInfoCollection)
Defensive patterns

Strategy: try-catch

Validate before calling

if (agentInfo == null || agentInfo.getAgentInformation() == null)
    throw new IllegalStateException("AgentInformation missing before send");

Try / catch

try { ... }
catch (ExecutionException ex) { logError(agentInfo, ex.getCause()); }
catch (InterruptedException ex) { Thread.currentThread().interrupt(); }

Prevention

When it happens

Trigger: Send exception (timeout/execution failure) while agentInfo == null or agentInfo.getAgentInformation() == null — an infra failure combined with missing agent metadata.

Common situations: Early startup or programmatic Builder misuse producing AgentInfo without AgentInformation, while the collector is simultaneously unreachable.

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/08b243d9cdc2df3d. Report an issue: GitHub.