Skip to content

Releases: newrelic/go-agent

Release v3.7.0

18 Jun 16:38
Compare
Choose a tag to compare

Changes

  • 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 golang/go#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.

Release v3.6.0

09 Jun 21:11
Compare
Choose a tag to compare

New Features

  • 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 Event 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 Span
    Events 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 Span Events specifically using
    Config.SpanEvents.Attributes.Exclude.

Bug Fixes

  • Fixed an issue where it was impossible to exclude the attributes
    error.class and error.message from the root Span Event. This issue has
    now been fixed. These attributes can now be excluded from all Span Events
    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!

Release v3.5.0

20 May 22:10
Compare
Choose a tag to compare

New Features

  • 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.

    As part of this change, the Go Agent now has an added dependency on gRPC.
    This is true whether or not you enable the Infinite Tracing feature. The gRPC dependencies include these two libraries:

    You can see the changes in the go.mod file

Changes

  • 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 nrgi

Release v3.4.0

23 Mar 19:49
Compare
Choose a tag to compare

New Features

  • 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:

    1. Using
      NewRoundTripper
      with your http.Client
    2. Including the http.Response as a field on your
      ExternalSegment
    3. Using the new
      ExternalSegment.SetStatusCode
      API to set the status code directly

    To 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)

Changes

  • 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"

Release 3.3.0

11 Feb 22:19
Compare
Choose a tag to compare

New Features

Changes

  • 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.

v3.2.0

27 Jan 19:10
Compare
Choose a tag to compare

New Features

Changes

  • 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)

v3.1.0

15 Jan 22:44
Compare
Choose a tag to compare

New Features

  • 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.

  • Added support for elastic/go-elasticsearch
    in the new v3/integrations/nrelasticsearch-v7
    package.

  • Event data is now sent to New Relic every five seconds, instead of every
    minute. As a result, transaction, custom, and error events will appear in
    near-realtime within APM and Insights.

    Note that the overall limits on how many events can be sent per minute have
    not changed. Also, metric and trace data is unaffected, and will still be
    sent every minute.

v3.0.0

17 Dec 19:07
Compare
Choose a tag to compare

3.0.0

We are pleased to announce the release of Go Agent v3.0.0! This is a major release
that includes some breaking changes that will simplify your future use of the Go
Agent.

Please pay close attention to the list of Changes.

Changes

  • A full list of changes and a step by step checklist on how to upgrade can
    be found in the v3 Migration Guide.

New Features

  • Support for Go Modules. Our Go agent integration packages support frameworks
    and libraries which are changing over time. With support for Go Modules, we
    are now able to release instrumentation packages for multiple versions of
    frameworks and libraries with a single agent release; and support operation
    of the Go agent in Go Modules environments. This affects naming of our
    integration packages, as described in the v3 Migration Guide (see under
    "Changes" above).

  • Detect and set hostnames based on Heroku dyno names. When deploying an
    application in Heroku, the hostnames collected will now match the dyno name.
    This serves to greatly improve the usability of the servers list in APM since
    dyno names are often sporadic or fleeting in nature. The feature is
    controlled by two new configuration options Config.Heroku.UseDynoNames and
    Config.Heroku.DynoNamePrefixesToShorten.

v2.16.3

11 Dec 19:13
Compare
Choose a tag to compare

New Relic's Go agent v3.0 is currently available for review and beta testing. Your use of this pre-release is at your own risk. New Relic disclaims all warranties, express or implied, regarding the beta release.

If you do not manually take steps to use the new v3 folder you will not see any changes in your agent.

This is the third release of the pre-release of Go agent v3.0. It includes
changes due to user feedback during the pre-release. The existing agent in
"github.com/newrelic/go-agent" is unchanged. The Go agent v3.0 code in the v3
folder has the following changes:

v2.16.2

10 Dec 18:52
Compare
Choose a tag to compare

2.16.2

New Relic's Go agent v3.0 is currently available for review and beta testing. Your use of this pre-release is at your own risk. New Relic disclaims all warranties, express or implied, regarding the beta release.

If you do not manually take steps to use the new v3 folder, as described below, you will not see any changes in your agent.

This is the second release of the pre-release of Go agent v3.0. It includes changes due to user feedback during the pre-release. The existing agent in "github.com/newrelic/go-agent" is unchanged. The Go agent v3.0 code in the v3 folder has the following changes:

  • Transaction names created by WrapHandle,
    WrapHandleFunc,
    nrecho-v3,
    nrecho-v4,
    nrgorilla, and
    nrgin now
    include the HTTP method. For example, the following code:

    http.HandleFunc(newrelic.WrapHandleFunc(app, "/users", usersHandler))

    now creates a metric called WebTransaction/Go/GET /users instead of
    WebTransaction/Go/users. As a result of this change, you may need to update
    your alerts and dashboards.

  • The ConfigFromEnvironment
    config option is now strict. If one of the environment variables, such as
    NEW_RELIC_DISTRIBUTED_TRACING_ENABLED, cannot be parsed, then Config.Error
    will be populated and NewApplication
    will return an error.

  • ConfigFromEnvironment
    now processes NEW_RELIC_ATTRIBUTES_EXCLUDE and NEW_RELIC_ATTRIBUTES_INCLUDE.