goagent
provides a set of complementary instrumentation features for collecting relevant data to be processed by Hypertrace.
Setting up Go Agent can be done with a few lines:
func main() {
cfg := config.Load()
cfg.ServiceName = config.String("myservice")
shutdown := hypertrace.Init(cfg)
defer shutdown
}
Config values can be declared in config file, env variables or code. For further information about config check this section.
The server instrumentation relies on the http.Handler
component of the server declarations.
import (
"net/http"
"github.com/gorilla/mux"
"github.com/hypertrace/goagent/instrumentation/hypertrace/net/hyperhttp"
)
func main() {
// ...
r := mux.NewRouter()
r.Handle("/foo/{bar}", hyperhttp.NewHandler(
fooHandler,
"/foo/{bar}",
))
// ...
}
The client instrumentation relies on the http.Transport
component of the HTTP client in Go.
import (
"net/http"
"github.com/hypertrace/goagent/instrumentation/hypertrace/net/hyperhttp"
)
// ...
client := http.Client{
Transport: hyperhttp.NewTransport(
http.DefaultTransport
),
}
req, _ := http.NewRequest("GET", "http://example.com", nil)
res, err := client.Do(req)
// ...
In terminal 1 run the client:
go run ./instrumentation/hypertrace/net/hyperhttp/examples/client/main.go
In terminal 2 run the server:
go run ./instrumentation/hypertrace/net/hyperhttp/examples/server/main.go
The server instrumentation relies on the grpc.UnaryServerInterceptor
component of the server declarations.
server := grpc.NewServer(
grpc.UnaryInterceptor(
hypergrpc.UnaryServerInterceptor(),
),
)
The client instrumentation relies on the http.Transport
component of the HTTP client in Go.
import (
// ...
hypergrpc "github.com/hypertrace/goagent/instrumentation/hypertrace/google.golang.org/hypergrpc"
"google.golang.org/grpc"
)
func main() {
// ...
conn, err := grpc.Dial(
address,
grpc.WithInsecure(),
grpc.WithBlock(),
grpc.WithUnaryInterceptor(
hypergrpc.UnaryClientInterceptor(),
),
)
if err != nil {
log.Fatalf("could not dial: %v", err)
}
defer conn.Close()
client := pb.NewCustomClient(conn)
// ...
}
In terminal 1 run the client:
go run ./instrumentation/hypertrace/google.golang.org/grpc/examples/client/main.go
In terminal 2 run the server:
go run ./instrumentation/hypertrace/google.golang.org/grpc/examples/server/main.go
Tests can be run with (requires docker)
make test
for unit tests only
make test-unit
Run ./release.sh <version_number>
(<version_number>
should follow semver, e.g. 1.2.3
). The script will change the hardcoded version, commit it, push a tag and prepare the hardcoded version for the next release.