NestJS/Elastic apm:代理不记录数据库查询跨度
NestJS/Elastic apm: agent does not record database query spans
我正在使用 elastic apm
分析我的 NestJS
应用程序,我的 apm 代理是 elastic-apm-node
。
我的 ORM 是 typeOrm
,我的数据库是 Oracle
。
我的问题是 apm 代理不记录数据库查询范围,我在 kibana ui 中看不到 数据库查询范围。
谁能帮帮我?
很遗憾,弹性 apm 代理不支持 oracle。你应该包装你的 oracleQueryRunner
以便手动启动和结束代理跨度。将此代码放入您的 main.ts
文件中:
import { OracleQueryRunner } from 'typeorm/driver/oracle/OracleQueryRunner';
const query = OracleQueryRunner.prototype.query;
OracleQueryRunner.prototype.query = async function (...args) {
const span = apm.startSpan('query');
if (span) {
span.type = 'db';
span.action = args[0];
}
const result = await query.bind(this)(...args);
if (span) { span.end(); }
return result;
};
我正在使用 elastic apm
分析我的 NestJS
应用程序,我的 apm 代理是 elastic-apm-node
。
我的 ORM 是 typeOrm
,我的数据库是 Oracle
。
我的问题是 apm 代理不记录数据库查询范围,我在 kibana ui 中看不到 数据库查询范围。 谁能帮帮我?
很遗憾,弹性 apm 代理不支持 oracle。你应该包装你的 oracleQueryRunner
以便手动启动和结束代理跨度。将此代码放入您的 main.ts
文件中:
import { OracleQueryRunner } from 'typeorm/driver/oracle/OracleQueryRunner';
const query = OracleQueryRunner.prototype.query;
OracleQueryRunner.prototype.query = async function (...args) {
const span = apm.startSpan('query');
if (span) {
span.type = 'db';
span.action = args[0];
}
const result = await query.bind(this)(...args);
if (span) { span.end(); }
return result;
};