diff --git a/retrieval/discovery/azure.go b/retrieval/discovery/azure.go index 0f1334eb8f..0ffae172a2 100644 --- a/retrieval/discovery/azure.go +++ b/retrieval/discovery/azure.go @@ -23,6 +23,7 @@ import ( "github.com/Azure/azure-sdk-for-go/arm/network" "github.com/Azure/go-autorest/autorest/azure" + "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/common/log" "github.com/prometheus/common/model" "golang.org/x/net/context" @@ -41,6 +42,26 @@ const ( azureLabelMachineTag = azureLabel + "machine_tag_" ) +var ( + azureSDScrapeFailuresCount = prometheus.NewCounter( + prometheus.CounterOpts{ + Namespace: namespace, + Name: "azure_sd_scrape_failures_total", + Help: "Number of Azure-SD scrape failures.", + }) + azureSDScrapeDuration = prometheus.NewSummary( + prometheus.SummaryOpts{ + Namespace: namespace, + Name: "azure_sd_scrape_duration_seconds", + Help: "The duration of a Azure-SD scrape in seconds.", + }) +) + +func init() { + prometheus.MustRegister(azureSDScrapeDuration) + prometheus.MustRegister(azureSDScrapeFailuresCount) +} + // AzureDiscovery periodically performs Azure-SD requests. It implements // the TargetProvider interface. type AzureDiscovery struct { @@ -135,8 +156,15 @@ func newAzureResourceFromID(id string) (azureResource, error) { }, nil } -func (ad *AzureDiscovery) refresh() (*config.TargetGroup, error) { - tg := &config.TargetGroup{} +func (ad *AzureDiscovery) refresh() (tg *config.TargetGroup, err error) { + t0 := time.Now() + defer func() { + azureSDScrapeDuration.Observe(time.Since(t0).Seconds()) + if err != nil { + azureSDScrapeFailuresCount.Inc() + } + }() + tg = &config.TargetGroup{} client, err := createAzureClient(*ad.cfg) if err != nil { return tg, fmt.Errorf("could not create Azure client: %s", err)