如何以编程方式获取WebJob的日志?

时间:2015-07-08 20:39:56

标签: .net azure logging monitoring azure-webjobs

我们已经创建了一个Azure WebJob来为我们的WebAPI项目执行一些预定的数据库清理。现在,我们希望在我们自己的管理Web应用程序中显示最新的作业,以监控每天清理的进度。如何获取最新的50个函数调用,包括给定WebJob的相应输出日志和持续时间?

此要求的一些背景知识:

我们提出的清理过程非常简单,但我们怀疑它会在不久的将来开始使我们陷入困境,因此我们希望监控每天运行所需的时间,以便在使用更具可扩展性的方法时主动重新设计它需要。理想情况下,我希望获得最后50次左右的运行并生成一个图表,显示在这段时间内执行所花费的时间。

我们首先想到的是创建我们自己的数据库并用Stopwatch包装每个执行,然后将持续时间保存到我们的数据库。然后我们可以查询这个数据库并以这种方式构建图形。

但由于这是我们第一次使用WebJobs,我们很快发现我们想要记录的大部分内容已经由WebJobs SDK自动记录。开始时间,持续时间,功能名称等等都已存在于日志中,足以让我们自己构建自己的显示器。

问题是如何以适当的格式从我们的MVC项目中查询这些日志。我当然可以直接从blob存储中读取并手动加入数据,但我一直在寻找更高级别的API。对我来说,WebJobs使用的存储容器是一个可能在将来发生变化的实现细节。

在搜索时,我找到了很多方法来获取数据,但我觉得它们都不是我想要的。

  • Get-AzureWebsiteLog PowerShell cmdlet返回作业的一组运行数据。这看起来不错,但是我想直接从.Net调用一些东西,我也希望看到操作的控制台输出,我似乎无法找到带有这个cmdlet的那些。

  • 查询给定作业的日志有a WebAPI。那个似乎返回与PowerShell版本完全相同的响应(PowerShell cmdlet可能在封面下调用相同的REST端点)。所以同样的问题也适用。

通过查看在blob存储帐户上创建的实际文件,我可以通过检查/azure-webjobs-hosts/output-logs文件夹并将其中的id与{{1}上的值相关联来访问每次运行的输出日志。 }文件夹,所以我怀疑它可能以某种方式让他们使用更高级别的API。此外,如果此类API可用,我也不必担心必须为每个API响应创建类型安全模型等等。

3 个答案:

答案 0 :(得分:0)

您可以从任何ftp客户端或通过网络API提取这些文件。

答案 1 :(得分:0)

使用Azure management libraries for .net,您可以查询WebAPI

查看此答案以获取更多信息: Change Azure website app settings from code

答案 2 :(得分:0)

自发布此问题以来,现在已通过JobHost配置公开了TraceWriters集合。

使用该集合,您现在可以将日志写入自定义存储库并查询该日志。

以下是一个示例:https://gist.github.com/aaronhoffman/3e319cf519eb8bf76c8f3e4fa6f1b4ae

相关问题