问题描述
在 Nuxtjs 项目中配置/启用 Elastic APM 代理的正确方法是什么?
我为自定义 NodeJS 应用程序引用了 this documentation。关键要点是:
在您需要任何其他服务之前启动代理很重要 Node.js 应用程序中的模块 - 即在 http 之前和在你的 路由器等
我在 nuxt.config.js 中添加了以下代码段,但 APM 代理未启动或工作。我在应用日志中没有看到任何错误。
var apm = require('elastic-apm-node').start({
serviceName: 'nuxt-app',serverUrl: 'http://ELK_APM_SERVER:8200'
})
有没有其他方法可以做到这一点?
解决方法
根据我所看到的,似乎没有“正确”的方法可以使用股票 nuxt
命令行应用程序执行此操作。问题似乎是,虽然 nuxt.config.js
是用户第一次有机会添加一些 javascript,但 nuxt
命令行应用程序在此配置文件 {{1} }.这意味着弹性代理(或任何 APM 代理)没有机会与模块挂钩。
来自 Nuxt 团队的 current recommendations 似乎是
-
通过
手动调用required
nuxt
-r
-
在您选择的框架中跳过
{ "scripts": { "start": "node -r elastic-apm-node node_modules/nuxt/.bin/nuxt" } }
和 use NuxtJS programmatically 作为中间件nuxt
基于 Alan Storm 的回答(来自 Nuxt 团队),我使它工作但稍作修改:
- 我创建了一个名为 nodeApm.js 的文件,在其中添加了以下代码:
const nodeApm = require('elastic-apm-node') if (!nodeApm.isStarted()) { ... // configuration magic }
- 在脚本部分我添加了:
"start": "node -r ./nodeApm.js node_modules/nuxt/.bin/nuxt"