va: measure local validation latency separately (#4865)

This commit is contained in:
Roland Bracewell Shoemaker 2020-06-12 12:44:25 -07:00 committed by GitHub
parent 065cfd502f
commit 325bba3a6f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 16 additions and 1 deletions

View File

@ -76,6 +76,7 @@ type RemoteVA struct {
type vaMetrics struct { type vaMetrics struct {
validationTime *prometheus.HistogramVec validationTime *prometheus.HistogramVec
localValidationTime *prometheus.HistogramVec
remoteValidationTime *prometheus.HistogramVec remoteValidationTime *prometheus.HistogramVec
remoteValidationFailures prometheus.Counter remoteValidationFailures prometheus.Counter
prospectiveRemoteValidationFailures prometheus.Counter prospectiveRemoteValidationFailures prometheus.Counter
@ -90,11 +91,19 @@ func initMetrics(stats prometheus.Registerer) *vaMetrics {
validationTime := prometheus.NewHistogramVec( validationTime := prometheus.NewHistogramVec(
prometheus.HistogramOpts{ prometheus.HistogramOpts{
Name: "validation_time", Name: "validation_time",
Help: "Time taken to validate a challenge", Help: "Total time taken to validate a challenge and aggregate results",
Buckets: metrics.InternetFacingBuckets, Buckets: metrics.InternetFacingBuckets,
}, },
[]string{"type", "result", "problem_type"}) []string{"type", "result", "problem_type"})
stats.MustRegister(validationTime) stats.MustRegister(validationTime)
localValidationTime := prometheus.NewHistogramVec(
prometheus.HistogramOpts{
Name: "local_validation_time",
Help: "Time taken to locally validate a challenge",
Buckets: metrics.InternetFacingBuckets,
},
[]string{"type", "result"})
stats.MustRegister(localValidationTime)
remoteValidationTime := prometheus.NewHistogramVec( remoteValidationTime := prometheus.NewHistogramVec(
prometheus.HistogramOpts{ prometheus.HistogramOpts{
Name: "remote_validation_time", Name: "remote_validation_time",
@ -149,6 +158,7 @@ func initMetrics(stats prometheus.Registerer) *vaMetrics {
return &vaMetrics{ return &vaMetrics{
validationTime: validationTime, validationTime: validationTime,
remoteValidationTime: remoteValidationTime, remoteValidationTime: remoteValidationTime,
localValidationTime: localValidationTime,
remoteValidationFailures: remoteValidationFailures, remoteValidationFailures: remoteValidationFailures,
prospectiveRemoteValidationFailures: prospectiveRemoteValidationFailures, prospectiveRemoteValidationFailures: prospectiveRemoteValidationFailures,
tlsALPNOIDCounter: tlsALPNOIDCounter, tlsALPNOIDCounter: tlsALPNOIDCounter,
@ -631,6 +641,7 @@ func (va *ValidationAuthorityImpl) PerformValidation(ctx context.Context, domain
records, prob := va.validate(ctx, identifier.DNSIdentifier(domain), challenge, authz) records, prob := va.validate(ctx, identifier.DNSIdentifier(domain), challenge, authz)
challenge.ValidationRecord = records challenge.ValidationRecord = records
localValidationLatency := time.Since(vStart)
// Check for malformed ValidationRecords // Check for malformed ValidationRecords
if !challenge.RecordsSane() && prob == nil { if !challenge.RecordsSane() && prob == nil {
@ -698,6 +709,10 @@ func (va *ValidationAuthorityImpl) PerformValidation(ctx context.Context, domain
validationLatency := time.Since(vStart) validationLatency := time.Since(vStart)
logEvent.ValidationLatency = validationLatency.Round(time.Millisecond).Seconds() logEvent.ValidationLatency = validationLatency.Round(time.Millisecond).Seconds()
va.metrics.localValidationTime.With(prometheus.Labels{
"type": string(challenge.Type),
"result": string(challenge.Status),
}).Observe(localValidationLatency.Seconds())
va.metrics.validationTime.With(prometheus.Labels{ va.metrics.validationTime.With(prometheus.Labels{
"type": string(challenge.Type), "type": string(challenge.Type),
"result": string(challenge.Status), "result": string(challenge.Status),