我收到了一个Azure警报,其中包含一个包含我的Azure Function应用程序的操作组。
功能应用已列入消费计划
但是,当发出1条警报时,我得到两个,有时三个功能应用程序的答复。目前正在使用电子邮件进行测试,但是可以是Teams / Slack / Twilio或其他
我已经检查了我的代码几次,但是找不到为什么它多次运行。
难道这是一个冷门问题?
我不应该超时,因为它会在几秒钟内完成
我需要以下代码块吗?
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = $status
})
例如警报触发时间为11/14/2019,4:59:02 AM
该功能应用产生了三个答复:
using namespace System.Net
using namespace System.Web
# Input bindings are passed in via param block.
param($Request)
# Write to the Azure Functions log stream.
$alert = $Request.RawBody | convertfrom-json
function New-TypeTable([object[]]$columns)
{
$hash = [ordered]@{}
foreach ($c in $columns)
{
switch ($c.type)
{
"datetime" { $type = [datetime] }
"real" { $type = [decimal] }
default { $type = [string] }
}
$hash.Add($c.name, $type)
}
$hash
}
function Set-Culture([System.Globalization.CultureInfo] $culture)
{
[System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture
[System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
}
#Set locale to swedish for datetime
Set-Culture sv-SE
#Set variables for later use
$alertRule = $alert.data.essentials.alertRule
$alertDescription = $alert.data.essentials.description
$tables = $alert.data.alertContext.SearchResults.tables
foreach ($table in $tables)
{
$cHash = New-TypeTable -columns $table.columns
[string[]]$keys = $cHash.Keys
$tableInfo = foreach ($row in $table.rows)
{
$psObj = New-Object PSObject
for ($i = 0; $i -lt $row.Count; $i++)
{
$value = $row[$i]
$type = $cHash[$i]
#Round the value of AggregatedValue and CounterValue
if ($keys[$i] -eq "AggregatedValue" -Or $keys[$i] -eq "CounterValue") {
$value = [math]::Round($value,1)
}
#Set the value of TimeGenerated to a specific format
if ($keys[$i] -eq "TimeGenerated") {
$value = "{0:yyyy-MM-dd HH:mm:ss}" -f $value
}
#Don't add Null values
if($value) {
$psObj | Add-Member -MemberType NoteProperty -Name $keys[$i] -Value ($value -as $type)
}
}
$psObj
}
}
#Write-Information $tableInfo -verbose
$Header = @"
<style>
TABLE {width: 750px; border-width: 1px; border-style: solid; border-color: black; border-collapse: collapse;}
TH {border-width: 1px; padding: 3px; border-style: solid; border-color: black; background-color: #6495ED;}
TD {border-width: 1px; padding: 3px; border-style: solid; border-color: black;}
</style>
"@
#Create HTML-table from the object
$Body = $tableInfo | ConvertTo-Html -head $Header
我已经向函数添加了RunOnStartup = false,没有区别。好像它被警报触发了三次。但是警报仅触发一次。
DATE (UTC) SUCCESS RESULT CODE DURATION (MS)
2019-11-18 20:31:16.092 204 799.4648
2019-11-18 20:29:32.032 204 23197.282
2019-11-18 20:29:17.956 204 41919.4075
答案 0 :(得分:1)
好吧,这是经过长时间使用Azure支持后的更新。如果有人到这里结束。
使用Azure App Function的Azure警报操作组的核心是Webhook调用。这意味着它具有与常规Webhook相同的限制/约束。 参见Microsoft docs
10秒后重试,再过100秒后重试。如果您在消耗时使用Azure应用功能,则应用功能可能需要更长的时间才能冷启动。这意味着它最多可以被调用三次,因为即使冷启动该函数需要花费时间,该应用程序函数也会在每次调用时运行(有时它启动得更快,您只能运行两次,而如果已经运行,则可以运行一次) )。
取决于您正在执行的操作,这可能是一个问题。我可能的解决方案是粗体中Azure支持的建议(请注意,我的建议会产生费用)