diff --git a/pkg/ec2provider/ec2provider.go b/pkg/ec2provider/ec2provider.go index 2df3f244a..f03b30817 100644 --- a/pkg/ec2provider/ec2provider.go +++ b/pkg/ec2provider/ec2provider.go @@ -19,6 +19,7 @@ import ( "github.com/sirupsen/logrus" "sigs.k8s.io/aws-iam-authenticator/pkg" "sigs.k8s.io/aws-iam-authenticator/pkg/httputil" + "sigs.k8s.io/aws-iam-authenticator/pkg/metrics" ) const ( @@ -193,6 +194,7 @@ func (p *ec2ProviderImpl) GetPrivateDNSName(id string) (string, error) { } logrus.Infof("Calling ec2:DescribeInstances for the InstanceId = %s ", id) + metrics.Get().EC2DescribeInstanceCallCount.Inc() // Look up instance from EC2 API output, err := p.ec2.DescribeInstances(&ec2.DescribeInstancesInput{ InstanceIds: aws.StringSlice([]string{id}), @@ -254,6 +256,7 @@ func (p *ec2ProviderImpl) StartEc2DescribeBatchProcessing() { func (p *ec2ProviderImpl) getPrivateDnsAndPublishToCache(instanceIdList []string) { // Look up instance from EC2 API logrus.Infof("Making Batch Query to DescribeInstances for %v instances ", len(instanceIdList)) + metrics.Get().EC2DescribeInstanceCallCount.Inc() output, err := p.ec2.DescribeInstances(&ec2.DescribeInstancesInput{ InstanceIds: aws.StringSlice(instanceIdList), }) diff --git a/pkg/ec2provider/ec2provider_test.go b/pkg/ec2provider/ec2provider_test.go index df6f776d2..35a984697 100644 --- a/pkg/ec2provider/ec2provider_test.go +++ b/pkg/ec2provider/ec2provider_test.go @@ -9,6 +9,8 @@ import ( "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/ec2" "github.com/aws/aws-sdk-go/service/ec2/ec2iface" + "github.com/prometheus/client_golang/prometheus" + "sigs.k8s.io/aws-iam-authenticator/pkg/metrics" ) const ( @@ -61,6 +63,7 @@ func newMockedEC2ProviderImpl() *ec2ProviderImpl { } func TestGetPrivateDNSName(t *testing.T) { + metrics.InitMetrics(prometheus.NewRegistry()) ec2Provider := newMockedEC2ProviderImpl() ec2Provider.ec2 = &mockEc2Client{Reservations: prepareSingleInstanceOutput()} go ec2Provider.StartEc2DescribeBatchProcessing() @@ -92,6 +95,7 @@ func prepareSingleInstanceOutput() []*ec2.Reservation { } func TestGetPrivateDNSNameWithBatching(t *testing.T) { + metrics.InitMetrics(prometheus.NewRegistry()) ec2Provider := newMockedEC2ProviderImpl() reservations := prepare100InstanceOutput() ec2Provider.ec2 = &mockEc2Client{Reservations: reservations} diff --git a/pkg/metrics/metrics.go b/pkg/metrics/metrics.go index 59ba82973..a7af707f8 100644 --- a/pkg/metrics/metrics.go +++ b/pkg/metrics/metrics.go @@ -26,8 +26,9 @@ func Get() Metrics { // Metrics are handles to the collectors for prometheus for the various metrics we are tracking. type Metrics struct { - ConfigMapWatchFailures prometheus.Counter - Latency *prometheus.HistogramVec + ConfigMapWatchFailures prometheus.Counter + Latency *prometheus.HistogramVec + EC2DescribeInstanceCallCount prometheus.Counter } func CreateMetrics(reg prometheus.Registerer) Metrics { @@ -49,5 +50,12 @@ func CreateMetrics(reg prometheus.Registerer) Metrics { }, []string{"result"}, ), + EC2DescribeInstanceCallCount: factory.NewCounter( + prometheus.CounterOpts{ + Namespace: Namespace, + Name: "ec2_describe_instances_call", + Help: "Number of EC2 describe instances calls.", + }, + ), } }