将 APM 添加到 NuxtJS 项目的最佳方法是什么

问题描述

在 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 似乎是

  1. 通过 required

    手动调用 nuxt
    -r
  2. 在您选择的框架中跳过 { "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"
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...