appdynamics
Version:
Performance Profiler and Monitor
89 lines (71 loc) • 2.92 kB
JavaScript
;
const opentelemetry_api = require('@opentelemetry/api');
const { DiagConsoleLogger, DiagLogLevel, diag } = require('@opentelemetry/api');
const { logs, SeverityNumber } = require('@opentelemetry/api-logs');
const { LoggerProvider, ConsoleLogRecordExporter, SimpleLogRecordProcessor, BatchLogRecordProcessor} = require('@opentelemetry/sdk-logs');
const { OTLPLogExporter } = require('@opentelemetry/exporter-logs-otlp-proto');
const { SemanticResourceAttributes } = require('@opentelemetry/semantic-conventions');
const { Resource } = require('@opentelemetry/resources');
const url = require('url');
module.exports = OtelLoggerProvider;
function OtelLoggerProvider(logger) {
this.ot_api = opentelemetry_api;
this.logger = logger;
}
OtelLoggerProvider.prototype.register = function(config, containerId) {
const collectorOptions = {};
if (config.openTelemetryLogger) {
if (config.openTelemetryLogger.collector) {
Object.assign(collectorOptions, config.openTelemetryLogger.collector);
var urlconfig = collectorOptions.url;
this.logger.debug('Exporter using config ' + JSON.stringify(collectorOptions));
try {
url.parse(urlconfig);
} catch (e) {
this.logger.error('Collector url must be in <host>:<port> format');
return false;
}
}
}
// Optional and only needed to see the internal diagnostic logging (during development)
diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.DEBUG);
const resource = Resource.default().merge(new Resource({
[SemanticResourceAttributes.SERVICE_NAME]: config.tierName,
[SemanticResourceAttributes.SERVICE_NAMESPACE]: config.applicationName,
[SemanticResourceAttributes.SERVICE_INSTANCE_ID]: config.nodeName,
[SemanticResourceAttributes.CONTAINER_ID]: containerId
}));
const loggerProvider = new LoggerProvider({
resource: resource,
});
if(config.openTelemetryLogger.debug) {
loggerProvider.addLogRecordProcessor(
new SimpleLogRecordProcessor(new ConsoleLogRecordExporter())
);
}
const loggerExporter = new OTLPLogExporter(collectorOptions);
loggerProvider.addLogRecordProcessor(
new BatchLogRecordProcessor(loggerExporter)
);
logs.setGlobalLoggerProvider(loggerProvider);
this.logger = logs.getLogger('Appdynamics', '1.0.0');
return true;
};
OtelLoggerProvider.prototype.emit = function(txn, btId, obj, filteredMsg, allowedLevel) {
const severityNumber = SeverityNumber[obj.level.toUpperCase()];
if(severityNumber < allowedLevel) {
return;
}
const attributes = {
'severity': obj.level.toUpperCase(), // obj
'appd.bt.id': btId, // transaction
'appd.bt.name': txn.name, // transaction
'appd.request.guid': txn.guid // transaction
};
this.logger.emit({
severityNumber: severityNumber,
severityText: obj.level.toUpperCase(),
body: filteredMsg,
attributes: attributes,
});
};