Skip to content

Commit

Permalink
issue-21715 fetching metric values with composite(all) dimension keys (
Browse files Browse the repository at this point in the history
  • Loading branch information
rajim17 committed Jun 2, 2023
1 parent 2c0b573 commit bc77fec
Show file tree
Hide file tree
Showing 5 changed files with 119 additions and 43 deletions.
16 changes: 16 additions & 0 deletions .chloggen/azure_monitor_receiver-composite-dimensions.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
change_type: enhancement

# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver)
component: receiver/azuremonitorreceiver

# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
note: Retrieve metric values with all dimension keys in filter

# One or more tracking issues related to the change
issues: [21715]

# (Optional) One or more lines of additional information to render under the primary note.
# These lines will be padded with 2 spaces and then inserted directly into the document.
# Use pipe (|) for multiline entries.
subtext:
34 changes: 25 additions & 9 deletions receiver/azuremonitorreceiver/scraper.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@
package azuremonitorreceiver // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azuremonitorreceiver"

import (
"bytes"
"context"
"fmt"
"sort"
"strings"
"sync"
"time"
Expand Down Expand Up @@ -60,8 +62,8 @@ type azureResource struct {
}

type metricsCompositeKey struct {
dimension string
timeGrain string
dimensions string // comma separated sorted dimensions
timeGrain string
}

type azureResourceMetrics struct {
Expand Down Expand Up @@ -255,10 +257,15 @@ func (s *azureScraper) getResourceMetricsDefinitions(ctx context.Context, resour
compositeKey := metricsCompositeKey{timeGrain: timeGrain}

if len(v.Dimensions) > 0 {
var dimensionsSlice []string
for _, dimension := range v.Dimensions {
compositeKey.dimension = *dimension.Value
s.storeMetricsDefinition(resourceID, name, compositeKey)
if len(strings.TrimSpace(*dimension.Value)) > 0 {
dimensionsSlice = append(dimensionsSlice, *dimension.Value)
}
}
sort.Strings(dimensionsSlice)
dimensionsCompositeKey := metricsCompositeKey{timeGrain: timeGrain, dimensions: strings.Join(dimensionsSlice, ",")}
s.storeMetricsDefinition(resourceID, name, dimensionsCompositeKey)
} else {
s.storeMetricsDefinition(resourceID, name, compositeKey)
}
Expand Down Expand Up @@ -298,7 +305,7 @@ func (s *azureScraper) getResourceMetricsValues(ctx context.Context, resourceID

opts := getResourceMetricsValuesRequestOptions(
metricsByGrain.metrics,
compositeKey.dimension,
compositeKey.dimensions,
compositeKey.timeGrain,
start,
end,
Expand Down Expand Up @@ -345,7 +352,7 @@ func (s *azureScraper) getResourceMetricsValues(ctx context.Context, resourceID

func getResourceMetricsValuesRequestOptions(
metrics []string,
dimension string,
dimensionsStr string,
timeGrain string,
start int,
end int,
Expand All @@ -358,9 +365,18 @@ func getResourceMetricsValuesRequestOptions(
Aggregation: to.Ptr(strings.Join(aggregations, ",")),
}

if len(dimension) > 0 {
dimensionFilter := fmt.Sprintf("%s eq '*'", dimension)
filter.Filter = &dimensionFilter
if len(dimensionsStr) > 0 {
var dimensionsFilter bytes.Buffer
dimensions := strings.Split(dimensionsStr, ",")
for i, dimension := range dimensions {
dimensionsFilter.WriteString(dimension)
dimensionsFilter.WriteString(" eq '*' ")
if i < len(dimensions)-1 {
dimensionsFilter.WriteString(" and ")
}
}
dimensionFilterString := dimensionsFilter.String()
filter.Filter = &dimensionFilterString
}

return filter
Expand Down
38 changes: 26 additions & 12 deletions receiver/azuremonitorreceiver/scraper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,6 @@ func TestAzureScraperScrape(t *testing.T) {
expectedFile := filepath.Join("testdata", "expected_metrics", tt.name+".yaml")
expectedMetrics, err := golden.ReadMetrics(expectedFile)
require.NoError(t, err)

require.NoError(t, pmetrictest.CompareMetrics(
expectedMetrics,
metrics,
Expand Down Expand Up @@ -268,8 +267,8 @@ func getResourcesMockData(tags bool) []armresources.ClientListResponse {
}

func getMetricsDefinitionsMockData() (map[string]int, map[string][]armmonitor.MetricDefinitionsClientListResponse) {
name1, name2, name3, name4, name5, name6, name7, timeGrain1, timeGrain2, dimension := "metric1",
"metric2", "metric3", "metric4", "metric5", "metric6", "metric7", "PT1M", "PT1H", "dimension"
name1, name2, name3, name4, name5, name6, name7, timeGrain1, timeGrain2, dimension1, dimension2 := "metric1",
"metric2", "metric3", "metric4", "metric5", "metric6", "metric7", "PT1M", "PT1H", "dimension1", "dimension2"

counters := map[string]int{
"resourceId1": 0,
Expand Down Expand Up @@ -341,7 +340,10 @@ func getMetricsDefinitionsMockData() (map[string]int, map[string][]armmonitor.Me
},
Dimensions: []*armmonitor.LocalizableString{
{
Value: &dimension,
Value: &dimension1,
},
{
Value: &dimension2,
},
},
},
Expand All @@ -356,7 +358,7 @@ func getMetricsDefinitionsMockData() (map[string]int, map[string][]armmonitor.Me
},
Dimensions: []*armmonitor.LocalizableString{
{
Value: &dimension,
Value: &dimension1,
},
},
},
Expand All @@ -379,7 +381,7 @@ func getMetricsDefinitionsMockData() (map[string]int, map[string][]armmonitor.Me
},
Dimensions: []*armmonitor.LocalizableString{
{
Value: &dimension,
Value: &dimension1,
},
},
},
Expand All @@ -392,8 +394,8 @@ func getMetricsDefinitionsMockData() (map[string]int, map[string][]armmonitor.Me
}

func getMetricsValuesMockData() map[string]map[string]armmonitor.MetricsClientListResponse {
name1, name2, name3, name4, name5, name6, name7, dimension, dimensionValue := "metric1", "metric2",
"metric3", "metric4", "metric5", "metric6", "metric7", "dimension", "dimension value"
name1, name2, name3, name4, name5, name6, name7, dimension1, dimension2, dimensionValue := "metric1", "metric2",
"metric3", "metric4", "metric5", "metric6", "metric7", "dimension1", "dimension2", "dimension value"
var unit1 armmonitor.MetricUnit = "unit1"
var value1 float64 = 1

Expand Down Expand Up @@ -495,7 +497,7 @@ func getMetricsValuesMockData() map[string]map[string]armmonitor.MetricsClientLi
},
},
},
strings.Join([]string{name5, name6}, ","): {
name5: {
Response: armmonitor.Response{
Value: []*armmonitor.Metric{
{
Expand All @@ -517,14 +519,26 @@ func getMetricsValuesMockData() map[string]map[string]armmonitor.MetricsClientLi
Metadatavalues: []*armmonitor.MetadataValue{
{
Name: &armmonitor.LocalizableString{
Value: &dimension,
Value: &dimension1,
},
Value: &dimensionValue,
},
{
Name: &armmonitor.LocalizableString{
Value: &dimension2,
},
Value: &dimensionValue,
},
},
},
},
},
},
},
},
name6: {
Response: armmonitor.Response{
Value: []*armmonitor.Metric{
{
Name: &armmonitor.LocalizableString{
Value: &name6,
Expand All @@ -544,7 +558,7 @@ func getMetricsValuesMockData() map[string]map[string]armmonitor.MetricsClientLi
Metadatavalues: []*armmonitor.MetadataValue{
{
Name: &armmonitor.LocalizableString{
Value: &dimension,
Value: &dimension1,
},
Value: &dimensionValue,
},
Expand Down Expand Up @@ -575,7 +589,7 @@ func getMetricsValuesMockData() map[string]map[string]armmonitor.MetricsClientLi
Metadatavalues: []*armmonitor.MetadataValue{
{
Name: &armmonitor.LocalizableString{
Value: &dimension,
Value: &dimension1,
},
Value: &dimensionValue,
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ resourceMetrics:
- key: azuremonitor.resource_id
value:
stringValue: resourceId2
- key: metadata_dimension
- key: metadata_dimension1
value:
stringValue: dimension value
- key: metadata_dimension2
value:
stringValue: dimension value
startTimeUnixNano: "1681790471654481953"
Expand All @@ -30,7 +33,10 @@ resourceMetrics:
- key: azuremonitor.resource_id
value:
stringValue: resourceId2
- key: metadata_dimension
- key: metadata_dimension1
value:
stringValue: dimension value
- key: metadata_dimension2
value:
stringValue: dimension value
startTimeUnixNano: "1681790471654481953"
Expand All @@ -44,7 +50,7 @@ resourceMetrics:
- key: azuremonitor.resource_id
value:
stringValue: resourceId2
- key: metadata_dimension
- key: metadata_dimension1
value:
stringValue: dimension value
startTimeUnixNano: "1681790471654481953"
Expand Down Expand Up @@ -167,7 +173,7 @@ resourceMetrics:
- key: azuremonitor.resource_id
value:
stringValue: resourceId2
- key: metadata_dimension
- key: metadata_dimension1
value:
stringValue: dimension value
startTimeUnixNano: "1681790471654481953"
Expand All @@ -181,7 +187,7 @@ resourceMetrics:
- key: azuremonitor.resource_id
value:
stringValue: resourceId2
- key: metadata_dimension
- key: metadata_dimension1
value:
stringValue: dimension value
startTimeUnixNano: "1681790471654481953"
Expand Down Expand Up @@ -220,7 +226,10 @@ resourceMetrics:
- key: azuremonitor.resource_id
value:
stringValue: resourceId2
- key: metadata_dimension
- key: metadata_dimension1
value:
stringValue: dimension value
- key: metadata_dimension2
value:
stringValue: dimension value
startTimeUnixNano: "1681790471654481953"
Expand All @@ -234,7 +243,7 @@ resourceMetrics:
- key: azuremonitor.resource_id
value:
stringValue: resourceId2
- key: metadata_dimension
- key: metadata_dimension1
value:
stringValue: dimension value
startTimeUnixNano: "1681790471654481953"
Expand Down Expand Up @@ -284,7 +293,10 @@ resourceMetrics:
- key: azuremonitor.resource_id
value:
stringValue: resourceId2
- key: metadata_dimension
- key: metadata_dimension1
value:
stringValue: dimension value
- key: metadata_dimension2
value:
stringValue: dimension value
startTimeUnixNano: "1681790471654481953"
Expand Down Expand Up @@ -326,7 +338,7 @@ resourceMetrics:
- key: azuremonitor.resource_id
value:
stringValue: resourceId3
- key: metadata_dimension
- key: metadata_dimension1
value:
stringValue: dimension value
startTimeUnixNano: "1681790471654481953"
Expand All @@ -340,7 +352,7 @@ resourceMetrics:
- key: azuremonitor.resource_id
value:
stringValue: resourceId2
- key: metadata_dimension
- key: metadata_dimension1
value:
stringValue: dimension value
startTimeUnixNano: "1681790471654481953"
Expand Down Expand Up @@ -393,7 +405,10 @@ resourceMetrics:
- key: azuremonitor.resource_id
value:
stringValue: resourceId2
- key: metadata_dimension
- key: metadata_dimension1
value:
stringValue: dimension value
- key: metadata_dimension2
value:
stringValue: dimension value
startTimeUnixNano: "1681790471654481953"
Expand Down

0 comments on commit bc77fec

Please sign in to comment.