Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Provide resource discovery support for VMs & Virtual Machine Scale Set (VMSS) #1162

Merged
merged 6 commits into from
Jul 16, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ resourceDiscoveryGroups:
- 0329dd2a-59dc-4493-aa54-cb01cb027dc2
- name: container-registry-landscape
type: ContainerRegistry
- name: virtual-machine-scale-sets
type: VirtualMachineScaleSet
- name: virtual-machines
type: VirtualMachine
- name: app-plan-landscape
type: AppPlan
- name: web-apps-north-europe
Expand Down
2 changes: 2 additions & 0 deletions docs/configuration/v2.x/metrics/app-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ azureMetricConfiguration:
type: Average
resources:
- appPlanName: promitor-app-plan
resourceDiscoveryGroups:
- name: app-plans-group
```

<!-- markdownlint-disable MD033 -->
Expand Down
2 changes: 2 additions & 0 deletions docs/configuration/v2.x/metrics/container-registry.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ azureMetricConfiguration:
resources:
- registryName: promitor-1
- registryName: promitor-2
resourceDiscoveryGroups:
- name: registry-group
```

<!-- markdownlint-disable MD033 -->
Expand Down
2 changes: 2 additions & 0 deletions docs/configuration/v2.x/metrics/function-app.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ azureMetricConfiguration:
type: Total
resources:
- functionAppName: promitor-function-app
resourceDiscoveryGroups:
- name: functions-group
```

<!-- markdownlint-disable MD033 -->
Expand Down
2 changes: 2 additions & 0 deletions docs/configuration/v2.x/metrics/logic-apps.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ azureMetricConfiguration:
resources:
- workflowName: promitor-workflow-1
- workflowName: promitor-workflow-2
resourceDiscoveryGroups:
- name: logic-apps-group
```

<!-- markdownlint-disable MD033 -->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ title: Azure Virtual Machine Scale Set (VMSS) Declaration

## Azure Virtual Machine Scale Set (VMSS)

