Node.js 应用程序的自定义检测

默认情况下,APM Insight Node.js 代理会捕获传入的 Web 请求,例如 http、https、http2 和其他类似请求。要获得更多粒度,您可以使用自定义检测 API。这有助于您分析应用程序中的特定事务或代码块。

API 及其功能和语法将在下面介绍。

注意:要在 Node.js 应用程序中使用自定义检测,您必须安装 APM Insight 模块。使用以下命令在您的应用程序中加载 APM Insight 模块:

var apminsight = require('apminsight')

API 的

  1. 监控网络/后台事务
  2. 监控自定义组件
  3. 跟踪处理的错误
  4. 检测应用参数
  5. 跟踪自定义参数

监控网页/后台事务:

  • 默认情况下,代理会自动收集传入的 Web 请求并显示在 Web 事务选项卡下。但是,代理不监视其他客户端-服务器通信,如套接字连接。可以使用 API 监控此类事务。
  • 默认情况下,代理不监视后台事务。您可以通过使用下面的 API 检测后台事务来监控它们。
  • 您还可以使用给定的 API 自定义事务的名称或跳过监控的事务。
  • 当您检测 Web 或后台事务时,它们必须跟在End transaction API之后。

用于检测 Web 事务的 API

语法

apminsight.startWebTransaction(txnName, handler)
txnName : string value
handler : handler is the function, that will be executed once txn is created

示例

var apminsight = require('apminsight');
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

/* this request will be collected automatically*/

app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});

/*need to use custom instrumentation for socket communication*/

io.on('connection', function(socket){
apminsight.startWebTransaction('/message', function(){
doSomething()
........ apminsight.endTransaction();
});
});
http.listen(3000);

输出

web transactions

用于检测后台事务的 API

语法

apminsight.startBackgroundTransaction(txnName, handler)
txnName : string value
handler : handler is the function, that will be executed once txn is created

示例

var apminsight = require('apminsight');
function doBackground(){
setInterval( function(){
apminsight.startBackgroundTransaction('routine', function(){
doSomething().........
apminsight.endTransaction();
}
}, 5000);
}

输出

background transactions

更改/自定义事务名称的 API

语法

apminsight.setTransactionName(customTxnName)
cusTxnName : string value

示例

var apminsight = require('apminsight');
var app = require('express')();
var http = require('http').Server(app);

/* this request will be collected automatically with txn name /admin*/

app.get('/admin', function(req, res){

/* txn name will be changed to /homepage*/

apminsight.setTransactionName('/homepage');
res.sendFile(__dirname + '/index.html');
});
http.listen(3000);

忽略事务的 API

语法

apminsight.ignoreCurrentTransaction()

示例

var apminsight = require('apminsight');
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/logout', function(req, res){

/* this request will be ignored */

apminsight.ignoreCurrentTransaction();
res.sendFile(__dirname + '/index.html');
});
http.listen(3000);

结束事务 API

语法

apminsight.endTransaction()

监控自定义组件

代理捕获默认框架组件、类和方法。但是,只能通过使用以下 API 检测用户定义的类和方法来监视它们。这些详细信息可以在 Traces 选项卡下查看。此外,如果在检测的类或方法中调用任何涉及数据库操作的事务,则这些详细信息将反映在“数据库”选项卡中。

用于跟踪自定义组件的 API

语法

apminsight.startTracker(trackerName, componentName, handler, cb)
trackerName : string value
componentName : string value
handler : handler is the function, that will be executed
cb : optional param, if it is present then it will be treated as asynchrous tracker

示例 1 - Without cb:

var apminsight = require('apminsight');
var app = require('express')();
var http = require('http').Server(app);
app.get('/', function(req, res){
apminsight.startTracker('readFile', 'FS', function(){
res.sendFile(__dirname + '/index.html');
});
});
http.listen(3000);

示例 2 - With cb:

var apminsight = require('apminsight');
var app = require('express')();
var http = require('http').Server(app);
app.get('/', function(req, res){
apminsight.startTracker('readFile', 'FS', function(cb){
doSomething()......
cb();
}, function(){

// send response

});
});
http.listen(3000);

输出

components

跟踪处理的错误

通常,代理会捕获所有异步 i/o 错误和未处理的错误。此 API 可用于处理错误。例如,如果您使用 try-catch 方法处理了错误,则可以通过此 API 通知此类错误,并且通知的错误与其对应的事务相关联。可以在错误和跟踪选项卡下查看捕获的错误。

用于跟踪已处理错误的 API

语法

apminsight.trackError(err)
err : Error object

示例

var apminsight = require('apminsight');
var app = require('express')();
var http = require('http').Server(app);

/* this request will be collected automatically*/

app.get('/', function(req, res){
try{
fetchAndSendResponse();
}catch(err){
apminsight.trackError(err)
sendErrorResponse();
}
});
http.listen(3000);

输出

exceptions

自定义应用参数

使用 App 参数,您可以监控重要参数,例如变量的大小和频率或应用程序中的操作。要了解 App 参数的工作原理,请参阅此处

用于检测应用程序参数的 API

incrementCustomMetric: incrementCustomMetric: 此 API 收集自定义指标的总和。

语法

apminsight.incrementCustomMetric(metricName, metricValue)
metricName : string value
metricValue : optional, if it is not present then metric will incremented by 1

示例

var apminsight = require('apminsight');
var app = require('express')();
var http = require('http').Server(app);

app.get('/buy', function(req, res){
apminsight.incrementCustomMetric('products', req.product.count);
res.sendFile(__dirname + '/index.html');
});
http.listen(3000);

averageCustomMetric: 此 API 收集自定义指标的平均值。

语法

apminsight.averageCustomMetric(metricName, metricValue)

metricName : string value
metricValue : number

示例

var apminsight = require('apminsight');
var app = require('express')();
var http = require('http').Server(app);

app.get('/pay', function(req, res){
apminsight.averageCustomMetric('amount', req.amount);
res.sendFile(__dirname + '/index.html');
});
http.listen(3000);

输出

custom metrics

跟踪自定义参数

要为跟踪赋予上下文意义,您可以添加其他参数来帮助您识别事务跟踪的上下文。 上下文度量可以是任何东西,会话 ID、用户 ID 或某些方法参数,它们可以帮助您识别有关事务跟踪的特定信息。 一个事务跟踪最多可以添加 10 个参数,这些参数可以在跟踪汇总下查看

跟踪自定义参数的语法

语法:

apminsight.addParameter("key", value);

Key - 参数名称

Value - 值的参数。它可以是任何类型,内部代理将它们转换为字符串。


示例


var apminsight = require('apminsight');
var app = require('express')();
var http = require('http').Server(app);
app.get('/', function(req, res){
apminsight.addParameter("User Detail", "APM User");
apminsight.addParameter("User ID", 408);
res.sendFile(__dirname + '/index.html');
});
http.listen(3000);

输出:

添加的参数值将显示在跟踪详情选项卡的自定义参数部分下,如下所示:

custom parameters