|
package main |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
"log" |
|
"os" |
|
|
|
"github.com/Azure/azure-sdk-for-go/sdk/azidentity" |
|
"github.com/Azure/azure-sdk-for-go/sdk/monitor/query/azmetrics" |
|
) |
|
|
|
func main() { |
|
|
|
credentials, err := azidentity.NewClientSecretCredential( |
|
os.Getenv("AZURE_TENANT_ID"), |
|
os.Getenv("AZURE_CLIENT_ID"), |
|
os.Getenv("AZURE_CLIENT_SECRET"), |
|
nil, |
|
) |
|
if err != nil { |
|
log.Fatal(err) |
|
} |
|
|
|
client, err := azmetrics.NewClient( |
|
"https://eastus2.metrics.monitor.azure.com", |
|
credentials, |
|
nil, |
|
) |
|
if err != nil { |
|
log.Fatal(err) |
|
} |
|
|
|
fmt.Println("Ready to go!") |
|
|
|
subscriptionID := os.Getenv("AZURE_SUBSCRIPTION_ID") |
|
resourceGroup := os.Getenv("AZURE_RESOURCE_GROUP") |
|
namespace := "Microsoft.KeyVault/vaults" |
|
metricNames := []string{ |
|
"ServiceApiResult", |
|
} |
|
resourceIDs := []string{ |
|
fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.KeyVault/vaults/kv1-oeefrt7tlykau", subscriptionID, resourceGroup), |
|
fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.KeyVault/vaults/kv2-oeefrt7tlykau", subscriptionID, resourceGroup), |
|
fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.KeyVault/vaults/kv3-oeefrt7tlykau", subscriptionID, resourceGroup), |
|
fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.KeyVault/vaults/kv4-oeefrt7tlykau", subscriptionID, resourceGroup), |
|
fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.KeyVault/vaults/kv5-oeefrt7tlykau", subscriptionID, resourceGroup), |
|
fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.KeyVault/vaults/kv6-oeefrt7tlykau", subscriptionID, resourceGroup), |
|
fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.KeyVault/vaults/kv7-oeefrt7tlykau", subscriptionID, resourceGroup), |
|
fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.KeyVault/vaults/kv8-oeefrt7tlykau", subscriptionID, resourceGroup), |
|
fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.KeyVault/vaults/kv9-oeefrt7tlykau", subscriptionID, resourceGroup), |
|
fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.KeyVault/vaults/kv10-oeefrt7tlykau", subscriptionID, resourceGroup), |
|
} |
|
options := azmetrics.QueryResourcesOptions{ |
|
Aggregation: ptr("Count"), |
|
StartTime: ptr("2024-04-16T07:18:13.001Z"), |
|
EndTime: ptr("2024-04-16T07:19:13.001Z"), |
|
Filter: ptr("ActivityType eq '*' AND ActivityName eq '*' AND StatusCode eq '*' AND StatusCodeClass eq '*'"), |
|
Interval: ptr("PT1M"), |
|
} |
|
|
|
fmt.Println("----------------------------------------------------") |
|
fmt.Println("Querying SINGLE resources") |
|
fmt.Println("----------------------------------------------------") |
|
|
|
for _, resourceID := range resourceIDs { |
|
res, err := client.QueryResources( |
|
context.Background(), |
|
subscriptionID, |
|
namespace, |
|
metricNames, |
|
azmetrics.ResourceIDList{ |
|
ResourceIDs: []string{resourceID}, |
|
}, |
|
&options, |
|
) |
|
if err != nil { |
|
log.Fatal(err) |
|
} |
|
|
|
displayResponse(res) |
|
} |
|
|
|
fmt.Println("----------------------------------------------------") |
|
fmt.Println("Querying resources as a GROUP") |
|
fmt.Println("----------------------------------------------------") |
|
|
|
res, err := client.QueryResources( |
|
context.Background(), |
|
subscriptionID, |
|
namespace, |
|
metricNames, |
|
azmetrics.ResourceIDList{ |
|
ResourceIDs: resourceIDs, |
|
}, |
|
&options, |
|
) |
|
if err != nil { |
|
log.Fatal(err) |
|
} |
|
|
|
displayResponse(res) |
|
} |
|
|
|
func displayResponse(res azmetrics.QueryResourcesResponse) { |
|
for _, metricData := range res.Values { |
|
fmt.Println(*metricData.ResourceID) |
|
for _, metricValue := range metricData.Values { |
|
fmt.Println("timeseries", len(metricValue.TimeSeries)) |
|
} |
|
} |
|
} |
|
|
|
func ptr(s string) *string { |
|
return &s |
|
} |