From e4e644cd453b0b6ae8102b86db22e9f6c9679415 Mon Sep 17 00:00:00 2001 From: superguillen Date: Sat, 18 Apr 2026 12:43:24 -0600 Subject: [PATCH 1/7] feat(inputs.azure_monitor): add secret support for client_secret Use config.Secret for client_secret to support secret stores. Follows pattern from mysql plugin. --- plugins/inputs/azure_monitor/azure_monitor.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/plugins/inputs/azure_monitor/azure_monitor.go b/plugins/inputs/azure_monitor/azure_monitor.go index 900df9b3d23f5..3d404a3c2bbda 100644 --- a/plugins/inputs/azure_monitor/azure_monitor.go +++ b/plugins/inputs/azure_monitor/azure_monitor.go @@ -12,13 +12,14 @@ import ( receiver "github.com/logzio/azure-monitor-metrics-receiver" "github.com/influxdata/telegraf" + "github.com/influxdata/telegraf/config" "github.com/influxdata/telegraf/plugins/inputs" ) type AzureMonitor struct { SubscriptionID string `toml:"subscription_id"` ClientID string `toml:"client_id"` - ClientSecret string `toml:"client_secret"` + ClientSecret config.Secret `toml:"client_secret"` TenantID string `toml:"tenant_id"` CloudOption string `toml:"cloud_option,omitempty"` ResourceTargets []*resourceTarget `toml:"resource_target"` @@ -75,8 +76,18 @@ func (am *AzureMonitor) Init() error { return fmt.Errorf("unknown cloud option: %s", am.CloudOption) } + var clientSecret string + if !am.ClientSecret.Empty() { + secret, err := am.ClientSecret.Get() + if err != nil { + return err + } + clientSecret = secret.String() + defer secret.Destroy() + } + var err error - am.azureClients, err = am.azureManager.createAzureClients(am.SubscriptionID, am.ClientID, am.ClientSecret, am.TenantID, clientOptions) + am.azureClients, err = am.azureManager.createAzureClients(am.SubscriptionID, am.ClientID, clientSecret, am.TenantID, clientOptions) if err != nil { return err } From 12a413674d0f5c519130b7b7f937667dad83134a Mon Sep 17 00:00:00 2001 From: superguillen Date: Sun, 19 Apr 2026 09:48:20 -0600 Subject: [PATCH 2/7] test(inputs.azure_monitor): update tests for config.Secret - Add TestInit_NoClientID and TestInit_NoTenantID tests - Update Gather tests to resolve config.Secret before use - Follow pattern from telegraf-private --- .../azure_monitor/azure_monitor_test.go | 70 +++++++++++++++++-- 1 file changed, 66 insertions(+), 4 deletions(-) diff --git a/plugins/inputs/azure_monitor/azure_monitor_test.go b/plugins/inputs/azure_monitor/azure_monitor_test.go index f8b5648988c4e..034a86bb8ba40 100644 --- a/plugins/inputs/azure_monitor/azure_monitor_test.go +++ b/plugins/inputs/azure_monitor/azure_monitor_test.go @@ -611,6 +611,36 @@ func TestInit_NoSubscriptionID(t *testing.T) { require.Error(t, am.Init()) } +func TestInit_NoClientID(t *testing.T) { + file, err := os.ReadFile("testdata/toml/init_no_client_id.toml") + require.NoError(t, err) + require.NotNil(t, file) + require.NotEmpty(t, file) + + var am *AzureMonitor + require.NoError(t, toml.Unmarshal(file, &am)) + + am.Log = testutil.Logger{} + am.azureManager = &mockAzureClientsManager{} + + require.Error(t, am.Init()) +} + +func TestInit_NoTenantID(t *testing.T) { + file, err := os.ReadFile("testdata/toml/init_no_tenant_id.toml") + require.NoError(t, err) + require.NotNil(t, file) + require.NotEmpty(t, file) + + var am *AzureMonitor + require.NoError(t, toml.Unmarshal(file, &am)) + + am.Log = testutil.Logger{} + am.azureManager = &mockAzureClientsManager{} + + require.Error(t, am.Init()) +} + func TestInit_NoTargets(t *testing.T) { file, err := os.ReadFile("testdata/toml/init_no_targets.toml") require.NoError(t, err) @@ -911,10 +941,18 @@ func TestGather_Success(t *testing.T) { resourceTargets = append(resourceTargets, receiver.NewResourceTarget(target.ResourceID, target.Metrics, target.Aggregations)) } + var clientSecret string + if !am.ClientSecret.Empty() { + clientSecretValue, err := am.ClientSecret.Get() + require.NoError(t, err) + clientSecret = clientSecretValue.String() + defer clientSecretValue.Destroy() + } + var clientOptions = azcore.ClientOptions{Cloud: cloud.AzurePublic} var azureClients *receiver.AzureClients - azureClients, err = am.azureManager.createAzureClients(am.SubscriptionID, am.ClientID, am.ClientSecret, am.TenantID, clientOptions) + azureClients, err = am.azureManager.createAzureClients(am.SubscriptionID, am.ClientID, clientSecret, am.TenantID, clientOptions) require.NoError(t, err) require.NotNil(t, azureClients) @@ -998,10 +1036,18 @@ func TestGather_China_Success(t *testing.T) { resourceTargets = append(resourceTargets, receiver.NewResourceTarget(target.ResourceID, target.Metrics, target.Aggregations)) } + var clientSecret string + if !am.ClientSecret.Empty() { + clientSecretValue, err := am.ClientSecret.Get() + require.NoError(t, err) + clientSecret = clientSecretValue.String() + defer clientSecretValue.Destroy() + } + var clientOptions = azcore.ClientOptions{Cloud: cloud.AzureChina} var azureClients *receiver.AzureClients - azureClients, err = am.azureManager.createAzureClients(am.SubscriptionID, am.ClientID, am.ClientSecret, am.TenantID, clientOptions) + azureClients, err = am.azureManager.createAzureClients(am.SubscriptionID, am.ClientID, clientSecret, am.TenantID, clientOptions) require.NoError(t, err) require.NotNil(t, azureClients) @@ -1031,10 +1077,18 @@ func TestGather_Government_Success(t *testing.T) { resourceTargets = append(resourceTargets, receiver.NewResourceTarget(target.ResourceID, target.Metrics, target.Aggregations)) } + var clientSecret string + if !am.ClientSecret.Empty() { + clientSecretValue, err := am.ClientSecret.Get() + require.NoError(t, err) + clientSecret = clientSecretValue.String() + defer clientSecretValue.Destroy() + } + var clientOptions = azcore.ClientOptions{Cloud: cloud.AzureGovernment} var azureClients *receiver.AzureClients - azureClients, err = am.azureManager.createAzureClients(am.SubscriptionID, am.ClientID, am.ClientSecret, am.TenantID, clientOptions) + azureClients, err = am.azureManager.createAzureClients(am.SubscriptionID, am.ClientID, clientSecret, am.TenantID, clientOptions) require.NoError(t, err) require.NotNil(t, azureClients) @@ -1064,10 +1118,18 @@ func TestGather_Public_Success(t *testing.T) { resourceTargets = append(resourceTargets, receiver.NewResourceTarget(target.ResourceID, target.Metrics, target.Aggregations)) } + var clientSecret string + if !am.ClientSecret.Empty() { + clientSecretValue, err := am.ClientSecret.Get() + require.NoError(t, err) + clientSecret = clientSecretValue.String() + defer clientSecretValue.Destroy() + } + var clientOptions = azcore.ClientOptions{Cloud: cloud.AzurePublic} var azureClients *receiver.AzureClients - azureClients, err = am.azureManager.createAzureClients(am.SubscriptionID, am.ClientID, am.ClientSecret, am.TenantID, clientOptions) + azureClients, err = am.azureManager.createAzureClients(am.SubscriptionID, am.ClientID, clientSecret, am.TenantID, clientOptions) require.NoError(t, err) require.NotNil(t, azureClients) From a5d4f5419080f313ec098ab07cc91c0f03ee0ff0 Mon Sep 17 00:00:00 2001 From: superguillen Date: Sun, 19 Apr 2026 10:20:11 -0600 Subject: [PATCH 3/7] fix(inputs.azure_monitor): add required field validation Validate subscription_id, client_id, and tenant_id are not empty before initializing the Azure client. Use errors.New for consistency with other telegraf plugins. --- plugins/inputs/azure_monitor/azure_monitor.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/plugins/inputs/azure_monitor/azure_monitor.go b/plugins/inputs/azure_monitor/azure_monitor.go index 3d404a3c2bbda..5d6c64e0d6339 100644 --- a/plugins/inputs/azure_monitor/azure_monitor.go +++ b/plugins/inputs/azure_monitor/azure_monitor.go @@ -3,6 +3,7 @@ package azure_monitor import ( _ "embed" + "errors" "fmt" "sync" @@ -64,6 +65,16 @@ func (*AzureMonitor) SampleConfig() string { } func (am *AzureMonitor) Init() error { + if am.SubscriptionID == "" { + return errors.New("subscription_id is required") + } + if am.ClientID == "" { + return errors.New("client_id is required") + } + if am.TenantID == "" { + return errors.New("tenant_id is required") + } + var clientOptions azcore.ClientOptions switch am.CloudOption { case "AzureChina": From b06b9aef2c0c5b35fc713fda03aea0799d26db8d Mon Sep 17 00:00:00 2001 From: superguillen Date: Thu, 23 Apr 2026 13:01:54 -0600 Subject: [PATCH 4/7] Update plugins/inputs/azure_monitor/azure_monitor.go Co-authored-by: Sven Rebhan <36194019+srebhan@users.noreply.github.com> --- plugins/inputs/azure_monitor/azure_monitor.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/inputs/azure_monitor/azure_monitor.go b/plugins/inputs/azure_monitor/azure_monitor.go index 5d6c64e0d6339..f073724a01643 100644 --- a/plugins/inputs/azure_monitor/azure_monitor.go +++ b/plugins/inputs/azure_monitor/azure_monitor.go @@ -91,7 +91,7 @@ func (am *AzureMonitor) Init() error { if !am.ClientSecret.Empty() { secret, err := am.ClientSecret.Get() if err != nil { - return err + return fmt.Errorf("getting client secret failed: %w", err) } clientSecret = secret.String() defer secret.Destroy() From db931da966a52edbbe35e88abb847e73cb76270e Mon Sep 17 00:00:00 2001 From: superguillen Date: Thu, 23 Apr 2026 13:03:45 -0600 Subject: [PATCH 5/7] Update plugins/inputs/azure_monitor/azure_monitor.go Co-authored-by: Sven Rebhan <36194019+srebhan@users.noreply.github.com> --- plugins/inputs/azure_monitor/azure_monitor.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/inputs/azure_monitor/azure_monitor.go b/plugins/inputs/azure_monitor/azure_monitor.go index f073724a01643..f60dd110c5521 100644 --- a/plugins/inputs/azure_monitor/azure_monitor.go +++ b/plugins/inputs/azure_monitor/azure_monitor.go @@ -94,7 +94,7 @@ func (am *AzureMonitor) Init() error { return fmt.Errorf("getting client secret failed: %w", err) } clientSecret = secret.String() - defer secret.Destroy() + secret.Destroy() } var err error From 1677df4732c666f57431d1032d2f1f647be24155 Mon Sep 17 00:00:00 2001 From: superguillen Date: Mon, 27 Apr 2026 10:27:25 -0600 Subject: [PATCH 6/7] test(azure_monitor): use Init for azure monitor gather tests --- .../azure_monitor/azure_monitor_test.go | 122 ++---------------- 1 file changed, 14 insertions(+), 108 deletions(-) diff --git a/plugins/inputs/azure_monitor/azure_monitor_test.go b/plugins/inputs/azure_monitor/azure_monitor_test.go index 034a86bb8ba40..6f9b10ac6b879 100644 --- a/plugins/inputs/azure_monitor/azure_monitor_test.go +++ b/plugins/inputs/azure_monitor/azure_monitor_test.go @@ -9,7 +9,6 @@ import ( "testing" "github.com/Azure/azure-sdk-for-go/sdk/azcore" - "github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources" "github.com/influxdata/toml" @@ -140,6 +139,16 @@ func (*mockAzureMetricDefinitionsClient) List( }, nil } + if resourceID == "/subscriptions/subscriptionID/resourceGroups/resourceGroup2/providers/Microsoft.Test/type2/resource4" || + resourceID == "/subscriptions/subscriptionID/resourceGroups/resourceGroup2/providers/Microsoft.Test/type2/resource5" || + resourceID == "/subscriptions/subscriptionID/resourceGroups/resourceGroup2/providers/Microsoft.Test/type2/resource6" { + return armmonitor.MetricDefinitionsClientListResponse{ + MetricDefinitionCollection: armmonitor.MetricDefinitionCollection{ + Value: metricDefinitions[1], + }, + }, nil + } + return armmonitor.MetricDefinitionsClientListResponse{}, errors.New("resource ID was not found") } @@ -936,33 +945,8 @@ func TestGather_Success(t *testing.T) { am.Log = testutil.Logger{} am.azureManager = &mockAzureClientsManager{} - resourceTargets := make([]*receiver.ResourceTarget, 0, len(am.ResourceTargets)) - for _, target := range am.ResourceTargets { - resourceTargets = append(resourceTargets, receiver.NewResourceTarget(target.ResourceID, target.Metrics, target.Aggregations)) - } - - var clientSecret string - if !am.ClientSecret.Empty() { - clientSecretValue, err := am.ClientSecret.Get() - require.NoError(t, err) - clientSecret = clientSecretValue.String() - defer clientSecretValue.Destroy() - } - - var clientOptions = azcore.ClientOptions{Cloud: cloud.AzurePublic} - var azureClients *receiver.AzureClients - azureClients, err = am.azureManager.createAzureClients(am.SubscriptionID, am.ClientID, clientSecret, am.TenantID, clientOptions) - require.NoError(t, err) - require.NotNil(t, azureClients) - - am.receiver, err = receiver.NewAzureMonitorMetricsReceiver( - am.SubscriptionID, - receiver.NewTargets(resourceTargets, nil, nil), - azureClients, - ) - require.NoError(t, err) - require.NotNil(t, am.receiver) + require.NoError(t, am.Init()) expectedResource1Metric1Name := "azure_monitor_microsoft_test_type1_metric1" expectedResource1Metric1MetricFields := make(map[string]interface{}) @@ -1031,33 +1015,7 @@ func TestGather_China_Success(t *testing.T) { am.Log = testutil.Logger{} am.azureManager = &mockAzureClientsManager{} - resourceTargets := make([]*receiver.ResourceTarget, 0, len(am.ResourceTargets)) - for _, target := range am.ResourceTargets { - resourceTargets = append(resourceTargets, receiver.NewResourceTarget(target.ResourceID, target.Metrics, target.Aggregations)) - } - - var clientSecret string - if !am.ClientSecret.Empty() { - clientSecretValue, err := am.ClientSecret.Get() - require.NoError(t, err) - clientSecret = clientSecretValue.String() - defer clientSecretValue.Destroy() - } - - var clientOptions = azcore.ClientOptions{Cloud: cloud.AzureChina} - - var azureClients *receiver.AzureClients - azureClients, err = am.azureManager.createAzureClients(am.SubscriptionID, am.ClientID, clientSecret, am.TenantID, clientOptions) - require.NoError(t, err) - require.NotNil(t, azureClients) - - am.receiver, err = receiver.NewAzureMonitorMetricsReceiver( - am.SubscriptionID, - receiver.NewTargets(resourceTargets, nil, nil), - azureClients, - ) - require.NoError(t, err) - require.NotNil(t, am.receiver) + require.NoError(t, am.Init()) } func TestGather_Government_Success(t *testing.T) { @@ -1072,33 +1030,7 @@ func TestGather_Government_Success(t *testing.T) { am.Log = testutil.Logger{} am.azureManager = &mockAzureClientsManager{} - resourceTargets := make([]*receiver.ResourceTarget, 0, len(am.ResourceTargets)) - for _, target := range am.ResourceTargets { - resourceTargets = append(resourceTargets, receiver.NewResourceTarget(target.ResourceID, target.Metrics, target.Aggregations)) - } - - var clientSecret string - if !am.ClientSecret.Empty() { - clientSecretValue, err := am.ClientSecret.Get() - require.NoError(t, err) - clientSecret = clientSecretValue.String() - defer clientSecretValue.Destroy() - } - - var clientOptions = azcore.ClientOptions{Cloud: cloud.AzureGovernment} - - var azureClients *receiver.AzureClients - azureClients, err = am.azureManager.createAzureClients(am.SubscriptionID, am.ClientID, clientSecret, am.TenantID, clientOptions) - require.NoError(t, err) - require.NotNil(t, azureClients) - - am.receiver, err = receiver.NewAzureMonitorMetricsReceiver( - am.SubscriptionID, - receiver.NewTargets(resourceTargets, nil, nil), - azureClients, - ) - require.NoError(t, err) - require.NotNil(t, am.receiver) + require.NoError(t, am.Init()) } func TestGather_Public_Success(t *testing.T) { @@ -1113,31 +1045,5 @@ func TestGather_Public_Success(t *testing.T) { am.Log = testutil.Logger{} am.azureManager = &mockAzureClientsManager{} - resourceTargets := make([]*receiver.ResourceTarget, 0, len(am.ResourceTargets)) - for _, target := range am.ResourceTargets { - resourceTargets = append(resourceTargets, receiver.NewResourceTarget(target.ResourceID, target.Metrics, target.Aggregations)) - } - - var clientSecret string - if !am.ClientSecret.Empty() { - clientSecretValue, err := am.ClientSecret.Get() - require.NoError(t, err) - clientSecret = clientSecretValue.String() - defer clientSecretValue.Destroy() - } - - var clientOptions = azcore.ClientOptions{Cloud: cloud.AzurePublic} - - var azureClients *receiver.AzureClients - azureClients, err = am.azureManager.createAzureClients(am.SubscriptionID, am.ClientID, clientSecret, am.TenantID, clientOptions) - require.NoError(t, err) - require.NotNil(t, azureClients) - - am.receiver, err = receiver.NewAzureMonitorMetricsReceiver( - am.SubscriptionID, - receiver.NewTargets(resourceTargets, nil, nil), - azureClients, - ) - require.NoError(t, err) - require.NotNil(t, am.receiver) + require.NoError(t, am.Init()) } From e4e5cfc89797626146751b3ad7eb4787f73760a7 Mon Sep 17 00:00:00 2001 From: skartikey <1942366+skartikey@users.noreply.github.com> Date: Thu, 14 May 2026 19:32:28 +0100 Subject: [PATCH 7/7] fix(inputs.azure_monitor): address review feedback on secret support Scope client_id and tenant_id checks to the client_secret path so DefaultAzureCredential setups (managed identity, workload identity, env credentials, Azure CLI) keep working without those fields. Document secret-store support for client_secret in README and sample.conf, and consolidate duplicate mock branches in the metric definitions client test. --- plugins/inputs/azure_monitor/README.md | 9 +++++++ plugins/inputs/azure_monitor/azure_monitor.go | 12 +++++----- .../azure_monitor/azure_monitor_test.go | 24 ++++++------------- plugins/inputs/azure_monitor/sample.conf | 1 + 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/plugins/inputs/azure_monitor/README.md b/plugins/inputs/azure_monitor/README.md index f9581c9751ab0..2e152eada88f6 100644 --- a/plugins/inputs/azure_monitor/README.md +++ b/plugins/inputs/azure_monitor/README.md @@ -58,6 +58,14 @@ plugin ordering. See [CONFIGURATION.md][CONFIGURATION.md] for more details. [CONFIGURATION.md]: ../../../docs/CONFIGURATION.md#plugins +## Secret-store support + +This plugin supports secrets from secret-stores for the `client_secret` option. +See the [secret-store documentation][SECRETSTORE] for more details on how +to use them. + +[SECRETSTORE]: ../../../docs/CONFIGURATION.md#secret-store-secrets + ## Configuration ```toml @sample.conf @@ -74,6 +82,7 @@ plugin ordering. See [CONFIGURATION.md][CONFIGURATION.md] for more details. # - Managed Identity # - Azure CLI auth # - Developer Azure CLI auth + # Supports referencing values from secret stores using @{:} syntax client_secret = "<>" # can be found under Azure Active Directory->Properties tenant_id = "<>" diff --git a/plugins/inputs/azure_monitor/azure_monitor.go b/plugins/inputs/azure_monitor/azure_monitor.go index f60dd110c5521..07ab463032044 100644 --- a/plugins/inputs/azure_monitor/azure_monitor.go +++ b/plugins/inputs/azure_monitor/azure_monitor.go @@ -68,12 +68,6 @@ func (am *AzureMonitor) Init() error { if am.SubscriptionID == "" { return errors.New("subscription_id is required") } - if am.ClientID == "" { - return errors.New("client_id is required") - } - if am.TenantID == "" { - return errors.New("tenant_id is required") - } var clientOptions azcore.ClientOptions switch am.CloudOption { @@ -89,6 +83,12 @@ func (am *AzureMonitor) Init() error { var clientSecret string if !am.ClientSecret.Empty() { + if am.ClientID == "" { + return errors.New("client_id is required when client_secret is set") + } + if am.TenantID == "" { + return errors.New("tenant_id is required when client_secret is set") + } secret, err := am.ClientSecret.Get() if err != nil { return fmt.Errorf("getting client secret failed: %w", err) diff --git a/plugins/inputs/azure_monitor/azure_monitor_test.go b/plugins/inputs/azure_monitor/azure_monitor_test.go index 6f9b10ac6b879..02ec31792f320 100644 --- a/plugins/inputs/azure_monitor/azure_monitor_test.go +++ b/plugins/inputs/azure_monitor/azure_monitor_test.go @@ -115,23 +115,23 @@ func (*mockAzureMetricDefinitionsClient) List( return armmonitor.MetricDefinitionsClientListResponse{}, err } - if resourceID == "/subscriptions/subscriptionID/resourceGroups/resourceGroup1/providers/Microsoft.Test/type1/resource1" { + switch resourceID { + case "/subscriptions/subscriptionID/resourceGroups/resourceGroup1/providers/Microsoft.Test/type1/resource1": return armmonitor.MetricDefinitionsClientListResponse{ MetricDefinitionCollection: armmonitor.MetricDefinitionCollection{ Value: metricDefinitions[0], }, }, nil - } - - if resourceID == "/subscriptions/subscriptionID/resourceGroups/resourceGroup1/providers/Microsoft.Test/type2/resource2" { + case "/subscriptions/subscriptionID/resourceGroups/resourceGroup1/providers/Microsoft.Test/type2/resource2", + "/subscriptions/subscriptionID/resourceGroups/resourceGroup2/providers/Microsoft.Test/type2/resource4", + "/subscriptions/subscriptionID/resourceGroups/resourceGroup2/providers/Microsoft.Test/type2/resource5", + "/subscriptions/subscriptionID/resourceGroups/resourceGroup2/providers/Microsoft.Test/type2/resource6": return armmonitor.MetricDefinitionsClientListResponse{ MetricDefinitionCollection: armmonitor.MetricDefinitionCollection{ Value: metricDefinitions[1], }, }, nil - } - - if resourceID == "/subscriptions/subscriptionID/resourceGroups/resourceGroup2/providers/Microsoft.Test/type1/resource3" { + case "/subscriptions/subscriptionID/resourceGroups/resourceGroup2/providers/Microsoft.Test/type1/resource3": return armmonitor.MetricDefinitionsClientListResponse{ MetricDefinitionCollection: armmonitor.MetricDefinitionCollection{ Value: metricDefinitions[2], @@ -139,16 +139,6 @@ func (*mockAzureMetricDefinitionsClient) List( }, nil } - if resourceID == "/subscriptions/subscriptionID/resourceGroups/resourceGroup2/providers/Microsoft.Test/type2/resource4" || - resourceID == "/subscriptions/subscriptionID/resourceGroups/resourceGroup2/providers/Microsoft.Test/type2/resource5" || - resourceID == "/subscriptions/subscriptionID/resourceGroups/resourceGroup2/providers/Microsoft.Test/type2/resource6" { - return armmonitor.MetricDefinitionsClientListResponse{ - MetricDefinitionCollection: armmonitor.MetricDefinitionCollection{ - Value: metricDefinitions[1], - }, - }, nil - } - return armmonitor.MetricDefinitionsClientListResponse{}, errors.New("resource ID was not found") } diff --git a/plugins/inputs/azure_monitor/sample.conf b/plugins/inputs/azure_monitor/sample.conf index 9eb28b1edbaca..90e51f60cebf9 100644 --- a/plugins/inputs/azure_monitor/sample.conf +++ b/plugins/inputs/azure_monitor/sample.conf @@ -11,6 +11,7 @@ # - Managed Identity # - Azure CLI auth # - Developer Azure CLI auth + # Supports referencing values from secret stores using @{:} syntax client_secret = "<>" # can be found under Azure Active Directory->Properties tenant_id = "<>"