我目前正在尝试将Azure Windows VM(例如cpu等)的指标流式传输到eventhub。
我在https://docs.microsoft.com/en-us/azure/event-hubs/event-hubs-streaming-azure-diags-data下找到了一个教程,但是在本教程中,有必要更改每个系统的配置。由于我们拥有许多系统,这将意味着极大的不便。当前我们唯一需要的指标是在Azure中单击VM时显示的指标(PERCENTAGE CPU,NETWORK IN / OUT,磁盘读/写字节,磁盘读操作)。我们已经准备好通过逻辑应用基于这些指标发送警报。
答案 0 :(得分:0)
是否可以在不触摸计算机的情况下将Azure VM指标流式传输到eventhub?
是的,我们可以使用Microsoft.Azure.Management.Monitor.Fluent library t来获得指标。您可以参考此SO thread以获得演示代码。我们还可以从Supported metrics with Azure Monitor获取其他受支持的指标名称。
var azureTenantId = "tenant id";
var azureSecretKey = "secret key";
var azureAppId = "client id";
var subscriptionId = "subscription id";
var resourceGroup = "resource group";
var machineName = "machine name";
var serviceCreds = ApplicationTokenProvider.LoginSilentAsync(azureTenantId, azureAppId, azureSecretKey).Result;
MonitorClient monitorClient = new MonitorClient(serviceCreds) { SubscriptionId = subscriptionId };
var resourceUrl = $"subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/virtualMachines/{machineName}";
var metricNames = "(name.value eq 'Disk Write Operations/Sec' or name.value eq 'Percentage CPU' or name.value eq 'Network In' or name.value eq 'Network Out' or name.value eq 'Disk Read Operations/Sec' or name.value eq 'Disk Read Bytes' or name.value eq 'Disk Write Bytes')";
string timeGrain = " and timeGrain eq duration'PT5M'";
string startDate = " and startTime eq 2017-10-26T05:28:34.919Z";
string endDate = " and endTime eq 2017-10-26T05:33:34.919Z";
var odataFilterMetrics = new ODataQuery<MetricInner>(
$"{metricNames}{timeGrain}{startDate}{endDate}");
var metrics = monitorClient.Metrics.ListWithHttpMessagesAsync(resourceUrl, odataFilterMetrics).Result;
以及如何将消息发送到事件中心,请参阅此tutorial。