The New Relic Go Agent allows you to monitor your Go applications with New Relic. It helps you track transactions, outbound requests, database calls, and other parts of your Go application's behavior and provides a running overview of garbage collection, goroutine activity, and memory use.
Go 1.3+ is required, due to the use of http.Client's Timeout field.
Linux, OS X, and Windows (Vista, Server 2008 and later) are supported.
Here are the basic steps to instrumenting your application. For more information, see GUIDE.md.
Installing the Go Agent is the same as installing any other Go library. The simplest way is to run:
go get github.com/newrelic/go-agent
Then import the github.com/newrelic/go-agent
package in your application.
In your main
function or an init
block:
config := newrelic.NewConfig("Your Application Name", "__YOUR_NEW_RELIC_LICENSE_KEY__")
app, err := newrelic.NewApplication(config)
more info, application.go, config.go
Transactions time requests and background tasks. Use WrapHandle
and
WrapHandleFunc
to create transactions for requests handled by the http
standard library package.
http.HandleFunc(newrelic.WrapHandleFunc(app, "/users", usersHandler))
Alternatively, create transactions directly using the application's
StartTransaction
method:
txn := app.StartTransaction("myTxn", optionalResponseWriter, optionalRequest)
defer txn.End()
Segments show you where time in your transactions is being spent. At the beginning of important functions, add:
defer newrelic.StartSegment(txn, "mySegmentName").End()
examples/server/main.go is an example that will appear as "My Go Application" in your New Relic applications list. To run it:
env NEW_RELIC_LICENSE_KEY=__YOUR_NEW_RELIC_LICENSE_KEY__LICENSE__ \
go run examples/server/main.go
Some endpoints exposed are http://localhost:8000/ and http://localhost:8000/notice_error
Before Instrumentation
package main
import (
"io"
"net/http"
)
func helloHandler(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hello, world")
}
func main() {
http.HandleFunc("/", helloHandler)
http.ListenAndServe(":8000", nil)
}
After Instrumentation
package main
import (
"fmt"
"io"
"net/http"
"os"
"github.com/newrelic/go-agent"
)
func helloHandler(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hello, world")
}
func main() {
// Create a config. You need to provide the desired application name
// and your New Relic license key.
cfg := newrelic.NewConfig("My Go Application", "__YOUR_NEW_RELIC_LICENSE_KEY__")
// Create an application. This represents an application in the New
// Relic UI.
app, err := newrelic.NewApplication(cfg)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
// Wrap helloHandler. The performance of this handler will be recorded.
http.HandleFunc(newrelic.WrapHandleFunc(app, "/", helloHandler))
http.ListenAndServe(":8000", nil)
}
You can find more detailed documentation in the guide.
If you can't find what you're looking for there, reach out to us on our support site or our community forum and we'll be happy to help you.
Find a bug? Contact us via support.newrelic.com, or email [email protected].