Skip to content

Commit

Permalink
Merge pull request #2422 from adityask2/arecords_metric_addition
Browse files Browse the repository at this point in the history
Changes to add count of A records of source and registry as metrics
  • Loading branch information
k8s-ci-robot committed Dec 10, 2021
2 parents 5635f5e + 19d9bc8 commit 69e0e54
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 1 deletion.
23 changes: 22 additions & 1 deletion controller/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,22 @@ var (
Help: "Number of Source errors.",
},
)
registryARecords = prometheus.NewGauge(
prometheus.GaugeOpts{
Namespace: "external_dns",
Subsystem: "registry",
Name: "a_records",
Help: "Number of Registry A records.",
},
)
sourceARecords = prometheus.NewGauge(
prometheus.GaugeOpts{
Namespace: "external_dns",
Subsystem: "source",
Name: "a_records",
Help: "Number of Source A records.",
},
)
verifiedARecords = prometheus.NewGauge(
prometheus.GaugeOpts{
Namespace: "external_dns",
Expand All @@ -113,6 +129,8 @@ func init() {
prometheus.MustRegister(deprecatedRegistryErrors)
prometheus.MustRegister(deprecatedSourceErrors)
prometheus.MustRegister(controllerNoChangesTotal)
prometheus.MustRegister(registryARecords)
prometheus.MustRegister(sourceARecords)
prometheus.MustRegister(verifiedARecords)
}

Expand Down Expand Up @@ -150,7 +168,8 @@ func (c *Controller) RunOnce(ctx context.Context) error {
return err
}
registryEndpointsTotal.Set(float64(len(records)))

regARecords := filterARecords(records)
registryARecords.Set(float64(len(regARecords)))
ctx = context.WithValue(ctx, provider.RecordsContextKey, records)

endpoints, err := c.Source.Endpoints(ctx)
Expand All @@ -160,6 +179,8 @@ func (c *Controller) RunOnce(ctx context.Context) error {
return err
}
sourceEndpointsTotal.Set(float64(len(endpoints)))
srcARecords := filterARecords(endpoints)
sourceARecords.Set(float64(len(srcARecords)))
vRecords := fetchMatchingARecords(endpoints, records)
verifiedARecords.Set(float64(len(vRecords)))
endpoints = c.Registry.AdjustEndpoints(endpoints)
Expand Down
47 changes: 47 additions & 0 deletions controller/controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -470,3 +470,50 @@ func TestVerifyARecords(t *testing.T) {
)
assert.Equal(t, math.Float64bits(2), valueFromMetric(verifiedARecords))
}

func TestARecords(t *testing.T) {
testControllerFiltersDomains(
t,
[]*endpoint.Endpoint{
{
DNSName: "record1.used.tld",
RecordType: endpoint.RecordTypeA,
Targets: endpoint.Targets{"1.2.3.4"},
},
{
DNSName: "record2.used.tld",
RecordType: endpoint.RecordTypeA,
Targets: endpoint.Targets{"8.8.8.8"},
},
{
DNSName: "_mysql-svc._tcp.mysql.used.tld",
RecordType: endpoint.RecordTypeSRV,
Targets: endpoint.Targets{"0 50 30007 mysql.used.tld"},
},
},
endpoint.NewDomainFilter([]string{"used.tld"}),
[]*endpoint.Endpoint{
{
DNSName: "record1.used.tld",
RecordType: endpoint.RecordTypeA,
Targets: endpoint.Targets{"1.2.3.4"},
},
{
DNSName: "_mysql-svc._tcp.mysql.used.tld",
RecordType: endpoint.RecordTypeSRV,
Targets: endpoint.Targets{"0 50 30007 mysql.used.tld"},
},
},
[]*plan.Changes{{
Create: []*endpoint.Endpoint{
{
DNSName: "record2.used.tld",
RecordType: endpoint.RecordTypeA,
Targets: endpoint.Targets{"8.8.8.8"},
},
},
}},
)
assert.Equal(t, math.Float64bits(2), valueFromMetric(sourceARecords))
assert.Equal(t, math.Float64bits(1), valueFromMetric(registryARecords))
}
2 changes: 2 additions & 0 deletions docs/faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,8 @@ Here is the full list of available metrics provided by ExternalDNS:
| external_dns_source_errors_total | Number of Source errors | Counter |
| external_dns_controller_verified_records | Number of DNS A-records that exists both in | Gauge |
| | source & registry | |
| external_dns_registry_a_records | Number of A records in registry | Gauge |
| external_dns_source_a_records | Number of A records in source | Gauge |

### How can I run ExternalDNS under a specific GCP Service Account, e.g. to access DNS records in other projects?

Expand Down

0 comments on commit 69e0e54

Please sign in to comment.