New Relic
インストールする
go get するものと import するものが違うので注意
go get github.com/newrelic/go-agent
import "github.com/newrelic/go-agent/v3/newrelic"
DBアクセスをトレースする
sql.Open したあと sqlx.NewDb に渡すようにするとうまくいった
code:main.go
db, err := sql.Open("nrmysql", dsn)
if err != nil {
log.Fatalf("failed to connect to DB: %s.", err.Error())
}
defer db.Close()
dbx = sqlx.NewDb(db, "nrmysql")
外部リクエストをトレースする
Contextオブジェクトから newrelic.FromContext でTransactionオブジェクトを作ってSegmentを切るといい感じにトレースされる
code:api.go
txn := newrelic.FromContext(ctx)
req, err := http.NewRequestWithContext(ctx, ...)
if err != nil {
return nil, err
}
seg := newrelic.StartExternalSegment(txn, req)
...
res, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}
defer res.Body.Close()
seg.Response = res
seg.End()
処理の一部分をトレースする
agentを無効化する
注意 agentを無効化してもオーバーヘッドがなくなるわけではない
Application represents your application. All methods on Application are nil safe. Therefore, a nil Application pointer can be safely used as a mock.
nil にするとmockになる
データを送りきってからshutdownする
ライブラリのプラグインないのか
有名どころのライブラリにはintegrationが用意されている
echoもある