通过Powershell将数据发送到Azure 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时,它的工作方式与以前类似 以下是脚本: #####################

实际上,我尝试将度量数据从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
###############################################################################将数据放入