ocagent allows users to send traces out of VK to a "standard" external forwarder (standard as in this is a format/protocol defined in the opencensus project). This allows uers to implement metrics for whatever backend they want without having to add it into VK directly.
38 lines
1.1 KiB
Go
38 lines
1.1 KiB
Go
// +build !no_ocagent_exporter
|
|
|
|
package cmd
|
|
|
|
import (
|
|
"os"
|
|
|
|
"contrib.go.opencensus.io/exporter/ocagent"
|
|
"github.com/cpuguy83/strongerrors"
|
|
"github.com/pkg/errors"
|
|
"go.opencensus.io/trace"
|
|
)
|
|
|
|
func init() {
|
|
RegisterTracingExporter("ocagent", NewOCAgentExporter)
|
|
}
|
|
|
|
// NewOCAgentExporter creates a new opencensus tracing exporter using the opencensus agent forwarder.
|
|
func NewOCAgentExporter(opts TracingExporterOptions) (trace.Exporter, error) {
|
|
agentOpts := append([]ocagent.ExporterOption{}, ocagent.WithServiceName(opts.ServiceName))
|
|
|
|
if endpoint := os.Getenv("OCAGENT_ENDPOINT"); endpoint != "" {
|
|
agentOpts = append(agentOpts, ocagent.WithAddress(endpoint))
|
|
} else {
|
|
return nil, strongerrors.InvalidArgument(errors.New("must set endpoint address in OCAGENT_ENDPOINT"))
|
|
}
|
|
|
|
switch os.Getenv("OCAGENT_INSECURE") {
|
|
case "0", "no", "n", "off", "":
|
|
case "1", "yes", "y", "on":
|
|
agentOpts = append(agentOpts, ocagent.WithInsecure())
|
|
default:
|
|
return nil, strongerrors.InvalidArgument(errors.New("invalid value for OCAGENT_INSECURE"))
|
|
}
|
|
|
|
return ocagent.NewExporter(agentOpts...)
|
|
}
|