3.9.0
Changes
- When sending Serverless telemetry using the
nrlambda
integration, support an externally-managed named pipe.
nrlambda
integration, support an externally-managed named pipe.nrmysql
.Host
field in the
WebRequest
struct, which defaults to the empty string.Host
header is now being correctly captured and recorded in the
request.headers.host
attribute, as described
here.When Config.Transport
is nil, no longer use the http.DefaultTransport
when communicating with the New Relic backend. This addresses an issue with
shared transports as described in https://github.com/golang/go/issues/33006.
If a timeout occurs when attempting to send data to the New Relic backend, instead of dropping the data, we save it and attempt to send it with the next harvest. Note data retention limits still apply and the agent will still start to drop data when these limits are reached. We attempt to keep the highest priority events and traces.
Added support for adding custom attributes directly to spans. These attributes will be visible when looking at spans in the distributed tracing UI.
Example:
txn := newrelic.FromContext(r.Context())
sgmt := txn.StartSegment("segment1")
defer sgmt.End()
sgmt.AddAttribute("mySpanString", "hello")
sgmt.AddAttribute("mySpanInt", 123)
Custom attributes added to the transaction with txn.AddAttribute
are now
also added to the root span and will be visible when looking at the
span in the distributed tracing UI. These custom attributes can be disabled
from all destinations using Config.Attributes.Exclude
or disabled from spans specifically using Config.SpanEvents.Attributes.Exclude
.
Agent attributes added to the transaction are now also added to the root span
event and will be visible when looking at the span in the distributed tracing
UI. These attributes include the request.uri
and the request.method
along
with all other attributes listed in the attributes section of our
godocs.
These agent attributes can be disabled from all destinations using
Config.Attributes.Exclude
or disabled from spans specifically using
Config.SpanEvents.Attributes.Exclude
.
Fixed an issue where it was impossible to exclude the attributes
error.class
and error.message
from the root span. This issue has
now been fixed. These attributes can now be excluded from all spans
using Config.Attributes.Exclude
or Config.SpanEvents.Attributes.Exclude
.
Fixed an issue that caused Go's data race warnings to trigger in certain situations
when using the newrelic.NewRoundTripper
. There were no reports of actual data corruption,
but now the warnings should be resolved. Thank you to @blixt for bringing this to our
attention!
Added support for Infinite Tracing on New Relic Edge.
Infinite Tracing observes 100% of your distributed traces and provides visualizations for the most actionable data so you have the examples of errors and long-running traces so you can better diagnose and troubleshoot your systems.
You configure your agent to send traces to a trace observer in New Relic Edge. You view your distributed traces through the New Relic’s UI. There is no need to install a collector on your network.
Infinite Tracing is currently available on a sign-up basis. If you would like to participate, please contact your sales representative.
nrgin.Middleware
uses
Context.FullPath()
for transaction names when using Gin version 1.5.0 or greater. Gin
transactions were formerly named after the
Context.HandlerName()
,
which uses reflection. This change improves transaction naming and reduces
overhead. Please note that because your transaction names will change, you
may have to update any related dashboards and alerts to match the new name.
If you wish to continue using Context.HandlerName()
for your transaction
names, use
nrgin.MiddlewareHandlerTxnNames
instead.
// Transactions previously named
"GET main.handleGetUsers"
// will be change to something like this match the full path
"GET /user/:id"
Note: As part of agent release v3.4.0, a v2.0.0 tag was added to the nrgin package. When using go modules however, it was impossible to install this latest version of nrgin. The v2.0.0 tag has been removed and replaced with v1.1.0.
Attribute http.statusCode
has been added to external span events
representing the status code on an http response. This attribute will be
included when added to an ExternalSegment in one of these three ways:
NewRoundTripper
with your http.ClientExternalSegment
ExternalSegment.SetStatusCode
API to set the status code directlyTo exclude the http.statusCode
attribute from span events, update your
agent configuration like so, where cfg
is your newrelic.Config
object.
cfg.SpanEvents.Attributes.Exclude = append(cfg.SpanEvents.Attributes.Exclude, newrelic.SpanAttributeHTTPStatusCode)
Error attributes error.class
and error.message
are now included on the
span event in which the error was noticed, or on the root span if an error
occurs in a transaction with no segments (no chid spans). Only the most recent error
information is added to the attributes; prior errors on the same span are
overwritten.
To exclude the error.class
and/or error.message
attributes from span events, update your
agent configuration like so, where cfg
is your newrelic.Config
object.
cfg.SpanEvents.Attributes.Exclude = append(cfg.SpanEvents.Attributes.Exclude, newrelic.newrelic.SpanAttributeErrorClass, newrelic.SpanAttributeErrorMessage)
Use
Context.FullPath()
for transaction names when using Gin version 1.5.0 or greater. Gin
transactions were formerly named after the
Context.HandlerName()
,
which uses reflection. This change improves transaction naming and reduces
overhead. Please note that because your transaction names will change, you
may have to update any related dashboards and alerts to match the new name.
// Transactions previously named
"GET main.handleGetUsers"
// will be change to something like this match the full path
"GET /user/:id"
Added support for GraphQL in two new integrations:
Added database instrumentation support for snowflakedb/gosnowflake.
When using
newrelic.StartExternalSegment
or
newrelic.NewRoundTripper
,
if existing cross application tracing or distributed tracing headers are
present on the request, they will be replaced instead of added.
The
FromContext
API which allows you to pull a Transaction from a context.Context will no
longer panic if the provided context is nil. In this case, a nil is
returned.
If a .NET agent is initiating distributed traces as the root service, you must update that .NET agent to version 8.24 or later before upgrading your downstream Go New Relic agents to this agent release.
v7
of go-redis/redis
in the new v3/integrations/nrredis-v7
package.
Updated Gorilla instrumentation to include request time spent in middlewares.
Added new nrgorilla.Middleware
and deprecated nrgorilla.InstrumentRoutes
.
Register the new middleware as your first middleware using
Router.Use
. See the
godocs examples
for more details.
r := mux.NewRouter()
// Always register the nrgorilla.Middleware first.
r.Use(nrgorilla.Middleware(app))
// All handlers and custom middlewares will be instrumented. The
// transaction will be available in the Request's context.
r.Use(MyCustomMiddleware)
r.Handle("/", makeHandler("index"))
// The NotFoundHandler and MethodNotAllowedHandler must be instrumented
// separately using newrelic.WrapHandle. The second argument to
// newrelic.WrapHandle is used as the transaction name; the string returned
// from newrelic.WrapHandle should be ignored.
_, r.NotFoundHandler = newrelic.WrapHandle(app, "NotFoundHandler", makeHandler("not found"))
_, r.MethodNotAllowedHandler = newrelic.WrapHandle(app, "MethodNotAllowedHandler", makeHandler("method not allowed"))
http.ListenAndServe(":8000", r)
If a .NET agent is initiating distributed traces as the root service, you must update that .NET agent to version 8.24 or later before upgrading your downstream Go New Relic agents to this agent release.
Support for W3C Trace Context, with easy upgrade from New Relic trace context.
Distributed Tracing now supports W3C Trace Context headers for HTTP and gRPC protocols when distributed tracing is enabled. Our implementation can accept and emit both W3C trace header format and New Relic trace header format. This simplifies agent upgrades, allowing trace context to be propagated between services with older and newer releases of New Relic agents. W3C trace header format will always be accepted and emitted. New Relic trace header format will be accepted, and you can optionally disable emission of the New Relic trace header format.
When distributed tracing is enabled with Config.DistributedTracer.Enabled = true
, the Go agent will now accept W3C's traceparent
and tracestate
headers when calling Transaction.AcceptDistributedTraceHeaders
. When calling Transaction.InsertDistributedTraceHeaders
, the Go agent will include the W3C headers along with the New Relic distributed tracing header, unless the New Relic trace header format is disabled using Config.DistributedTracer.ExcludeNewRelicHeader = true
.
Also, see Knowns Issues and Workarounds.
Added support for elastic/go-elasticsearch in the new v3/integrations/nrelasticsearch-v7 package.
If a .NET agent is initiating distributed traces as the root service, you must update that .NET agent to version 8.24 or later before upgrading your downstream Go New Relic agents to this agent release.