如何使用 New Relic 跟踪解析服务器的类名?

Man*_*uel 2 newrelic parse-platform parse-server

添加 New Relic APM 跟踪 Parse Server 时,对 Cloud Code 函数和类的调用显示为:

/parse/classes/:className
/parse/functions/:functionName
Run Code Online (Sandbox Code Playgroud)

相反,我想将它们显示为:

/parse/classes/myClass
/parse/functions/myFunction
Run Code Online (Sandbox Code Playgroud)

对于 Cloud Code 函数调用,我可以设置事务名称:

Parse.Cloud.define("myFunction", async(request) => {
    newrelic.setTransactionName("myFunction");
    //...
});
Run Code Online (Sandbox Code Playgroud)

但是如何跟踪所有对类的调用的名称?

Man*_*uel 5

New Relic Node.js 代理具有用于无法关闭的事务的自动命名功能*。

文档

关于 New Relic 对 Express、Restify 或 Hapi 的支持,唯一需要了解的重要一点是,如果您对它提供的名称不满意,您可以使用下面描述的 API 调用来提供更具描述性的名称。

因此,解决方案是通过将自定义名称规则添加到newrelic.js. 诀窍是使用正则表达式组替代作为名称。

rules: {
    name: [
        // post /parse/classes/:classeName
        // get /parse/classes/:classeName/:objectId
        {
            pattern: '^(\/parse\/classes\/[_0-9A-Za-z]*)(\/.*)*',
            name: '\\1'
        },
        // post /parse/functions/:functionName
        {
            pattern: '^(\/parse\/functions\/.*)$',
            name: '\\1'
        },
        // post /parse/files/:filename
        // get /parse/files/:appId/:filename
        {
            pattern: '^(\/parse\/files)\/.*$',
            name: '\\1'
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

上面的模式按类名对调用进行分组,忽略有时附加的对象 ID。这使得也没有必要setTransactionName为每个 Cloud Code 函数添加一个。


*可以为 Java 代理关闭该选项,但对于 Node.js 代理似乎不存在该选项。