监控 Node.js Azure Functions
编辑监控 Node.js Azure Functions编辑
Node.js APM 代理可以跟踪 Azure Functions 应用中的函数调用。
先决条件编辑
您需要一个 APM 服务器来发送 APM 数据。如果您还没有设置,请按照 APM 快速入门 进行操作。您将需要您的 APM 服务器 URL 和 APM 服务器 密钥令牌(或 API 密钥)来配置下面的 APM 代理。
您还需要一个要监控的 Azure Function 应用。如果您没有现有的,可以按照 此 Azure 指南 创建一个。
如果您按照此 Azure 指南中的建议使用 func init --javascript ...
,则建议您通过运行 npm uninstall azure-functions-core-tools
卸载 azure-functions-core-tools
依赖项,并 单独安装。将 azure-functions-core-tools
作为 package.json 中的“devDependency”会导致部署过大,发布速度非常慢,并且会耗尽 Azure Function 应用 VM 的磁盘空间。
您还可以查看并使用此 已集成 Elastic APM 的 Azure Functions 示例应用。
步骤 1:添加 APM 代理依赖项编辑
将 elastic-apm-node
模块添加为应用程序的依赖项
npm install elastic-apm-node --save # or 'yarn add elastic-apm-node'
步骤 2:启动 APM 代理编辑
为了使 APM 代理能够检测 Azure Functions,需要在 Azure 主机启动其 Node.js 工作进程时启动它。最好的方法是使用应用程序级入口点(此处 添加了对此的支持)。
-
创建一个模块来启动 APM 代理。例如,位于存储库根目录的名为“initapm.js”的文件
可选的 配置选项 可以在这里添加。
-
在 package.json 中添加一个指向应用程序初始化文件的“main”条目。
... "main": "initapm.js", ...
如果您的应用程序已经有一个“main”初始化文件,您可以改为将
require('elastic-apm-node').start()
添加到该文件的顶部。
步骤 3:配置 APM 代理编辑
可以使用 .start()
方法的选项或环境变量来 配置 APM 代理。使用环境变量允许使用 Azure 门户中的应用程序设置,这允许隐藏值并在无需重新部署代码的情况下更新设置。
在 Azure 门户中打开 Function 应用的“配置”>“应用程序设置”,并设置
ELASTIC_APM_SERVER_URL: <your APM server URL from the prerequisites step> ELASTIC_APM_SECRET_TOKEN: <your APM secret token from the prerequisites step>
例如
对于通过 func start
进行的本地测试,您可以在终端或“local.settings.json”文件中设置这些环境变量。有关支持的配置变量的完整详细信息,请参阅 代理配置指南。
步骤 4:(重新)部署您的 Azure Function 应用编辑
func azure functionapp publish <APP_NAME>
现在,当您调用 Azure Functions 时,您应该会在 Kibana 的 APM 应用中看到您的应用程序显示为服务,并看到函数调用的 APM 事务。跟踪数据会在一段时间后转发到 APM 服务器,因此请等待一分钟左右以显示数据。
限制编辑
当处理程序出现 uncaughtException
或 unhandledRejection
时,此检测不会向 APM 服务器发送 APM 事务或错误。Azure Functions Node.js 参考 有一个部分 介绍了避免这些情况的最佳实践。
由于担心无意中增加 Azure Functions 成本(对于消费计划),Azure Functions 检测目前不在后台收集系统指标。
过滤敏感信息编辑
默认情况下,Node.js 代理会在将错误和指标发送到 Elastic APM 服务器之前过滤常见的敏感信息。
您可以调整这些默认值或删除您不想发送到 Elastic APM 的任何信息
- 默认情况下,Node.js 代理不会记录 HTTP 请求的正文。要启用此功能,请使用
captureBody
配置选项 - 默认情况下,Node.js 代理会过滤已知包含敏感信息的某些 HTTP 标头。要禁用此功能,请使用
sanitizeFieldNames
配置选项 - 要应用自定义过滤器,请使用 过滤 函数之一
兼容性编辑
有关详细信息,请参阅 支持的技术。
故障排除编辑
如果您无法使 Node.js 代理按预期工作,请按照 故障排除指南 进行操作。