github.com/newrelic/go-agent@v3.26.0+incompatible/README.md (about)

     1  [![Community Plus header](https://github.com/newrelic/opensource-website/raw/main/src/images/categories/Community_Plus.png)](https://opensource.newrelic.com/oss-category/#community-plus)
     2  
     3  # New Relic Go Agent [![GoDoc](https://godoc.org/github.com/newrelic/go-agent?status.svg)](https://godoc.org/github.com/newrelic/go-agent/v3/newrelic/) [![Go Report Card](https://goreportcard.com/badge/github.com/newrelic/go-agent)](https://goreportcard.com/report/github.com/newrelic/go-agent) [![codecov](https://codecov.io/github/newrelic/go-agent/branch/master/graph/badge.svg?token=UEWy0clWYW)](https://codecov.io/github/newrelic/go-agent)
     4  
     5  The New Relic Go Agent allows you to monitor your Go applications with New
     6  Relic. It helps you track transactions, outbound requests, database calls, and
     7  other parts of your Go application's behavior and provides a running overview of
     8  garbage collection, goroutine activity, and memory use.
     9  
    10  Go is a compiled language, and doesn’t use a virtual machine. This means that setting up New Relic for your Golang app requires you to use our Go agent API and manually add New Relic methods to your source code. Our API provides exceptional flexibility and control over what gets instrumented.
    11  
    12  ## Installation
    13  
    14  ### Compatibility and Requirements
    15  
    16  For the latest version of the agent, Go 1.18+ is required.
    17  
    18  Linux, OS X, and Windows (Vista, Server 2008 and later) are supported.
    19  
    20  ### Installing and using the Go agent
    21  
    22  To install the agent, follow the instructions in our [GETTING_STARTED](https://github.com/newrelic/go-agent/blob/master/GETTING_STARTED.md)
    23  document or our [GUIDE](https://github.com/newrelic/go-agent/blob/master/GUIDE.md).
    24  
    25  We recommend instrumenting your Go code to get the maximum benefits from the
    26  New Relic Go agent. But we make it easy to get great data in couple of ways:
    27  
    28  * Even without adding instrumentation, just importing the agent and creating an
    29  application will provide useful runtime information about your number of goroutines,
    30  garbage collection statistics, and memory and CPU usage.
    31  * You can use our many [INTEGRATION packages](https://github.com/newrelic/go-agent/tree/master/v3/integrations)
    32  for out-of-the box support for many popular Go web frameworks and libraries. We
    33  continue to add integration packages based on your feedback. You can weigh in on
    34  potential integrations by opening an `Issue` here in our New Relic Go agent GitHub project.
    35  
    36  ### Upgrading
    37  
    38  If you have already been using version 2.X of the agent and are upgrading to
    39  version 3.0, see our [MIGRATION guide](MIGRATION.md) for details.
    40  
    41  ## Getting Started
    42  
    43  [v3/examples/server/main.go](v3/examples/server/main.go) is an example that
    44  will appear as "Example App" in your New Relic applications list.  To run it:
    45  
    46  ```
    47  env NEW_RELIC_LICENSE_KEY=__YOUR_NEW_RELIC_LICENSE_KEY__LICENSE__ \
    48      go run v3/examples/server/main.go
    49  ```
    50  
    51  Some endpoints exposed are [http://localhost:8000/](http://localhost:8000/)
    52  and [http://localhost:8000/notice_error](http://localhost:8000/notice_error)
    53  
    54  ## Usage
    55  
    56  ### Integration Packages
    57  
    58  The following [integration packages](https://godoc.org/github.com/newrelic/go-agent/v3/integrations)
    59  extend the base [newrelic](https://godoc.org/github.com/newrelic/go-agent/v3/newrelic/) package
    60  to support the following frameworks and libraries.
    61  Frameworks and databases which don't have an integration package may still be
    62  instrumented using the [newrelic](https://godoc.org/github.com/newrelic/go-agent/v3/newrelic/)
    63  package primitives.
    64  
    65  <!---
    66  NOTE! When updating the tables below, be sure to update the docs site version too:
    67  https://docs.newrelic.com/docs/agents/go-agent/get-started/go-agent-compatibility-requirements
    68  -->
    69  
    70  #### Service Frameworks
    71  
    72  | Project | Integration Package |  |
    73  | ------------- | ------------- | - |
    74  | [gin-gonic/gin](https://github.com/gin-gonic/gin) | [v3/integrations/nrgin](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrgin) | Instrument inbound requests through the Gin framework |
    75  | [gorilla/mux](https://github.com/gorilla/mux) | [v3/integrations/nrgorilla](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrgorilla) | Instrument inbound requests through the Gorilla framework |
    76  | [google.golang.org/grpc](https://github.com/grpc/grpc-go) | [v3/integrations/nrgrpc](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrgrpc) | Instrument gRPC servers and clients |
    77  | [labstack/echo](https://github.com/labstack/echo) | [v3/integrations/nrecho-v3](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrecho-v3) | Instrument inbound requests through version 3 of the Echo framework |
    78  | [labstack/echo](https://github.com/labstack/echo) | [v3/integrations/nrecho-v4](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrecho-v4) | Instrument inbound requests through version 4 of the Echo framework |
    79  | [julienschmidt/httprouter](https://github.com/julienschmidt/httprouter) | [v3/integrations/nrhttprouter](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrhttprouter) | Instrument inbound requests through the HttpRouter framework |
    80  | [micro/go-micro](https://github.com/micro/go-micro) | [v3/integrations/nrmicro](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrmicro) | Instrument servers, clients, publishers, and subscribers through the Micro framework |
    81  
    82  #### Datastores
    83  
    84  More information about instrumenting databases without an integration package
    85  using [newrelic](https://godoc.org/github.com/newrelic/go-agent/v3/newrelic/)
    86  package primitives can be found [here](GUIDE.md#datastore-segments).
    87  
    88  | Project | Integration Package |  |
    89  | ------------- | ------------- | - |
    90  | [lib/pq](https://github.com/lib/pq) | [v3/integrations/nrpq](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrpq) | Instrument PostgreSQL driver (`pq` driver for `database/sql`) |
    91  | [jackc/pgx](https://github.com/jackc/pgx) | [v3/integrations/nrpgx](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrpgx) | Instrument PostgreSQL driver (`pgx` driver for `database/sql`)|
    92  | [jackc/pgx/v5](https://github.com/jackc/pgx/v5) | [v3/integrations/nrpgx5](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrpgx5) | Instrument PostgreSQL driver (`pgx/v5` driver for `database/sql`)|
    93  | [go-mssqldb](github.com/denisenkom/go-mssqldb) | [v3/integrations/nrmssql](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrmssql) | Instrument MS SQL driver |
    94  | [go-sql-driver/mysql](https://github.com/go-sql-driver/mysql) | [v3/integrations/nrmysql](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrmysql) | Instrument MySQL driver |
    95  | [elastic/go-elasticsearch](https://github.com/elastic/go-elasticsearch) | [v3/integrations/nrelasticsearch-v7](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrelasticsearch-v7) | Instrument Elasticsearch datastore calls |
    96  | [database/sql](https://godoc.org/database/sql) | Use a supported database driver or [builtin instrumentation](https://godoc.org/github.com/newrelic/go-agent/v3/newrelic#InstrumentSQLConnector) | Instrument database calls with SQL |
    97  | [jmoiron/sqlx](https://github.com/jmoiron/sqlx) | Use a supported [database driver](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrpq/example/sqlx) or [builtin instrumentation](https://godoc.org/github.com/newrelic/go-agent/v3/newrelic#InstrumentSQLConnector) | Instrument database calls with SQLx |
    98  | [go-redis/redis](https://github.com/go-redis/redis) | [v3/integrations/nrredis-v7](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrredis-v7) | Instrument Redis 7 calls |
    99  | [go-redis/redis](https://github.com/go-redis/redis) | [v3/integrations/nrredis-v8](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrredis-v8) | Instrument Redis 8 calls |
   100  | [redis/go-redis](https://github.com/redis/go-redis) | [v3/integrations/nrredis-v9](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrredis-v9) | Instrument Redis 9 calls |
   101  | [mattn/go-sqlite3](https://github.com/mattn/go-sqlite3) | [v3/integrations/nrsqlite3](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrsqlite3) | Instrument SQLite driver |
   102  | [snowflakedb/gosnowflake](https://github.com/snowflakedb/gosnowflake) | [v3/integrations/nrsnowflake](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrsnowflake) | Instrument Snowflake driver |
   103  | [mongodb/mongo-go-driver](https://github.com/mongodb/mongo-go-driver) | [v3/integrations/nrmongo](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrmongo) | Instrument MongoDB calls |
   104  
   105  #### Agent Logging
   106  
   107  | Project | Integration Package |  |
   108  | ------------- | ------------- | - |
   109  | [sirupsen/logrus](https://github.com/sirupsen/logrus) | [v3/integrations/nrlogrus](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrlogrus) | Send agent log messages to Logrus |
   110  | [mgutz/logxi](https://github.com/mgutz/logxi) | [v3/integrations/nrlogxi](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrlogxi) | Send agent log messages to Logxi |
   111  | [uber-go/zap](https://github.com/uber-go/zap) | [v3/integrations/nrzap](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrzap) | Send agent log messages to Zap |
   112  
   113  #### Logs in Context
   114  
   115  | Project | Integration Package |  |
   116  | ------------- | ------------- | - |
   117  | [sirupsen/logrus](https://github.com/sirupsen/logrus) | [v3/integrations/logcontext-v2/nrlogrus](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/logcontext-v2/nrlogrus) | Send data collected from Logrus log messages to New Relic |
   118  | [log](https://pkg.go.dev/log) | [v3/integrations/logcontext-v2/logWriter](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/logcontext-v2/logWriter) | Send data collected from the standard library logger log messages to New Relic |
   119  | [rs/zerolog](https://github.com/rs/zerolog) | [v3/integrations/logcontext-v2/zerologWriter](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/logcontext-v2/zerologWriter) | Send data collected from zerolog log messages to New Relic |
   120  
   121  #### AWS
   122  
   123  | Project | Integration Package |  |
   124  | ------------- | ------------- | - |
   125  | [aws/aws-sdk-go](https://github.com/aws/aws-sdk-go) | [v3/integrations/nrawssdk-v1](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrawssdk-v1) | Instrument outbound calls made using Go AWS SDK |
   126  | [aws/aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2) | [v3/integrations/nrawssdk-v2](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrawssdk-v2) | Instrument outbound calls made using Go AWS SDK v2 |
   127  | [aws/aws-lambda-go](https://github.com/aws/aws-lambda-go) | [v3/integrations/nrlambda](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrlambda) | Instrument AWS Lambda applications |
   128  
   129  #### GraphQL
   130  
   131  | Project | Integration Package |  |
   132  | ------------- | ------------- | - |
   133  | [graph-gophers/graphql-go](https://github.com/graph-gophers/graphql-go) | [v3/integrations/nrgraphgophers](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrgraphgophers) | Instrument inbound requests using graph-gophers/graphql-go |
   134  | [graphql-go/graphql](https://github.com/graphql-go/graphql) | [v3/integrations/nrgraphqlgo](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrgraphqlgo) | Instrument inbound requests using graphql-go/graphql |
   135  
   136  #### Misc
   137  
   138  | Project | Integration Package |  |
   139  | ------------- | ------------- | - |
   140  | [pkg/errors](https://github.com/pkg/errors) | [v3/integrations/nrpkgerrors](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrpkgerrors) | Wrap pkg/errors errors to improve stack traces and error class information |
   141  | [openzipkin/b3-propagation](https://github.com/openzipkin/b3-propagation) | [v3/integrations/nrb3](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrb3) | Add B3 headers to outgoing requests |
   142  | [nats-io/nats.go](https://github.com/nats-io/nats.go) | [v3/integrations/nrnats](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrnats) | Instrument publishers and subscribers using the NATS client |
   143  | [nats-io/stan.go](https://github.com/nats-io/stan.go) | [v3/integrations/nrstan](https://godoc.org/github.com/newrelic/go-agent/v3/integrations/nrstan) | Instrument publishers and subscribers using the NATS streaming client |
   144  
   145  
   146  These integration packages must be imported along
   147  with the [newrelic](https://godoc.org/github.com/newrelic/go-agent/v3/newrelic/) package, as shown in this
   148  [nrgin example](https://github.com/newrelic/go-agent/blob/master/v3/integrations/nrgin/example/main.go).
   149  
   150  ### Alternatives
   151  
   152  If you are already using another open source solution to gather telemetry data, you may find it easier to use one of our open source exporters to send this data to New Relic:
   153  
   154  * OpenTelemetry: [github.com/newrelic/opentelemetry-exporter-go](https://github.com/newrelic/opentelemetry-exporter-go)
   155  * OpenCensus: [github.com/newrelic/newrelic-opencensus-exporter-go](https://github.com/newrelic/newrelic-opencensus-exporter-go)
   156  * Prometheus Exporter: [github.com/newrelic/nri-prometheus](https://github.com/newrelic/nri-prometheus)
   157  * Istio Adapter: [github.com/newrelic/newrelic-istio-adapter](https://github.com/newrelic/newrelic-istio-adapter)
   158  * Telemetry SDK: [github.com/newrelic/newrelic-telemetry-sdk-go](https://github.com/newrelic/newrelic-telemetry-sdk-go)
   159  
   160  
   161  ## Support
   162  
   163  Should you need assistance with New Relic products, you are in good hands with several support channels.  
   164  
   165  If the issue has been confirmed as a bug or is a Feature request, please file a Github issue.
   166  
   167  
   168  * [Go Agent GUIDE](GUIDE.md): Step by step how-to for key agent features
   169  * [New Relic Documentation](https://docs.newrelic.com/docs/agents/go-agent): Comprehensive guidance for using our platform
   170  * [Troubleshooting framework](https://discuss.newrelic.com/t/troubleshooting-frameworks/108787): Steps you through common troubleshooting questions
   171  * [New Relic Community](https://discuss.newrelic.com/tags/goagent): The best place to engage in troubleshooting questions
   172  * [New Relic Developer](https://developer.newrelic.com/): Resources for building a custom observability applications
   173  * [New Relic University](https://learn.newrelic.com/): A range of online training for New Relic users of every level
   174  
   175  ## Privacy
   176  
   177  At New Relic we take your privacy and the security of your information seriously, and are committed to protecting your information. We must emphasize the importance of not sharing personal data in public forums, and ask all users to scrub logs and diagnostic information for sensitive information, whether personal, proprietary, or otherwise.
   178  
   179  We define "Personal Data" as any information relating to an identified or identifiable individual, including, for example, your name, phone number, post code or zip code, Device ID, IP address and email address.
   180  
   181  For more information, review [New Relic’s General Data Privacy Notice](https://newrelic.com/termsandconditions/privacy).
   182  
   183  ## Contribute
   184  
   185  We encourage your contributions to improve the Go Agent!  Keep in mind when you submit your pull request, you'll need to sign the CLA via the click-through using CLA-Assistant.  You only have to sign the CLA one time per project.  
   186  
   187  If you have any questions, or to execute our corporate CLA, required if your contribution is on behalf of a company, please drop us an email at opensource@newrelic.com.
   188  
   189  
   190  **A note about vulnerabilities**
   191  
   192  As noted in our [security policy](https://github.com/newrelic/go-agent/security/policy), New Relic is committed to the privacy and security of our customers and their data. We believe that providing coordinated disclosure by security researchers and engaging with the security community are important means to achieve our security goals.
   193  
   194  If you believe you have found a security vulnerability in this project or any of New Relic's products or websites, we welcome and greatly appreciate you reporting it to New Relic through [HackerOne](https://hackerone.com/newrelic).
   195  
   196  If you would like to contribute to this project, please review [these guidelines](./CONTRIBUTING.md).
   197  
   198  To [all contributors](https://github.com/newrelic/go-agent/graphs/contributors), we thank you!  Without your contribution, this project would not be what it is today.  We also host a community project page dedicated to 
   199  the [Go Agent](https://opensource.newrelic.com/projects/newrelic/go-agent).
   200  
   201  ## License
   202  The New Relic Go agent is licensed under the [Apache 2.0](http://apache.org/licenses/LICENSE-2.0.txt) License.