【问题标题】:Azure function TimerTrigger result code in Application Insights is always successApplication Insights 中的 Azure 函数 TimerTrigger 结果代码始终成功
【发布时间】:2019-01-31 12:37:08
【问题描述】:

我有一个简单的 C# Azure 函数,它使用计时器触发器每 X 分钟运行一次。没有输出绑定。

在应用洞察中,函数总是成功结果代码为0:

[尽管多次调用 TraceWriter 的 .Error()。]

我想在应用程序洞察中获得正确的最终状态,但我不知道该怎么做。文档从不谈论这个:-/ 有人可以指导我如何在 C# 中做到这一点吗?

我尝试设置Environment.ExiCode,但结果相同。 我还尝试将返回类型更改为int,但随后不再调用该函数。我想是因为它是 azure 函数本身的 declare an output binding 方式。

这是我的功能:

[FunctionName("SendToOfflineArchive")]
public static void Run([TimerTrigger("%TimerInterval%")]TimerInfo myTimer, TraceWriter log)
{
    log.Info($"C# Timer trigger function executed at: {DateTime.Now}");

    // do stuff

    int nbErrors = 7;
    //return nbErrors;
}

如果结果代码不是 0 那就太好了...就像错误数(整数)一样。

【问题讨论】:

  • 您好 Thibault,您是如何使用 Visual Studio 或直接在门户网站上创建此功能的?我认为 TraceWriter 是旧签名。看看这个docs.microsoft.com/en-us/azure/azure-functions/…
  • 这是一个 7 个月的“旧”项目,使用 Functions 1.x 并且工作正常。但是版本 2.x 也有同样的问题。无论如何,记录器不是问题!

标签: c# azure azure-functions azure-application-insights


【解决方案1】:

如果 Azure 函数抛出异常,则认为它失败(AF 和 AI 之间存在嵌入式集成,它认为成功执行的函数是“成功”)。如果启用了日志转发,将错误记录为跟踪应该会在 Application Insights 中产生相应的跟踪消息。

【讨论】:

  • 好主意!它起作用了:tof.cx/images/2019/02/01/875b772896503946c182d189aacd30b3.png 是的,日志转发已启用(实际上这是在 azure 函数中拥有执行历史的唯一方法),我在调用详细信息中看到了对 .Error() 的调用。我的观点是关于全局结果代码状态(见截图)。如何设置结果码?
  • 在 Azure Functions v2 you should be able 中配置 Telemetry Initializer(接收所有通过的遥测数据)并根据您遇到的异常修改 RequestTelemetry 的响应代码,我猜。类似if (telemetry is RequestTelemetry request) {request.ResponseCode = ...}
猜你喜欢
  • 2020-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多