查看Kudu Azure WebJobs API文档https://github.com/projectkudu/kudu/wiki/WebJobs-API我看到我可以通过编程方式管理WebJobs。
缺少的是调用连续webjob获取单个调用的详细信息。对于调用,我的意思是单个执行给定消息的函数。
我要做的是,对于进入毒性队列的消息,获取父调用的异常消息。在有毒消息中,我使用json prop $ AzureWebJobsParentId获取父调用的id。
我想通过一个函数来管理毒性队列,该函数通过电子邮件发送错误的详细信息并将消息移到死信队列中。
知道这是否可行?
答案 0 :(得分:5)
Azure WebJobs SDK Core extensions包含ExecutionContext
的绑定,允许您访问函数中特定于调用的系统信息。显示如何访问函数Invocation ID的示例:
public static void ProcessOrder(
[QueueTrigger("orders")] Order order,
TextWriter log,
ExecutionContext context)
{
log.WriteLine("InvocationId: {0}", context.InvocationId);
}
调用ID在仪表板日志中使用,因此以编程方式访问此调用可以将调用与这些日志相关联。
创建一个只处理一个函数错误的function specific error handler。这是通过基于“ErrorHandler”后缀命名约定来完成的。
public static void ProcessOrderErrorHandler(
[ErrorTrigger()] TraceFilter filter,
TextWriter log)
{
var lastMessage = filter.Message;
var lastMessages = filter.GetDetailedMessage(5);
}
public static void ErrorMonitor(
[ErrorTrigger("0:30:00", 10, Throttle = "1:00:00")] TraceFilter filter,
[SendGrid] SendGridMessage message)
{
message.Subject = "WebJobs Error Alert";
message.Text = filter.GetDetailedMessage(5);
}
答案 1 :(得分:1)
目前还没有正式的方法可以做到这一点,但是有一个问题是跟踪暴露稳定的API(C#和REST)以读取各个函数实例:请参阅https://github.com/Azure/azure-webjobs-sdk/issues/880了解状态
答案 2 :(得分:0)
给定WebJobs SDK调用ID,您可以通过WebJobs仪表板访问该执行的详细信息。您可以通过门户中的WebJobs刀片访问仪表板(该链接将位于" LOGS"列中)。
或者在浏览器中,您可以自己构建URL,例如(替换您的应用名称和调用ID):
https://<yourapp>.scm.azurewebsites.net/azurejobs/#/functions/invocations/<invocation-id>
您可以通过手动手动来访问这些详细信息。