diff --git a/deploy/helm/fire/templates/deployments-statefulsets.yaml b/deploy/helm/fire/templates/deployments-statefulsets.yaml index 0d91d69b76..34cfb09580 100644 --- a/deploy/helm/fire/templates/deployments-statefulsets.yaml +++ b/deploy/helm/fire/templates/deployments-statefulsets.yaml @@ -58,6 +58,13 @@ spec: {{- range $key, $value := $cfg.extraArgs }} - "-{{ $key }}={{ $value }}" {{- end }} + {{- with .Values.fire.extraEnvVars }} + env: + {{- range $key, $value := . }} + - name: {{ $key }} + value: {{ $value }} + {{- end }} + {{- end }} ports: - name: {{ .Values.fire.service.port_name }} containerPort: {{ .Values.fire.service.port }} diff --git a/deploy/helm/fire/values.yaml b/deploy/helm/fire/values.yaml index 9ad9957e8a..dfbebf3a5c 100644 --- a/deploy/helm/fire/values.yaml +++ b/deploy/helm/fire/values.yaml @@ -16,6 +16,9 @@ fire: log.level: debug extraLabels: {} + extraEnvVars: + # The following environment variables are set by the Helm chart. + # JAEGER_AGENT_HOST: jaeger-agent.jaeger.svc.cluster.local. imagePullSecrets: [] nameOverride: "" diff --git a/pkg/fire/fire.go b/pkg/fire/fire.go index db9b086ba2..e7ebb84907 100644 --- a/pkg/fire/fire.go +++ b/pkg/fire/fire.go @@ -25,6 +25,7 @@ import ( "github.com/weaveworks/common/middleware" "github.com/weaveworks/common/server" "github.com/weaveworks/common/signals" + wwtracing "github.com/weaveworks/common/tracing" "go.opentelemetry.io/otel/trace" "google.golang.org/grpc/health/grpc_health_v1" @@ -35,6 +36,7 @@ import ( "github.com/grafana/fire/pkg/gen/push/v1/pushv1connect" "github.com/grafana/fire/pkg/ingester" "github.com/grafana/fire/pkg/querier" + "github.com/grafana/fire/pkg/tracing" "github.com/grafana/fire/pkg/util" ) @@ -47,6 +49,7 @@ type Config struct { Ingester ingester.Config `yaml:"ingester,omitempty"` MemberlistKV memberlist.KVConfig `yaml:"memberlist"` FireDB firedb.Config `yaml:"firedb,omitempty"` + Tracing tracing.Config `yaml:"tracing"` AuthEnabled bool `yaml:"auth_enabled,omitempty"` ConfigFile string @@ -66,6 +69,7 @@ func (c *Config) RegisterFlags(f *flag.FlagSet) { c.Distributor.RegisterFlags(f) c.Querier.RegisterFlags(f) c.FireDB.RegisterFlags(f) + c.Tracing.RegisterFlags(f) } // registerServerFlagsWithChangedDefaultValues registers *Config.Server flags, but overrides some defaults set by the weaveworks package. @@ -164,6 +168,22 @@ func New(cfg Config) (*Fire, error) { return nil, err } + if cfg.Tracing.Enabled { + // Setting the environment variable JAEGER_AGENT_HOST enables tracing + trace, err := wwtracing.NewFromEnv(fmt.Sprintf("fire-%s", cfg.Target)) + if err != nil { + level.Error(logger).Log("msg", "error in initializing tracing. tracing will not be enabled", "err", err) + } + + defer func() { + if trace != nil { + if err := trace.Close(); err != nil { + level.Error(logger).Log("msg", "error closing tracing", "err", err) + } + } + }() + } + // instantiate a fallback pusher client (when not run with a local distributor pusherHTTPClient, err := commonconfig.NewClientFromConfig(cfg.AgentConfig.ClientConfig.Client, cfg.AgentConfig.ClientConfig.URL.String()) if err != nil { diff --git a/pkg/tracing/config.go b/pkg/tracing/config.go new file mode 100644 index 0000000000..c697970959 --- /dev/null +++ b/pkg/tracing/config.go @@ -0,0 +1,13 @@ +package tracing + +import ( + "flag" +) + +type Config struct { + Enabled bool `yaml:"enabled"` +} + +func (cfg *Config) RegisterFlags(f *flag.FlagSet) { + f.BoolVar(&cfg.Enabled, "tracing.enabled", true, "Set to false to disable tracing.") +}