Source File
dcensus.go
Belonging Package
golang.org/x/pkgsite/internal/dcensus
package dcensus
import (
mrpb
)
var KeyStatus = tag.MustNewKey("status")
type RouteTagger func(route string, r *http.Request) string
func ( *Router) ( string, http.Handler) {
.mux.HandleFunc(, func( http.ResponseWriter, *http.Request) {
:= .tagger(, )
ochttp.WithRouteTag(, ).ServeHTTP(, )
})
}
trace.ApplyConfig(trace.Config{DefaultSampler: trace.ProbabilitySampler(0.01)})
if := view.Register(...); != nil {
return fmt.Errorf("dcensus.Init(views): view.Register: %v", )
}
exportToStackdriver(context.Background(), )
return nil
}
func () (http.Handler, error) {
, := prometheus.NewExporter(prometheus.Options{})
if != nil {
return nil, fmt.Errorf("dcensus.NewServer: prometheus.NewExporter: %v", )
}
:= http.NewServeMux()
zpages.Handle(, "/")
.Handle("/statsz", )
.HandleFunc("/", func( http.ResponseWriter, *http.Request) {
fmt.Fprint(, debugPage)
})
return , nil
}
type monitoredResource mrpb.MonitoredResource
func ( *monitoredResource) () ( string, map[string]string) {
return .Type, .Labels
}
view.SetReportingPeriod(time.Minute)
, := NewViewExporter()
if != nil {
log.Fatalf(, "error creating view exporter: %v", )
}
view.RegisterExporter()
, := stackdriver.NewExporter(stackdriver.Options{
ProjectID: .ProjectID,
MonitoredResource: (*monitoredResource)(.MonitoredResource),
TraceSpansBufferMaxBytes: 32 * 1024 * 1024, // 32 MiB
DefaultMonitoringLabels: stackdriverLabels(),
OnError: .onError,
})
if != nil {
log.Fatalf(, "error creating trace exporter: %v", )
}
.exp =
trace.RegisterExporter()
}
:= &monitoredResource{
Type: "generic_task",
Labels: map[string]string{
"project_id": .ProjectID,
"location": .LocationID,
"job": .ServiceID,
"namespace": "go-discovery",
"task_id": .InstanceID,
},
}
if .OnGKE() {
= (*monitoredResource)(.MonitoredResource)
}
return stackdriver.NewExporter(stackdriver.Options{
ProjectID: .ProjectID,
MonitoredResource: ,
DefaultMonitoringLabels: stackdriverLabels(),
OnError: func( error) {
log.Warningf(context.Background(), "Stackdriver view exporter: %v", )
},
})
}
func ( *config.Config) *stackdriver.Labels {
:= &stackdriver.Labels{}
.Set("version", .AppVersionLabel(), "Version label of the running binary")
.Set("env", .DeploymentEnvironment(), "deployment environment")
.Set("app", .Application(), "application name")
return
}
var (
ServerRequestCount = &view.View{
Name: "go-discovery/http/server/request_count",
Description: "Count of HTTP requests started by Method",
TagKeys: []tag.Key{ochttp.Method},
Measure: ochttp.ServerRequestCount,
Aggregation: view.Count(),
}
ServerResponseCount = &view.View{
Name: "go-discovery/http/server/response_count",
Description: "Server response count by status code and route",
TagKeys: []tag.Key{ochttp.StatusCode, ochttp.KeyServerRoute},
Measure: ochttp.ServerLatency,
Aggregation: view.Count(),
}
ServerLatency = &view.View{
Name: "go-discovery/http/server/response_latency",
Description: "Server response distribution by status code and route",
TagKeys: []tag.Key{ochttp.KeyServerRoute},
Measure: ochttp.ServerLatency,
Aggregation: ochttp.DefaultLatencyDistribution,
}
ServerResponseBytes = &view.View{
Name: "go-discovery/http/server/response_bytes",
Description: "Size distribution of HTTP response body",
TagKeys: []tag.Key{ochttp.KeyServerRoute},
Measure: ochttp.ServerResponseBytes,
Aggregation: ochttp.DefaultSizeDistribution,
}
ServerViews = []*view.View{
ServerRequestCount,
ServerResponseCount,
ServerLatency,
ServerResponseBytes,
}
)
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |