UNPKG

appdynamics

Version:

Performance Profiler and Monitor

89 lines (71 loc) 2.92 kB
'use strict'; 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, }); };