对 Azure Functions 中的 Node.js 应用进行故障排除

重要

本文的内容根据你在此页顶部的选择器中选择的 Node.js 编程模型而异。 v4 模型目前处于预览状态,旨在为 JavaScript 和 TypeScript 开发人员提供更为灵活和直观的体验。 在升级指南中详细了解 v3 和 v4 之间的差异。

本文提供了有关 Node.js 函数应用中常见方案故障排除的指南。

Azure 门户中的“诊断和解决问题”选项卡是监视和诊断与应用程序相关的可能问题的有用资源。 它还会根据诊断为问题提供潜在的解决方案。

另一个有用的资源是 Azure 门户中 Application Insights 实例的“日志”选项卡,使你可以运行自定义 KQL 查询。 以下示例查询显示如何查看过去一天应用的错误和警告:

let myAppName = "<your app name>";
let startTime = ago(1d);
let endTime = now();
union traces,requests,exceptions
| where cloud_RoleName =~ myAppName
| where timestamp between (startTime .. endTime)
| where severityLevel > 2

如果这些资源无法解决问题,以下部分提供了有关特定应用程序问题的建议:

找不到任何函数

如果在日志中看到以下任何错误:

找不到 HTTP 触发器。

找不到作业函数。 尝试公开作业类和方法。 如果使用绑定扩展(例如 Azure 存储、ServiceBus、Timers 等),请确保你已在启动代码(例如 builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers() 等)中调用扩展的注册方法。

请尝试以下修补程序:

  • 在本地运行时,请确保使用 Azure Functions Core Tools v4.0.5382 或更高版本。
  • 在 Azure 中运行时:
    • 请确保使用 Azure Functions 运行时版本 4.25 或更高版本。

    • 请确保使用的是 Node.js v18 或更高版本。

    • 将应用设置 FUNCTIONS_NODE_BLOCK_ON_ENTRY_POINT_ERROR 设置为 true。 建议对所有模型 v4 应用使用此设置,并确保所有入口点错误在 application Insights 日志中可见。 有关详细信息,请参阅 Azure Functions 的应用设置参考

    • 检查函数应用日志中是否存在入口点错误。 以下示例查询显示如何查看过去一天应用的入口点错误:

      let myAppName = "<your app name>";
      let startTime = ago(1d);
      let endTime = now();
      union traces,requests,exceptions
      | where cloud_RoleName =~ myAppName
      | where timestamp between (startTime .. endTime)
      | where severityLevel > 2
      | where message has "entry point"
      
  • 确保应用具有所需的文件夹结构,根目录中有 host.json,每个函数都有一个包含 function.json 文件的文件夹。

Undici 请求不是构造函数

如果函数应用日志中出现以下错误:

System.Private.CoreLib:执行函数时出现异常:Functions.httpTrigger1。 System.Private.CoreLib:结果:故障异常:undici_1.Request is not a constructor

请确保使用 Node.js 版本 18.x 或更高版本。

未能检测到 Azure Functions 运行时

如果函数应用日志中出现以下错误:

警告:未能检测到 Azure Functions 运行时。 将“@azure/functions”包切换到测试模式 - 并非所有功能都受支持。

查看 package.json 文件中对 applicationinsights 的引用,并确保版本为 ^2.7.1 或更高版本。 更新版本后,运行 npm install

从 Microsoft 获取帮助

可以通过以下方式之一从 Microsoft 获取更多帮助:

  • Azure Functions Node.js 存储库中搜索已知问题。 如果你没有看到你的问题被提及,请创建一个新问题,并告诉我们发生了什么情况。
  • 如果无法使用本指南诊断问题,Microsoft 支持工程师可帮助诊断应用程序的问题。 Microsoft 提供各种支持计划。 在 Azure 门户中的函数应用页面的“支持 + 故障排除”部分中创建支持工单。

后续步骤