Skip to content

Instantly share code, notes, and snippets.

View TonPC64's full-sized avatar
:shipit:
Gopher

Chanwit Piromplad TonPC64

:shipit:
Gopher
View GitHub Profile
// general http handler
func httpHandler(w http.ResponseWriter, r *http.Request) {
// get tracer provider from otel package and inject ctx to tracer
tracer := otel.GetTracerProvider().Tracer("httpHandler")
ctx, span := tracer.Start(r.Context(), "httpHandler")
defer span.End()
// create http client with transport for inject trace signal to http header automatically
client := &http.Client{
Transport: otelhttp.NewTransport(nil),
// create http client with transport for inject trace signal to http header automatically
client := &http.Client{
Transport: otelhttp.NewTransport(nil),
}
// create http request with context for inject trace signal to http header in request
request, err := http.NewRequestWithContext(ctx, http.MethodGet, "http://echo:8081", nil)
if err != nil {
// if error should set status to span
span.RecordError(err)
span.SetStatus(codes.Error, codes.Error.String())
syntax = "proto3";
package api;
option go_package = "../api";
service HelloService {
rpc SayHello (HelloRequest) returns (HelloResponse);
}
message HelloRequest {
type server struct {
api.HelloServiceServer
}
func (s *server) SayHello(ctx context.Context, in *api.HelloRequest) (*api.HelloResponse, error) {
tracer := otel.GetTracerProvider().Tracer("webserver-grpc")
_, span := tracer.Start(ctx, "SayHello-span")
defer span.End()
fmt.Println(ctx)
func (s *server) SayHello(ctx context.Context, in *api.HelloRequest) (*api.HelloResponse, error) {
tracer := otel.GetTracerProvider().Tracer("webserver-grpc")
_, span := tracer.Start(ctx, "SayHello-span")
defer span.End()
fmt.Println(ctx)
log.Printf("Received: %v\n", in.GetGreeting())
time.Sleep(50 * time.Millisecond)
return &api.HelloResponse{Reply: "Hello " + in.Greeting}, nil
var grpcClient api.HelloServiceClient
func main() {
var conn *grpc.ClientConn
conn, err := grpc.Dial("host.docker.internal:6565", grpc.WithTransportCredentials(insecure.NewCredentials()),
grpc.WithUnaryInterceptor(otelgrpc.UnaryClientInterceptor()),
grpc.WithStreamInterceptor(otelgrpc.StreamClientInterceptor()),
)
if err != nil {
func callSayHello(ctx context.Context, c api.HelloServiceClient) {
md := metadata.Pairs(
"timestamp", time.Now().Format(time.StampNano),
)
ctx = metadata.NewOutgoingContext(ctx, md)
response, err := c.SayHello(ctx, &api.HelloRequest{Greeting: "World"})
if err != nil {
log.Fatalf("Error when calling SayHello: %s", err)
}
func main() {
startConsumerGroup([]string{"kafka:9092"})
select {}
}
func startConsumerGroup(brokerList []string) {
consumerGroupHandler := Consumer{}
// Wrap instrumentation
handler := otelsarama.WrapConsumerGroupHandler(&consumerGroupHandler)
func printMessage(msg *sarama.ConsumerMessage) {
// Extract tracing info from message
ctx := otel.GetTextMapPropagator().Extract(context.Background(), otelsarama.NewConsumerMessageCarrier(msg))
tr := otel.GetTracerProvider().Tracer("consumer")
_, span := tr.Start(ctx, "consume message", trace.WithAttributes(
semconv.MessagingOperationProcess,
))
defer span.End()
func init() {
config := sarama.NewConfig()
config.Version = sarama.V2_5_0_0
// So we can know the partition and offset of messages.
config.Producer.Return.Successes = true
var err error
producer, err = sarama.NewAsyncProducer([]string{"kafka:9092"}, config)
if err != nil {
log.Fatal().Err(err).Msg("Failed to start Sarama producer")