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

标签 .net azure logging monitoring azure-webjobs

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

此要求的一些背景:

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

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

但由于这是我们第一次使用 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 与 /azure-webjobs-dashboard/functions/instances/ 文件夹中的值,所以我怀疑有可能以某种方式使用更高级别的 API 来获取它们。另外,如果这样的 API 可用,我就不需要担心必须为每个 API 响应创建类型安全模型以及类似的事情。

最佳答案

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

关于.net - 如何以编程方式获取 WebJob 的日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31303258/

相关文章:

c# - .NET 中的静态类何时加载到内存中?

c# - .NET 世界是否有日志外观?

java - 切入点不适用于 Spring AOP

javascript - 使用 Firefox 将 JavaScript 控制台记录到日志文件中

java - Android Studio 连接到 Azure 数据库

mysql - Azure mySQL 密码已过期

c# - 将 xaml 代码移至 View 模型类

javascript - 在代码隐藏中调用 Web 方法

c# - 是否可以在 C# 6.0 中创建 'self-initializing' 字典扩展方法?

node.js - 浏览器关闭时 Passport session 不会被破坏