Merge pull request #10227 from overleaf/spd-td-opentelementry

Add opentelemetry to dev environment

GitOrigin-RevId: 31a8234197337a264412b411429692525793c8b0
This commit is contained in:
Simon Detheridge
2022-10-31 14:37:49 +00:00
committed by Copybot
parent 5b9261e13e
commit 3d9c8f80f4
11 changed files with 5485 additions and 39 deletions

View File

@@ -3,6 +3,7 @@ const os = require('os')
const ExpressCompression = require('compression')
const promClient = require('prom-client')
const promWrapper = require('./prom_wrapper')
const tracing = require('./tracing')
const DEFAULT_APP_NAME = 'unknown'
@@ -29,6 +30,9 @@ function configure(opts = {}) {
*/
function initialize(appName, opts = {}) {
appName = appName || DEFAULT_APP_NAME
if (tracing.tracingEnabled()) {
tracing.initialize(appName)
}
configure({ ...opts, appName })
collectDefaultMetrics({ timeout: 5000, prefix: '' })
promWrapper.setupSweeping()

View File

@@ -8,8 +8,17 @@
},
"dependencies": {
"@google-cloud/debug-agent": "^5.1.2",
"@google-cloud/opentelemetry-cloud-trace-exporter": "^1.1.0",
"@google-cloud/profiler": "^4.1.3",
"@google-cloud/trace-agent": "^5.1.1",
"@opentelemetry/api": "^1.0.4",
"@opentelemetry/auto-instrumentations-node": "^0.28.0",
"@opentelemetry/exporter-collector": "^0.25.0",
"@opentelemetry/exporter-jaeger": "^1.2.0",
"@opentelemetry/exporter-trace-otlp-http": "^0.28.0",
"@opentelemetry/resources": "^1.2.0",
"@opentelemetry/sdk-node": "^0.28.0",
"@opentelemetry/semantic-conventions": "^1.2.0",
"compression": "^1.7.4",
"prom-client": "^11.1.3",
"yn": "^3.1.1"

View File

@@ -0,0 +1,58 @@
const opentelemetry = require('@opentelemetry/sdk-node')
const {
getNodeAutoInstrumentations,
} = require('@opentelemetry/auto-instrumentations-node')
const {
diag,
DiagConsoleLogger,
DiagLogLevel,
trace,
} = require('@opentelemetry/api')
const { JaegerExporter } = require('@opentelemetry/exporter-jaeger')
const { Resource } = require('@opentelemetry/resources')
const {
SemanticResourceAttributes,
} = require('@opentelemetry/semantic-conventions')
const GCP = require('@google-cloud/opentelemetry-cloud-trace-exporter')
let tracer
function tracingEnabled() {
return process.env.GCP_OPENTELEMETRY || process.env.JAEGER_OPENTELEMETRY
}
function initialize(appName) {
diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.INFO)
const resource = new Resource({
[SemanticResourceAttributes.SERVICE_NAME]: appName,
[SemanticResourceAttributes.SERVICE_NAMESPACE]: 'Overleaf',
'host.type': 'VM',
})
let exporter
if (process.env.GCP_OPENTELEMETRY) {
exporter = new GCP.TraceExporter()
} else if (process.env.JAEGER_OPENTELEMETRY) {
exporter = new JaegerExporter({ host: process.env.JAEGER_HOST || 'jaeger' })
} else {
return
}
const sdk = new opentelemetry.NodeSDK({
traceExporter: exporter,
logger: console,
instrumentations: [getNodeAutoInstrumentations()],
resource,
})
tracer = trace.getTracer(appName)
sdk.start()
}
function getTracer() {
return tracer
}
module.exports = { initialize, getTracer, tracingEnabled }