56 lines
1.7 KiB
Go
56 lines
1.7 KiB
Go
package instana
|
|
|
|
import (
|
|
"io"
|
|
|
|
"github.com/containous/traefik/pkg/log"
|
|
instana "github.com/instana/go-sensor"
|
|
"github.com/opentracing/opentracing-go"
|
|
)
|
|
|
|
// Name sets the name of this tracer
|
|
const Name = "instana"
|
|
|
|
// Config provides configuration settings for a instana tracer
|
|
type Config struct {
|
|
LocalAgentHost string `description:"Set instana-agent's host that the reporter will used." json:"localAgentHost,omitempty" toml:"localAgentHost,omitempty" yaml:"localAgentHost,omitempty"`
|
|
LocalAgentPort int `description:"Set instana-agent's port that the reporter will used." json:"localAgentPort,omitempty" toml:"localAgentPort,omitempty" yaml:"localAgentPort,omitempty"`
|
|
LogLevel string `description:"Set instana-agent's log level. ('error','warn','info','debug')" json:"logLevel,omitempty" toml:"logLevel,omitempty" yaml:"logLevel,omitempty" export:"true"`
|
|
}
|
|
|
|
// SetDefaults sets the default values.
|
|
func (c *Config) SetDefaults() {
|
|
c.LocalAgentHost = "localhost"
|
|
c.LocalAgentPort = 42699
|
|
c.LogLevel = "info"
|
|
}
|
|
|
|
// Setup sets up the tracer
|
|
func (c *Config) Setup(serviceName string) (opentracing.Tracer, io.Closer, error) {
|
|
// set default logLevel
|
|
logLevel := instana.Info
|
|
|
|
// check/set logLevel overrides
|
|
switch c.LogLevel {
|
|
case "error":
|
|
logLevel = instana.Error
|
|
case "warn":
|
|
logLevel = instana.Warn
|
|
case "debug":
|
|
logLevel = instana.Debug
|
|
}
|
|
|
|
tracer := instana.NewTracerWithOptions(&instana.Options{
|
|
Service: serviceName,
|
|
LogLevel: logLevel,
|
|
AgentPort: c.LocalAgentPort,
|
|
AgentHost: c.LocalAgentHost,
|
|
})
|
|
|
|
// Without this, child spans are getting the NOOP tracer
|
|
opentracing.SetGlobalTracer(tracer)
|
|
|
|
log.WithoutContext().Debug("Instana tracer configured")
|
|
|
|
return tracer, nil, nil
|
|
}
|