Tracing

Pitaya supports tracing using OpenTracing.

Using Jaeger tracing

First set the required environment variables:

export JAEGER_DISABLED=false
export JAEGER_SERVICE_NAME=my-pitaya-server
export JAEGER_SAMPLER_PARAM=1 #Ajust accordingly

With these environment variables set, you can use the following code to configure Jaeger:

func configureJaeger(config *viper.Viper, logger logrus.FieldLogger) {
	cfg, err := jaegercfg.FromEnv()
	if cfg.ServiceName == "" {
		logger.Error("Could not init jaeger tracer without ServiceName, either set environment JAEGER_SERVICE_NAME or cfg.ServiceName = \"my-api\"")
		return
	}
	if err != nil {
		logger.Error("Could not parse Jaeger env vars: %s", err.Error())
		return
	}
	options := jaeger.Options{ // import "github.com/topfreegames/pitaya/v2/tracing/jaeger"
		Disabled:    cfg.Disabled,
		Probability: cfg.Sampler.Param,
		ServiceName: cfg.ServiceName,
	}
	jaeger.Configure(options)
}

Then in your main function:

func main() {
    // ...
    configureJaeger(config, logger)
    // ...
}

Ensure to run this Jaeger initialization code in all your server types. Only changing the “JAEGER_SERVICE_NAME” env var between different types.

Testing Locally

make run-jaeger-aio
make run-cluster-example-frontend-tracing
make run-cluster-example-backend-tracing

Then access Jaeger UI at http://localhost:16686