in internal/beater/interceptors/metrics.go [46:94]
func (m *metricsInterceptor) Interceptor() grpc.UnaryServerInterceptor {
return func(
ctx context.Context,
req interface{},
info *grpc.UnaryServerInfo,
handler grpc.UnaryHandler,
) (interface{}, error) {
var legacyMetricsPrefix string
switch info.FullMethod {
case "/opentelemetry.proto.collector.metrics.v1.MetricsService/Export":
legacyMetricsPrefix = "apm-server.otlp.grpc.metrics."
case "/opentelemetry.proto.collector.trace.v1.TraceService/Export":
legacyMetricsPrefix = "apm-server.otlp.grpc.traces."
case "/opentelemetry.proto.collector.logs.v1.LogsService/Export":
legacyMetricsPrefix = "apm-server.otlp.grpc.logs."
default:
m.logger.With(
"grpc.request.method", info.FullMethod,
).Warn("metrics registry missing")
return handler(ctx, req)
}
m.inc(legacyMetricsPrefix, request.IDRequestCount)
defer m.inc(legacyMetricsPrefix, request.IDResponseCount)
start := time.Now()
resp, err := handler(ctx, req)
duration := time.Since(start)
m.getHistogram(requestDurationHistogram, metric.WithUnit("ms")).Record(context.Background(), duration.Milliseconds())
responseID := request.IDResponseValidCount
if err != nil {
responseID = request.IDResponseErrorsCount
if s, ok := status.FromError(err); ok {
switch s.Code() {
case codes.Unauthenticated:
m.inc(legacyMetricsPrefix, request.IDResponseErrorsUnauthorized)
case codes.DeadlineExceeded, codes.Canceled:
m.inc(legacyMetricsPrefix, request.IDResponseErrorsTimeout)
case codes.ResourceExhausted:
m.inc(legacyMetricsPrefix, request.IDResponseErrorsRateLimit)
}
}
}
m.inc(legacyMetricsPrefix, responseID)
return resp, err
}
}