通过Powershell将数据发送到Azure Application Insights
实际上,我尝试将度量数据从application gateway发送到application insights。 我们的数据目前仍在德国云上,无法获得应用程序洞察。 因此,我们的数据在ApplicationInsights中登录到我们在西欧的云中。 目前,我希望在Application Insights中提供应用程序网关的度量值 我创建了一个脚本,在我将数据从服务总线发送到Application Insights时,它的工作方式与以前类似 以下是脚本:通过Powershell将数据发送到Azure Application Insights,azure,powershell,azure-application-insights,Azure,Powershell,Azure Application Insights,实际上,我尝试将度量数据从application gateway发送到application insights。 我们的数据目前仍在德国云上,无法获得应用程序洞察。 因此,我们的数据在ApplicationInsights中登录到我们在西欧的云中。 目前,我希望在Application Insights中提供应用程序网关的度量值 我创建了一个脚本,在我将数据从服务总线发送到Application Insights时,它的工作方式与以前类似 以下是脚本: #####################
################################################################################################
$client=New-Object Microsoft.ApplicationInsights.TelemetryClient
$client.InstrumentationKey=$[our app insights instrumentation key]
$timenow = get-date -Format h:mm:s
$timeminus2 = get-date -Format h:mm:s ((get-date).AddMinutes(-1))
$azmetric = Get-AzMetric -ResourceId "[path of Application Gateway]" -MetricName "UnhealthyHostCount", "Throughput", "HealthyHostCount", "TotalRequests", "AvgRequestCountPerHealthyHost", "FailedRequests", "ResponseStatus", "CurrentConnections" -StartTime $timeminus2 -EndTime $timenow
$array1 = $azmetric.Data.Average
$array2 = $azmetric.Name.Value
[int]$max = $array1.Count
if ([int]$array2.count -gt [int]$array1.count) { $max = $array2.count; }
$Results = for ($i = 0; $i -lt $max; $i++)
{
Write-Verbose "$($array1[$i]),$($array2[$i])"
[PSCustomObject]@{
Metric = $array2[$i]
Data = $array1[$i]
}
}
$client.TrackMetric($Results)
################################################################################################
我收到这个消息:
对于“TrackMetric”和以下数量的参数,找不到重载:“1”。
在C:\temp\Powershell\Function\ApplicationGateway\test2.ps1:65中,符号:1
+$client.TrackMetric($Results)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+CategoryInfo:NotSpecified:(:)[],MethodException
+FullyQualifiedErrorId:MethodCountNotFindBest
我认为问题在于系统无法定义数据的值。您希望调用哪个版本的TrackMetric?因为看着 仅显示一个方法,该方法接受一个参数:TrackMetric(MetricTelemetry),并且您正在创建的metric+数据对象不是metric遥测对象,它具有更多属性。(见附件) 您可以切换到调用方法的
TrackMetric(字符串名称,双值)
版本,如TrackMetric($array2[$i],$array1[$i],null)
但这需要对TrackMetric
的调用在您的循环中
另一种选择是使用更新的东西在循环中获取度量,并使用类似于getMetric(name).TrackValue(value)
的内容。该度量trackvalue将随着时间累积值,并创建一个“预聚合”值,而不是一次发送数百或数千个值
不过,另一个选择是根本不这样做。度量值已经在azure中,为什么要将它们取出并放入application insights资源中,可能会丢失原始度量值的正确时间值
也许值得更新您的问题,以解释您为什么要这样做,因为正确的答案可能是使用azure的某些其他功能(日志分析?度量工具?工作簿?)以另一种现有形式查询此数据,而不是创建、导出和导入此数据。通常,我们可以在Azure德国的指标中看到数据。问题是这些功能非常有限,不可能进行真正的监视或报警。这就是为什么我们在西欧的Azure云上有应用程序洞察。到目前为止,我们发现解决这个问题的唯一方法是检索数据,并使用ApplicationInsights中的Instrumentation键使其可用。因此,我们编写了一个Powershell脚本 事实上,我们解决这个问题的方法如下 以下是脚本:
# <#
# .SYNOPSIS
# read Application Gateway metrics
# .DESCRIPTION
# read out application gateway metrics and write data in application insights
# .PARAMETER applicationinsightskey
# application insights key
# .PARAMETER ResourceId
# application gateway path
# .LEGENDE
# UHC = UnhealthyHostCount
# TP = Throughput
# HHC = HealthyHostCount
# TR = TotalRequests
# ARH = AvgRequestCountPerHealthyHost
# FR = FailedRequests
# RS = ResponseStatus
# CC = CurrentConnections
# #>
############################################################################### TIMER ########################################################################################
param (
[Parameter(Mandatory=$true, Position=0, ValueFromPipeline=$true)]
[string]$Timer
)
############################################################################### Service Principal User anmelden ##############################################################
$env:azureAplicationId
$azurePassword = ConvertTo-SecureString $env:sppassword -AsPlainText -Force
$psCred = New-Object System.Management.Automation.PSCredential($env:azureAplicationId , $azurePassword)
Connect-AzAccount -Environment AzureGermanCloud -Subscription WKTAADE-PROD-OC -Credential $psCred -TenantId $env:azureTenantId -ServicePrincipal
############################################################################### Application Insight Information ###############################################################
$client = New-Object Microsoft.ApplicationInsights.TelemetryClient
$client.InstrumentationKey = $env:applicationinsightskey
############################################################################### Define Time ###################################################################################
$timenow = get-date -Format h:mm:s
$timeminus1 = get-date -Format h:mm:s ((get-date).AddMinutes(-1))
############################################################################### ----------- ###################################################################################
############################################################################### Get DATA - UnhealthyHostCount #################################################################
$azmetricUHC = Get-AzMetric -ResourceId $env:resourceId -MetricName "UnhealthyHostCount" -StartTime $timeminus1 -EndTime $timenow
############################################################################### Put DATA into Array ###########################################################################
$valuesUHC = $azmetricUHC.Data.Average
$namesUHC = $azmetricUHC.Name.Value | Out-String
############################################################################### LOOP - Send to Application Insights ###########################################################
foreach ($nameUHC in $namesUHC)
{
foreach ($valueUHC in $valuesUHC)
{
$outputUHC = $nameUHC
Write-Host $outputUHC
$client.TrackMetric($outputUHC, $valueUHC)
$client.Flush()
}
}
############################################################################### Get DATA - Throughput ########################################################################
$azmetricTP = Get-AzMetric -ResourceId $env:resourceId -MetricName "Throughput" -StartTime $timeminus1 -EndTime $timenow
############################################################################### Put DATA into Array ##########################################################################
$valuesTP = $azmetricTP.Data.Average
$namesTP = $azmetricTP.Name.Value | Out-String
############################################################################### LOOP - Send to Application Insights ##########################################################
foreach ($nameTP in $namesTP)
{
foreach ($valueTP in $valuesTP)
{
$outputTP = $nameTP
Write-Host $outputTP
$client.TrackMetric($outputTP, $valueTP)
$client.Flush()
}
}
############################################################################### Get DATA - HealthyHostCount ##################################################################
$azmetricHHC = Get-AzMetric -ResourceId $env:resourceId -MetricName "HealthyHostCount" -StartTime $timeminus1 -EndTime $timenow
############################################################################### Put DATA into Array ##########################################################################
$valuesHHC = $azmetricHHC.Data.Average
$namesHHC = $azmetricHHC.Name.Value | Out-String
############################################################################### LOOP - Send to Application Insights ##########################################################
foreach ($nameHHC in $namesHHC)
{
foreach ($valueHHC in $valuesHHC)
{
$outputHHC = $nameHHC
Write-Host $outputHHC
$client.TrackMetric($outputHHC, $valueHHC)
$client.Flush()
}
}
############################################################################### Get DATA - TotalRequests #####################################################################
$azmetricTR = Get-AzMetric -ResourceId $env:resourceId -MetricName "TotalRequests" -StartTime $timeminus1 -EndTime $timenow
############################################################################### Put DATA into Array ##########################################################################
$valuesTR = $azmetricTR.Data.Total
$namesTR = $azmetricTR.Name.Value | Out-String
############################################################################### LOOP - Send to Application Insights ##########################################################
foreach ($nameTR in $namesTR)
{
foreach ($valueTR in $valuesTR)
{
$outputTR = $nameTR
Write-Host $outputTR
$client.TrackMetric($outputTR, $valueTR)
$client.Flush()
}
}
############################################################################### Get DATA - AvgRequestCountPerHealthyHost ######################################################
$azmetricARH = Get-AzMetric -ResourceId $env:resourceId -MetricName "AvgRequestCountPerHealthyHost" -StartTime $timeminus1 -EndTime $timenow
############################################################################### Put DATA into Array ###########################################################################
$valuesARH = $azmetricARH.Data.Average
$namesARH = $azmetricARH.Name.Value | Out-String
############################################################################### LOOP - Send to Application Insights ###########################################################
foreach ($nameARH in $namesARH)
{
foreach ($valueARH in $valuesARH)
{
$outputARH = $nameARH
Write-Host $outputARH
$client.TrackMetric($outputARH, $valueARH)
$client.Flush()
}
}
############################################################################### Get DATA - FailedRequests #####################################################################
$azmetricFR = Get-AzMetric -ResourceId $env:resourceId -MetricName "FailedRequests" -StartTime $timeminus1 -EndTime $timenow
############################################################################### Put DATA into Array ###########################################################################
$valuesFR = $azmetricFR.Data.Total
$namesFR = $azmetricFR.Name.Value | Out-String
############################################################################### LOOP - Send to Application Insights ###########################################################
foreach ($nameFR in $namesFR)
{
foreach ($valueFR in $valuesFR)
{
$outputFR = $nameFR
Write-Host $outputFR
$client.TrackMetric($outputFR, $valueFR)
$client.Flush()
}
}
############################################################################### Get DATA - ResponseStatus #####################################################################
$azmetricRS = Get-AzMetric -ResourceId $env:resourceId -MetricName "ResponseStatus" -StartTime $timeminus1 -EndTime $timenow
############################################################################### Put DATA into Array ###########################################################################
$valuesRS = $azmetricRS.Data.Total
$namesRS = $azmetricRS.Name.Value | Out-String
############################################################################### LOOP - Send to Application Insights ###########################################################
foreach ($nameRS in $namesRS)
{
foreach ($valueRS in $valuesRS)
{
$outputRS = $nameRS
Write-Host $outputRS
$client.TrackMetric($outputRS, $valueRS)
$client.Flush()
}
}
############################################################################### Get DATA - CurrentConnections #################################################################
$azmetricCC = Get-AzMetric -ResourceId $env:resourceId -MetricName "CurrentConnections" -StartTime $timeminus1 -EndTime $timenow
############################################################################### Put DATA into Array ###########################################################################
$valuesCC = $azmetricCC.Data.Total
$namesCC = $azmetricCC.Name.Value | Out-String
############################################################################### LOOP - Send to Application Insights ###########################################################
foreach ($nameCC in $namesCC)
{
foreach ($valueCC in $valuesCC)
{
$outputCC = $nameCC
Write-Host $outputCC
$client.TrackMetric($outputCC, $valueCC)
$client.Flush()
}
}
############################################################################### THE END #######################################################################################
#
###############################################################################计时器########################################################################################
param(
[参数(必需=$true,位置=0,ValueFromPipeline=$true)]
[字符串]$计时器
)
###############################################################################服务主要用户anmelden##############################################################
$env:AzureapplicationId
$azurePassword=converttoSecureString$env:sppassword-AsPlainText-Force
$psCred=新对象系统、管理、自动化、PSCredential($env:azureApplicationId、$azurePassword)
连接AzaAccount-环境AzureGermanCloud-订阅WKTADE-PROD-OC-凭证$psCred-租户$env:azureTenantId-服务委托人
###############################################################################应用程序洞察信息###############################################################
$client=新对象Microsoft.ApplicationInsights.TelemetryClient
$client.InstrumentationKey=$env:applicationinsightskey
###############################################################################定义时间###################################################################################
$timenow=获取日期-格式h:mm:s
$timeminus1=获取日期-格式h:mm:s((获取日期).AddMinutes(-1))
############################################################################### ----------- ###################################################################################
###############################################################################获取数据-不健康HOSTCOUNT#################################################################
$azmetricUHC=获取AzMetric-ResourceId$env:ResourceId-MetricName“UnhealthyHostCount”-开始时间$timeminus1-结束时间$timenow
###############################################################################将数据放入数组###########################################################################
$valuesUHC=$azmetricUHC.Data.Average
$namesUHC=$azmetricUHC.Name.Value |输出字符串
###############################################################################循环-发送到应用程序洞察###########################################################
foreach($nameUHC中的$nameUHC)
{
foreach($valueUHC,单位为$valuesUHC)
{
$outputUHC=$nameUHC
写入主机$outputUHC
$client.TrackMetric($outputUHC,$valueUHC)
$client.Flush()
}
}
###############################################################################获取数据吞吐量########################################################################
$azmetricTP=Get-AzMetric-ResourceId$env:ResourceId-MetricName“吞吐量”-StartTime$TimeMinss1-EndTime$timenow
###############################################################################将数据放入