mirror of
https://github.com/prometheus/prometheus.git
synced 2024-12-26 06:04:05 -08:00
Adding support for multiple azure environments (#4569)
Signed-off-by: Tariq Ibrahim <tariq.ibrahim@microsoft.com>
This commit is contained in:
parent
40517dc4b3
commit
f708fd5c99
|
@ -441,6 +441,7 @@ var expectedConf = &Config{
|
||||||
ServiceDiscoveryConfig: sd_config.ServiceDiscoveryConfig{
|
ServiceDiscoveryConfig: sd_config.ServiceDiscoveryConfig{
|
||||||
AzureSDConfigs: []*azure.SDConfig{
|
AzureSDConfigs: []*azure.SDConfig{
|
||||||
{
|
{
|
||||||
|
Environment: "AzurePublicCloud",
|
||||||
SubscriptionID: "11AAAA11-A11A-111A-A111-1111A1111A11",
|
SubscriptionID: "11AAAA11-A11A-111A-A111-1111A1111A11",
|
||||||
TenantID: "BBBB222B-B2B2-2B22-B222-2BB2222BB2B2",
|
TenantID: "BBBB222B-B2B2-2B22-B222-2BB2222BB2B2",
|
||||||
ClientID: "333333CC-3C33-3333-CCC3-33C3CCCCC33C",
|
ClientID: "333333CC-3C33-3333-CCC3-33C3CCCCC33C",
|
||||||
|
|
3
config/testdata/conf.good.yml
vendored
3
config/testdata/conf.good.yml
vendored
|
@ -195,7 +195,8 @@ scrape_configs:
|
||||||
|
|
||||||
- job_name: service-azure
|
- job_name: service-azure
|
||||||
azure_sd_configs:
|
azure_sd_configs:
|
||||||
- subscription_id: 11AAAA11-A11A-111A-A111-1111A1111A11
|
- environment: AzurePublicCloud
|
||||||
|
subscription_id: 11AAAA11-A11A-111A-A111-1111A1111A11
|
||||||
tenant_id: BBBB222B-B2B2-2B22-B222-2BB2222BB2B2
|
tenant_id: BBBB222B-B2B2-2B22-B222-2BB2222BB2B2
|
||||||
client_id: 333333CC-3C33-3333-CCC3-33C3CCCCC33C
|
client_id: 333333CC-3C33-3333-CCC3-33C3CCCCC33C
|
||||||
client_secret: mysecret
|
client_secret: mysecret
|
||||||
|
|
|
@ -65,11 +65,13 @@ var (
|
||||||
DefaultSDConfig = SDConfig{
|
DefaultSDConfig = SDConfig{
|
||||||
Port: 80,
|
Port: 80,
|
||||||
RefreshInterval: model.Duration(5 * time.Minute),
|
RefreshInterval: model.Duration(5 * time.Minute),
|
||||||
|
Environment: azure.PublicCloud.Name,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
// SDConfig is the configuration for Azure based service discovery.
|
// SDConfig is the configuration for Azure based service discovery.
|
||||||
type SDConfig struct {
|
type SDConfig struct {
|
||||||
|
Environment string `yaml:"environment,omitempty"`
|
||||||
Port int `yaml:"port"`
|
Port int `yaml:"port"`
|
||||||
SubscriptionID string `yaml:"subscription_id"`
|
SubscriptionID string `yaml:"subscription_id"`
|
||||||
TenantID string `yaml:"tenant_id,omitempty"`
|
TenantID string `yaml:"tenant_id,omitempty"`
|
||||||
|
@ -159,27 +161,37 @@ type azureClient struct {
|
||||||
|
|
||||||
// createAzureClient is a helper function for creating an Azure compute client to ARM.
|
// createAzureClient is a helper function for creating an Azure compute client to ARM.
|
||||||
func createAzureClient(cfg SDConfig) (azureClient, error) {
|
func createAzureClient(cfg SDConfig) (azureClient, error) {
|
||||||
|
env, err := azure.EnvironmentFromName(cfg.Environment)
|
||||||
|
if err != nil {
|
||||||
|
return azureClient{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
activeDirectoryEndpoint := env.ActiveDirectoryEndpoint
|
||||||
|
resourceManagerEndpoint := env.ResourceManagerEndpoint
|
||||||
|
|
||||||
var c azureClient
|
var c azureClient
|
||||||
oauthConfig, err := adal.NewOAuthConfig(azure.PublicCloud.ActiveDirectoryEndpoint, cfg.TenantID)
|
oauthConfig, err := adal.NewOAuthConfig(activeDirectoryEndpoint, cfg.TenantID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return azureClient{}, err
|
return azureClient{}, err
|
||||||
}
|
}
|
||||||
spt, err := adal.NewServicePrincipalToken(*oauthConfig, cfg.ClientID, string(cfg.ClientSecret), azure.PublicCloud.ResourceManagerEndpoint)
|
spt, err := adal.NewServicePrincipalToken(*oauthConfig, cfg.ClientID, string(cfg.ClientSecret), resourceManagerEndpoint)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return azureClient{}, err
|
return azureClient{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
c.vm = compute.NewVirtualMachinesClient(cfg.SubscriptionID)
|
bearerAuthorizer := autorest.NewBearerAuthorizer(spt)
|
||||||
c.vm.Authorizer = autorest.NewBearerAuthorizer(spt)
|
|
||||||
|
|
||||||
c.nic = network.NewInterfacesClient(cfg.SubscriptionID)
|
c.vm = compute.NewVirtualMachinesClientWithBaseURI(resourceManagerEndpoint, cfg.SubscriptionID)
|
||||||
c.nic.Authorizer = autorest.NewBearerAuthorizer(spt)
|
c.vm.Authorizer = bearerAuthorizer
|
||||||
|
|
||||||
c.vmss = compute.NewVirtualMachineScaleSetsClient(cfg.SubscriptionID)
|
c.nic = network.NewInterfacesClientWithBaseURI(resourceManagerEndpoint, cfg.SubscriptionID)
|
||||||
c.vmss.Authorizer = autorest.NewBearerAuthorizer(spt)
|
c.nic.Authorizer = bearerAuthorizer
|
||||||
|
|
||||||
c.vmssvm = compute.NewVirtualMachineScaleSetVMsClient(cfg.SubscriptionID)
|
c.vmss = compute.NewVirtualMachineScaleSetsClientWithBaseURI(resourceManagerEndpoint, cfg.SubscriptionID)
|
||||||
c.vmssvm.Authorizer = autorest.NewBearerAuthorizer(spt)
|
c.vmss.Authorizer = bearerAuthorizer
|
||||||
|
|
||||||
|
c.vmssvm = compute.NewVirtualMachineScaleSetVMsClientWithBaseURI(resourceManagerEndpoint, cfg.SubscriptionID)
|
||||||
|
c.vmssvm.Authorizer = bearerAuthorizer
|
||||||
|
|
||||||
return c, nil
|
return c, nil
|
||||||
}
|
}
|
||||||
|
@ -347,7 +359,7 @@ func (d *Discovery) refresh() (tg *targetgroup.Group, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (client *azureClient) getVMs() ([]virtualMachine, error) {
|
func (client *azureClient) getVMs() ([]virtualMachine, error) {
|
||||||
vms := []virtualMachine{}
|
var vms []virtualMachine
|
||||||
result, err := client.vm.ListAll()
|
result, err := client.vm.ListAll()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return vms, fmt.Errorf("could not list virtual machines: %s", err)
|
return vms, fmt.Errorf("could not list virtual machines: %s", err)
|
||||||
|
@ -373,7 +385,7 @@ func (client *azureClient) getVMs() ([]virtualMachine, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (client *azureClient) getScaleSets() ([]compute.VirtualMachineScaleSet, error) {
|
func (client *azureClient) getScaleSets() ([]compute.VirtualMachineScaleSet, error) {
|
||||||
scaleSets := []compute.VirtualMachineScaleSet{}
|
var scaleSets []compute.VirtualMachineScaleSet
|
||||||
result, err := client.vmss.ListAll()
|
result, err := client.vmss.ListAll()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return scaleSets, fmt.Errorf("could not list virtual machine scale sets: %s", err)
|
return scaleSets, fmt.Errorf("could not list virtual machine scale sets: %s", err)
|
||||||
|
@ -392,7 +404,7 @@ func (client *azureClient) getScaleSets() ([]compute.VirtualMachineScaleSet, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (client *azureClient) getScaleSetVMs(scaleSet compute.VirtualMachineScaleSet) ([]virtualMachine, error) {
|
func (client *azureClient) getScaleSetVMs(scaleSet compute.VirtualMachineScaleSet) ([]virtualMachine, error) {
|
||||||
vms := []virtualMachine{}
|
var vms []virtualMachine
|
||||||
//TODO do we really need to fetch the resourcegroup this way?
|
//TODO do we really need to fetch the resourcegroup this way?
|
||||||
r, err := newAzureResourceFromID(*scaleSet.ID, nil)
|
r, err := newAzureResourceFromID(*scaleSet.ID, nil)
|
||||||
|
|
||||||
|
|
|
@ -272,6 +272,8 @@ See below for the configuration options for Azure discovery:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
# The information to access the Azure API.
|
# The information to access the Azure API.
|
||||||
|
# The Azure environment.
|
||||||
|
[ environment: <string> | default = AzurePublicCloud ]
|
||||||
# The subscription ID.
|
# The subscription ID.
|
||||||
subscription_id: <string>
|
subscription_id: <string>
|
||||||
# The tenant ID.
|
# The tenant ID.
|
||||||
|
|
Loading…
Reference in a new issue