Pinpoint v3.1.0 Release Notes
Release Date: 2026-05-20 // 26 days ago-
Highlights
👍 ApplicationName: 254-Character Support
The maximum length of
applicationNamehas been expanded from 24 to 254 characters, aligning it withSERVICE_NAME_MAX_LEN.Impact : Users with long, structured application identifiers (e.g.,
team.service.environment.region) can now register them as-is, removing the prior naming constraint that forced abbreviations.🐎 ServerMap V3 — Performance Improvements
ServerMap has been rebuilt as ServerMap V3 with a redesigned storage layout and query path.
- 🆕 New Map Tables:
MapAppSelf,MapAgentSelf,MapAppOut,MapAppIn,MapAppHost - Schema:
hbase-create-snappy.hbase
Impact : Faster initial render and time-range navigation on large topologies, lower HBase read amplification, and improved support for 254-character ApplicationName values.
GrpcBatchDataSender — Unary Span Transport
A new span transport,
SpanBatchGrpcDataSender, replaces the long-lived gRPC bidirectional stream (SpanGrpcDataSender) with a unarySendSpanListRPC that ships spans in independent batches.🚀 Starting from 3.1.0,
BATCHis the default in both local and release profiles:# pinpoint-root.configprofiler.transport.grpc.span.sender.type=BATCH# BATCH | STREAM👍 Collector-side support : the receiver-side
SpanServiceexposes the newSendSpanListRPC and returns batch-level results.
Requires a 3.1.0+ collector. Older collectors should keepsender.type=STREAM.Impact : simpler operational model (no stream restarts on partial failures), better resilience behind L7 proxies and rolling collector deploys,
🚤 and tunable batching that lets operators trade latency versus RPC overhead per workload.OpenTelemetry Metric Collection
Pinpoint Collector now supports receiving metrics via the OTLP protocol.
Applications can send metrics using the OpenTelemetry SDK or OpenTelemetry Collector without requiring the Pinpoint Agent.Heatmap View
A new Heatmap view is now available alongside Scatter Chart.
While Scatter Chart plots individual transactions, Heatmap provides a statistics-based visualization for faster data overview.Error Reason Categorization
💻 Errors are now categorized (e.g.
exception,http-status,sql) and the category is shown on the call stack in the web UI,
so you can tell at a glance why a span was marked as an error.🔧 Opt-in via agent configuration:
profiler.error.enable=true0️⃣ Choose which categories should mark a span as an error (default: all enabled):
# Allow-listprofiler.error.mark=http-status,sql# Or deny-listprofiler.error.mark.exclude=exceptionJDBC SQL Cache Expiration
📇 The SQL cache now expires entries after a configurable time, causing the agent to re-send the metadata periodically.
# Default: 168 hours (7 days). Set 0 or negative to disable.profiler.jdbc.sqlcacheexpirehours=168🐎 TraceIndex — Scatter Chart and Transaction List Performance Improvements
Scatter Chart and Transaction List now use the new
TraceIndextable for transaction lookup and filtering.Impact : Faster scatter chart loading, improved filtering efficiency for large transaction volumes, and support for longer
applicationNamevalues.🐎 Application and Agent List Performance Improvements
⚡️ Application List and Agent List now use the new
ApplicationandAgentIdtables with optimized lookup and active agent validation.Impact : Faster application and agent list queries with reduced backend processing overhead.
System Metric — Multi-table Mode
System Metric now supports multi-table mode for improved performance and scalability in large environments.
🗄 Deprecation
Flink-based Inspector
🗄 The legacy Inspector that relied on Apache Flink for statistics aggregation has been deprecated.
The new Inspector uses Apache Pinot for data collection and display. Please migrate to the new Pinot-based Inspector.
Compatibility Improvements
- Apache HttpClient 5.6
- MongoDB Java Driver 5.6
- Kafka 4.x
- async-http-client 3.x
- ClickHouse Java Client V2 (0.8.0)
- 🔌 Spring R2DBC plugin:
io.asyncer:r2dbc-mysqlsupport - New plugin: IBM DB2
Observability and Tracing Improvements
- Reactor / reactor-netty : reduced excessive span event generation to lower trace noise
- Kafka Streams : entry point changed so requests are traced individually rather than only at the queue polling level
- Spring Kafka : new entry point options for
KafkaMessageListenerContainer, including container-level tracing and error marking - Lettuce Pub/Sub : transaction tracing for
RedisPubSubListenerimplementations - HTTP clients (Apache HttpClient, JDK HTTP, Ning, Google, OkHttp): configurable
mark.erroroption to control whether client-side errors mark a transaction as failed
What's Changed
- [#11607] Prepare 3.1.0-SNAPSHOT by @intr3p1d in #11608
- [#7497] ErrorAnalysis > Show groupedFieldName.uriTemplate by @jihea-park in #11609
- [#10776] Adding sortkey for kafka partition distribution by @minwoo-jung in #11610
- [#11433] Add Application agent list query options by @donghun-cho in #11547
- [#7374] Apply help popover to v3 by @jihea-park in #11614
- ⚡️ [#noissue] Update README by @intr3p1d in #11616
- [#noissue] Bump actions/setup-java@v3 to actions/setup-java@v4 by @intr3p1d in #11617
- [#noissue] Fix type error of HelpPopover by @jihea-park in #11619
- [#noissue] Fix type error of HelpPopover2 by @jihea-park in #11623
- [#11620] Bump springframework from 6.1.5 to 6.1.14 by @emeroad in #11621
- [#11622] Bump spring-boot from 3.2.4 to 3.3.5 by @emeroad in #11624
- [#noissue] Cleanup springframework dependency by @emeroad in #11625
- ⚡️ [#noissue] Update README.md by @emeroad in #11630
- ⚡️ [#noissue] Update README.md by @emeroad in #11631
- ✅ [#10776] add test code by @minwoo-jung in #11632
- 0️⃣ [#10776] If metricGroup, metric, and field name are empty string, put the default value by @minwoo-jung in #11633
- [#10776] OpenTelemetry > Prepare beta open by @jihea-park in #11634
- ⚡️ [#noissue] Update plugins url by @intr3p1d in #11635
- ✅ [#11628] Bump spring-boot2 from 2.7.13 to 2.7.17 for plugin-test by @emeroad in #11629
- ✅ [#11626] Bump springframework5 from 5.3.28 to 5.3.39 for plugin-test by @emeroad in #11627
- [#noissue] Fix renderHelpContent error by @jihea-park in #11636
- [#11638] Bump spring-data from 3.2.2 to 3.3.3 by @emeroad in #11639
- 🚚 [#noissue] Remove unnecessary zk cluster from web module by @emeroad in #11637
- [#7374] Apply help popover to v3 (NAVBAR, REAL_TIME, CALL_TREE) by @jihea-park in #11641
- [#NOISSUE] Disable KafkaAutoConfiguration. Because it is not used. by @minwoo-jung in #11642
- [#11643] Bump spring-batch from 5.1.1 to 5.1.2 by @emeroad in #11644
- ⚡️ [#11611] Update mysql-jdbc-plugin support to mysql-connector-j 9.x by @jaehong-kim in #11612
- 📄 [#noissue] Add docs on sql related configs by @kojandy in #11650
- ⚡️ [#11647] Update httpclient5-plugin support to httpclient5 5.4 by @jaehong-kim in #11649
- [#11640] Introduce redis-timeseries module by @emeroad in #11645
- [#11653] Bump kafka-client from 3.3.2 to 3.7.1 by @emeroad in #11654
- 📜 [#10776] Improve logic for parsing names of metricGroup, metric, and field. by @minwoo-jung in #11655
- [#noissue] Cleanup kafka dependency by @emeroad in #11656
- [#11433] Change servermap agent list condition by @donghun-cho in #11657
- [#11659] Replaced log4 1.x with reload4j by @emeroad in #11660
- 🚚 [#11659] Remove log4j 1.x dependency by @emeroad in #11661
- [#10776] Add index to tables and schema of otlpmetric. by @minwoo-jung in https://github.com/pinpoint-ap...
- 🆕 New Map Tables:
Previous changes from v3.0.5
-
What's Changed
- [#13054] Migrate to Central Portal Publisher by @intr3p1d in #13111
- [#13054] Prepare 3.0.5-SNAPSHOT by @intr3p1d in #13113
- ⚡️ [#13275] Backport: Update agent interceptable target by @jaehong-kim in #13276
- ⚡️ [#13355] Backport: Update s3 http auth header by @jaehong-kim in #13356
- 🔌 [#13483] Backport: Fix grpc-plugin ServerStreamGetter by @jaehong-kim in #13484
- ⚡️ [#13496] Backport: Update agent grpcSpanSender state init by @jaehong-kim in #13498
- ⚡️ [#13511] Backport: Update to reduce the occurrence of span events rel… by @jaehong-kim in #13513
- 🚀 [#13546] 3.0.5 release by @intr3p1d in #13548
Full Changelog : v3.0.4...v3.0.5

