This message was deleted.
s
This message was deleted.
p
@User Do you know if there should be any issues with packaging as RPM?
@User Did you just try instrumenting the app with the instructions here - https://signoz.io/docs/instrumentation/golang/ ?
a
@User I couldn't see any specific setup for RPM packages...try instrumenting your golang code using opentelemetry and above link. And then build & run package and check the logs for errors
you can set the env variables in the instrumentation code also so that run command remains simple
s
do i have to save below code as main.go and run like this?
SERVICE_NAME=<service_name> INSECURE_MODE=true OTEL_METRICS_EXPORTER=none OTEL_EXPORTER_OTLP_ENDPOINT=<IP of SigNoz backend:4317> go run main.go
Copy code
// main.go
    package main

    import (
      "context"
      "log"
      "<http://google.golang.org/grpc/credentials|google.golang.org/grpc/credentials>"
      "<http://go.opentelemetry.io/otel|go.opentelemetry.io/otel>"
      "<http://go.opentelemetry.io/otel/exporters/otlp|go.opentelemetry.io/otel/exporters/otlp>"
      "<http://go.opentelemetry.io/otel/exporters/otlp/otlpgrpc|go.opentelemetry.io/otel/exporters/otlp/otlpgrpc>"
      "<http://go.opentelemetry.io/otel/label|go.opentelemetry.io/otel/label>"

      "<http://go.opentelemetry.io/otel/sdk/resource|go.opentelemetry.io/otel/sdk/resource>"
      sdktrace "<http://go.opentelemetry.io/otel/sdk/trace|go.opentelemetry.io/otel/sdk/trace>"
    )


    var (
      serviceName  = os.Getenv("SERVICE_NAME")
      collectorURL = os.Getenv("OTEL_EXPORTER_OTLP_ENDPOINT")
      insecure     = os.Getenv("INSECURE_MODE")
    )

    func initTracer() func(context.Context) error {


      secureOption := otlpgrpc.WithTLSCredentials(credentials.NewClientTLSFromCert(nil, ""))
      if len(insecure) > 0 {
        secureOption = otlpgrpc.WithInsecure()
      }

      exporter, err := otlp.NewExporter(
        context.Background(),
        otlpgrpc.NewDriver(
          secureOption,
          otlpgrpc.WithEndpoint(collectorURL),
          otlpgrpc.WithHeaders(headers),
        ),
      )

      if err != nil {
        log.Fatal(err)
      }
      resources, err := resource.New(
        context.Background(),
        resource.WithAttributes(
          label.String("service.name", serviceName),
          label.String("library.language", "go"),
        ),
      )
      if err != nil {
        log.Printf("Could not set resources: ", err)
      }

      otel.SetTracerProvider(
        sdktrace.NewTracerProvider(
          sdktrace.WithConfig(sdktrace.Config{DefaultSampler: sdktrace.AlwaysSample()}),
          sdktrace.WithSpanProcessor(sdktrace.NewBatchSpanProcessor(exporter)),
          sdktrace.WithSyncer(exporter),
          sdktrace.WithResource(resources),
        ),
      )
      return exporter.Shutdown
    }

    func main() {

      cleanup := initTracer()
      defer cleanup(context.Background())

      // rest of initialization, including creating HTTP and gRPC servers/handlers...
    }
i am little confused @User my go app can run using its binary file. like
./svfileserver
svfileserver is the name of the go binary. now tell me how to instrument this go binary to signoz?
a
that binary must have been generated from code...keep the above instrumentation code in the right place (main)
You can use the declare the values directly inside the code without using the env variables
Copy code
var (
      serviceName  = os.Getenv("SERVICE_NAME")
      collectorURL = os.Getenv("OTEL_EXPORTER_OTLP_ENDPOINT")
      insecure     = os.Getenv("INSECURE_MODE")
    )
s
Ok. fine.
a
Copy code
var (
      serviceName  = "myGolangService"
      collectorURL = "signoz-url"
      insecure     = true
    )
s
but i have already one main.go file for my application. how to keep this telemetry (main.go) file in my application??
a
please check the code .. you need to initialize the tracer inside main like this
Copy code
func main() {

      cleanup := initTracer()
      defer cleanup(context.Background())

      // rest of initialization, including creating HTTP and gRPC servers/handlers...
    }
s
so i need to merge the telemetry code with in my application's main.go??
a
yup...define functions and call
initTracer()
from you main.go
s
also tell me this, i didnt understand on
collectorURL
for example, if my go application is running on a URL, say example.domainname.com , then collectorURL can be like this? collectorURL = "example.domainname.com"
a
nopes...it is the url where signoz is installed
so the intrumented golang app can send data to where signoz is installed
s
@User i am getting these errors while fetching the pkgs.
Copy code
$ go get <http://go.opentelemetry.io/otel/exporters/otlp|go.opentelemetry.io/otel/exporters/otlp>
can't load package: package <http://go.opentelemetry.io/otel/exporters/otlp|go.opentelemetry.io/otel/exporters/otlp>: no Go files in /home/sneradabilli/software-library/src/go.opentelemetry.io/otel/exporters/otlp
Copy code
$ go get <http://go.opentelemetry.io/otel/exporters/otlp/otlpgrpc|go.opentelemetry.io/otel/exporters/otlp/otlpgrpc>
package <http://go.opentelemetry.io/otel/exporters/otlp/otlpgrpc|go.opentelemetry.io/otel/exporters/otlp/otlpgrpc>: cannot find package "<http://go.opentelemetry.io/otel/exporters/otlp/otlpgrpc|go.opentelemetry.io/otel/exporters/otlp/otlpgrpc>" in any of:
        /usr/local/go/src/go.opentelemetry.io/otel/exporters/otlp/otlpgrpc (from $GOROOT)
        /home/sneradabilli/software-library/src/go.opentelemetry.io/otel/exporters/otlp/otlpgrpc (from $GOPATH)
        /home/sneradabilli/software-library/src/git.sandvine.com/eng/svfilesever/src/go.opentelemetry.io/otel/exporters/otlp/otlpgrpc
a
something wrong with
GOPATH
? Below link states the
go get
command https://pkg.go.dev/go.opentelemetry.io/otel/exporters/otlp#section-readme
s
Copy code
$ go get -u <http://go.opentelemetry.io/otel/exporters/otlp|go.opentelemetry.io/otel/exporters/otlp>
package <http://go.opentelemetry.io/otel/exporters/otlp|go.opentelemetry.io/otel/exporters/otlp>: no Go files in /home/sneradabilli/software-library/src/go.opentelemetry.io/otel/exporters/otlp
$
same issue