![Availability Badge](https://img.shields.io/badge/Available%20Starting-v1.2-green.svg)![Resource Discovery Support Badge](https://img.shields.io/badge/Support%20for%20Resource%20Discovery-No-red.svg)
![Availability Badge](https://img.shields.io/badge/Available%20Starting-v1.2-green.svg)![Resource Discovery Support Badge](https://img.shields.io/badge/Support%20for%20Resource%20Discovery-Yes-red.svg)

You can declare to scrape an Azure Virtual Machine Scale Set via the `VirtualMachineScaleSet` resource
type.
Expand All @@ -30,6 +30,8 @@ azureMetricConfiguration:
type: Average
resources:
- scaleSetName: promitor-virtual-machine-scale-set-1
resourceDiscoveryGroups:
- name: virtual-machine-scale-sets-group
```

<!-- markdownlint-disable MD033 -->
Expand Down
4 changes: 3 additions & 1 deletion docs/configuration/v2.x/metrics/virtual-machine.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ title: Azure Virtual Machine Declaration

## Azure Virtual Machine

![Availability Badge](https://img.shields.io/badge/Available%20Starting-v1.0-green.svg)![Resource Discovery Support Badge](https://img.shields.io/badge/Support%20for%20Resource%20Discovery-No-red.svg)
![Availability Badge](https://img.shields.io/badge/Available%20Starting-v1.0-green.svg)![Resource Discovery Support Badge](https://img.shields.io/badge/Support%20for%20Resource%20Discovery-Yes-red.svg)

You can declare to scrape an Azure Virtual Machine via the `VirtualMachine` resource
type.
Expand All @@ -29,6 +29,8 @@ azureMetricConfiguration:
resources:
- virtualMachineName: promitor-virtual-machine-1
- virtualMachineName: promitor-virtual-machine-2
resourceDiscoveryGroups:
- name: virtual-machine-group
```

<!-- markdownlint-disable MD033 -->
Expand Down
2 changes: 2 additions & 0 deletions docs/configuration/v2.x/metrics/web-app.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ resources:
slot: staging
- webAppName: promitor-web-app
slot: production
resourceDiscoveryGroups:
- name: web-app-group
```

<!-- markdownlint-disable MD033 -->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ public static ResourceDiscoveryQuery UseResourceDiscoveryFor(ResourceType resour
return new FunctionAppDiscoveryQuery();
case ResourceType.LogicApp:
return new LogicAppDiscoveryQuery();
case ResourceType.VirtualMachine:
return new VirtualMachineDiscoveryQuery();
case ResourceType.VirtualMachineScaleSet:
return new VirtualMachineScaleSetDiscoveryQuery();
case ResourceType.WebApp:
return new WebAppDiscoveryQuery();
default:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using GuardNet;
using Newtonsoft.Json.Linq;
using Promitor.Agents.ResourceDiscovery.Configuration;
using Promitor.Agents.ResourceDiscovery.Graph.Query;
using Promitor.Core.Contracts;

namespace Promitor.Agents.ResourceDiscovery.Graph
Expand Down Expand Up @@ -30,7 +31,21 @@ public List<AzureResourceDefinition> ParseQueryResults(JObject unparsedResults)
return foundResources;
}

public abstract string DefineQuery(ResourceCriteria criteria);
public virtual string DefineQuery(ResourceCriteria criteria)
{
var query = GraphQueryBuilder.ForResourceType(ResourceTypes)
.WithSubscriptionsWithIds(criteria.Subscriptions) // Filter on queried subscriptions defined in landscape
.WithResourceGroupsWithName(criteria.ResourceGroups)
.WithinRegions(criteria.Regions)
.WithTags(criteria.Tags)
.Project("subscriptionId", "resourceGroup", "type", "name", "id")
.Build();

return query;
}

public abstract string[] ResourceTypes { get; }

public abstract AzureResourceDefinition ParseResults(JToken resultRowEntry);
}
}
Original file line number Diff line number Diff line change
@@ -1,28 +1,13 @@
using GuardNet;
using Newtonsoft.Json.Linq;
using Promitor.Agents.ResourceDiscovery.Configuration;
using Promitor.Agents.ResourceDiscovery.Graph.Query;
using Promitor.Core.Contracts;
using Promitor.Core.Contracts.ResourceTypes;

namespace Promitor.Agents.ResourceDiscovery.Graph.ResourceTypes
{
public class AppPlanDiscoveryQuery : ResourceDiscoveryQuery
{
public static string ResourceType = "microsoft.web/serverfarms";

public override string DefineQuery(ResourceCriteria criteria)
{
var query= GraphQueryBuilder.ForResourceType(ResourceType)
.WithSubscriptionsWithIds(criteria.Subscriptions) // Filter on queried subscriptions defined in landscape
.WithResourceGroupsWithName(criteria.ResourceGroups)
.WithinRegions(criteria.Regions)
.WithTags(criteria.Tags)
.Project("subscriptionId", "resourceGroup", "type", "name")
.Build();

return query;
}
public override string[] ResourceTypes => new[] { "microsoft.web/serverfarms" };

public override AzureResourceDefinition ParseResults(JToken resultRowEntry)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ namespace Promitor.Agents.ResourceDiscovery.Graph.ResourceTypes
{
public abstract class AppServiceResourceDiscoveryQuery : ResourceDiscoveryQuery
{
public override string[] ResourceTypes => new[] { "microsoft.web/sites", "microsoft.web/sites/slots" };

public (string AppName, string SlotName) DetermineAppDetails(string resourceName)
{
if (resourceName.Contains("/"))
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
using GuardNet;
using Newtonsoft.Json.Linq;
using Promitor.Agents.ResourceDiscovery.Configuration;
using Promitor.Agents.ResourceDiscovery.Graph.Query;
using Promitor.Core.Contracts;
using Promitor.Core.Contracts.ResourceTypes;

Expand All @@ -10,19 +8,7 @@ namespace Promitor.Agents.ResourceDiscovery.Graph.ResourceTypes
public class ContainerRegistryDiscoveryQuery : ResourceDiscoveryQuery
{
public static string ResourceType = "microsoft.containerregistry/registries";

public override string DefineQuery(ResourceCriteria criteria)
{
var query = GraphQueryBuilder.ForResourceType(ResourceType)
.WithSubscriptionsWithIds(criteria.Subscriptions) // Filter on queried subscriptions defined in landscape
.WithResourceGroupsWithName(criteria.ResourceGroups)
.WithinRegions(criteria.Regions)
.WithTags(criteria.Tags)
.Project("subscriptionId", "resourceGroup", "type", "name", "id")
.Build();

return query;
}
public override string[] ResourceTypes => new[] { "microsoft.containerregistry/registries" };

public override AzureResourceDefinition ParseResults(JToken resultRowEntry)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public class FunctionAppDiscoveryQuery : AppServiceResourceDiscoveryQuery
{
public override string DefineQuery(ResourceCriteria criteria)
{
var query = GraphQueryBuilder.ForResourceType("microsoft.web/sites", "microsoft.web/sites/slots")
var query = GraphQueryBuilder.ForResourceType(ResourceTypes)
.Where("kind", Operator.Contains, "functionapp")
.WithSubscriptionsWithIds(criteria.Subscriptions) // Filter on queried subscriptions defined in landscape
.WithResourceGroupsWithName(criteria.ResourceGroups)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,28 +1,13 @@
using GuardNet;
using Newtonsoft.Json.Linq;
using Promitor.Agents.ResourceDiscovery.Configuration;
using Promitor.Agents.ResourceDiscovery.Graph.Query;
using Promitor.Core.Contracts;
using Promitor.Core.Contracts.ResourceTypes;

namespace Promitor.Agents.ResourceDiscovery.Graph.ResourceTypes
{
public class LogicAppDiscoveryQuery : ResourceDiscoveryQuery
{
public static string ResourceType = "microsoft.logic/workflows";

public override string DefineQuery(ResourceCriteria criteria)
{
var query= GraphQueryBuilder.ForResourceType(ResourceType)
.WithSubscriptionsWithIds(criteria.Subscriptions) // Filter on queried subscriptions defined in landscape
.WithResourceGroupsWithName(criteria.ResourceGroups)
.WithinRegions(criteria.Regions)
.WithTags(criteria.Tags)
.Project("subscriptionId", "resourceGroup", "type", "name")
.Build();

return query;
}
public override string[] ResourceTypes => new[] { "microsoft.logic/workflows" };

public override AzureResourceDefinition ParseResults(JToken resultRowEntry)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using GuardNet;
using Newtonsoft.Json.Linq;
using Promitor.Core.Contracts;
using Promitor.Core.Contracts.ResourceTypes;

namespace Promitor.Agents.ResourceDiscovery.Graph.ResourceTypes
{
public class VirtualMachineDiscoveryQuery : ResourceDiscoveryQuery
{
public override string[] ResourceTypes => new[] { "microsoft.compute/virtualmachines" };

public override AzureResourceDefinition ParseResults(JToken resultRowEntry)
{
Guard.NotNull(resultRowEntry, nameof(resultRowEntry));

var virtualMachineName = resultRowEntry[3]?.ToString();

var resource = new VirtualMachineResourceDefinition(resultRowEntry[0]?.ToString(), resultRowEntry[1]?.ToString(), virtualMachineName);
return resource;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using GuardNet;
using Newtonsoft.Json.Linq;
using Promitor.Core.Contracts;
using Promitor.Core.Contracts.ResourceTypes;

namespace Promitor.Agents.ResourceDiscovery.Graph.ResourceTypes
{
public class VirtualMachineScaleSetDiscoveryQuery : ResourceDiscoveryQuery
{
public override string[] ResourceTypes => new[] { "microsoft.compute/virtualmachinescalesets" };

public override AzureResourceDefinition ParseResults(JToken resultRowEntry)
{
Guard.NotNull(resultRowEntry, nameof(resultRowEntry));

var vmss = resultRowEntry[3]?.ToString();

var resource = new VirtualMachineScaleSetResourceDefinition(resultRowEntry[0]?.ToString(), resultRowEntry[1]?.ToString(), vmss);
return resource;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public class WebAppDiscoveryQuery : AppServiceResourceDiscoveryQuery
{
public override string DefineQuery(ResourceCriteria criteria)
{
var query = GraphQueryBuilder.ForResourceType("microsoft.web/sites", "microsoft.web/sites/slots")
var query = GraphQueryBuilder.ForResourceType(ResourceTypes)
.Where("kind", Operator.DoesNotContain, "functionapp")
.WithSubscriptionsWithIds(criteria.Subscriptions) // Filter on queried subscriptions defined in landscape
.WithResourceGroupsWithName(criteria.ResourceGroups)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ public static IServiceCollection ConfigureValidation(this IServiceCollection ser
services.AddTransient<IValidationStep, ResourceDiscoveryValidationStep>();
services.AddTransient<IValidationStep, StatsDMetricSinkValidationStep>();
services.AddTransient<IValidationStep, PrometheusScrapingEndpointMetricSinkValidationStep>();
services.AddTransient<IValidationStep, AtlassianStatuspageMetricSinkValidationStep>();
services.AddTransient<RuntimeValidator>();

return services;
Expand Down
2 changes: 1 addition & 1 deletion src/Promitor.Agents.Scraper/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public void ConfigureServices(IServiceCollection services)
// Provide Promitor User-Agent
client.DefaultRequestHeaders.UserAgent.TryParseAdd(Http.Headers.UserAgents.Scraper);
});
services.AddHttpClient<AtlassianStatuspageClient>(client =>
services.AddHttpClient<IAtlassianStatuspageClient, AtlassianStatuspageClient>(client =>
{
// Provide Promitor User-Agent
client.DefaultRequestHeaders.UserAgent.TryParseAdd(Http.Headers.UserAgents.Scraper);
Expand Down
11 changes: 0 additions & 11 deletions src/docker-compose.vs.debug.yml

This file was deleted.