Comments (4)
Hi jasonab
You can give your handlers access to the transaction by adding it to the gin context. Add this line to nrgin.Middleware
function right before c.Next()
:
c.Set("newrelic-txn", txn)
Then you can access it like so:
func handlerUsingTransaction(c *gin.Context) {
t := c.Value("newrelic-txn")
if txn, ok := t.(newrelic.Transaction); ok {
defer newrelic.StartSegment(txn, "zap").End()
}
time.Sleep(500 * time.Millisecond)
}
We are hesitant to add this to the nrgin
package because we plan on adding generic context support: this will be done using a typed key (as encouraged here), which Gin does not allow (only string keys), so we need to think about that.
from go-agent.
Hi @jasonab
You can instrument Redis activity with the current datastore segment functionality. In the beginning of the relevant function:
defer newrelic.DatastoreSegment{
StartTime: newrelic.StartSegmentNow(txn),
Product: newrelic.DatastoreRedis,
Operation: "GET",
}.End()
Glancing quickly at https://github.com/go-redis/redis I do not believe that it will be straightforward for us to add higher level support for this package: The interface is large and does not look like it has hooks for instrumentation. Nonetheless, we will investigate more closely!
from go-agent.
Appreciate the response. One challenge I have is I'm using this with the Gin middleware you developed. That works great, but I don't have access to the transaction from the middleware. Can I create a new object that will be merged into the middleware one, or do I somehow need to get access to the original?
from go-agent.
Actually go-redis does have support for instrumentation, you simply use the client.WrapProcess but i'm not 100% sure how you would store it in newrelic.
func NewrelicInstrumentation(client *redis.Client, nr newrelic.Application) {
client.WrapProcess(func(oldProcess func(cmd redis.Cmder) error) func(cmd redis.Cmder) error {
return func(cmd redis.Cmder) error {
defer newrelic.DatastoreSegment{
StartTime: newrelic.StartSegmentNow(nr.StartTransaction("redis", nil, nil)),
Product: newrelic.DatastoreRedis,
Operation: cmd.String(),
}.End()
err := oldProcess(cmd)
return err
}
})
}
from go-agent.
Related Issues (20)
- Add support to CopyFrom method in pgx integration HOT 1
- fmt.Stringer support for user attributes (especially for SQL query parameters)
- UNKNOWN log levels when using the native log package HOT 2
- `.Ignore()` not ignoring transaction (go-agent + nrgin) HOT 6
- Integration for gqlgen HOT 2
- nrpgx5 data-race HOT 5
- Changelog Go agent EOL Policy link is broken HOT 1
- agent with nrzap is not forwarding logs to newrelic HOT 3
- WrapBackgroundCore background logger is not sending logs to new relic but transaction logger is HOT 12
- zap logger.With log message properties are not sent to new relic HOT 4
- Attributes are not forwarded to NewRelic for logs HOT 22
- go agent , but not see span, please help me ,thanks HOT 3
- Specify service version during initial newrelic configuration HOT 6
- Possible memory leak in Go agent HOT 11
- How to use AWS Lambda Web Adapter in golang app
- uber/zap WithField(...) not showing up in NR APM logs HOT 3
- potential bug in newAppRun HOT 2
- protobuf is deprecated HOT 1
- Incompatible with Go 1.23 due to extraneous version constraint HOT 1
- CI workflow doesn't pin 1.22 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from go-agent.