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