tracing.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. let tracer
  2. function tracingEnabled() {
  3. return process.env.GCP_OPENTELEMETRY || process.env.JAEGER_OPENTELEMETRY
  4. }
  5. function initialize(appName) {
  6. const opentelemetry = require('@opentelemetry/sdk-node')
  7. const {
  8. getNodeAutoInstrumentations,
  9. } = require('@opentelemetry/auto-instrumentations-node')
  10. const {
  11. diag,
  12. DiagConsoleLogger,
  13. DiagLogLevel,
  14. trace,
  15. } = require('@opentelemetry/api')
  16. const {
  17. OTLPTraceExporter,
  18. } = require('@opentelemetry/exporter-trace-otlp-http')
  19. const { Resource } = require('@opentelemetry/resources')
  20. const {
  21. SemanticResourceAttributes,
  22. } = require('@opentelemetry/semantic-conventions')
  23. const GCP = require('@google-cloud/opentelemetry-cloud-trace-exporter')
  24. diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.INFO)
  25. const resource = new Resource({
  26. [SemanticResourceAttributes.SERVICE_NAME]: appName,
  27. [SemanticResourceAttributes.SERVICE_NAMESPACE]: 'Overleaf',
  28. 'host.type': 'VM',
  29. })
  30. let exporter
  31. if (process.env.GCP_OPENTELEMETRY) {
  32. exporter = new GCP.TraceExporter()
  33. } else if (process.env.JAEGER_OPENTELEMETRY) {
  34. exporter = new OTLPTraceExporter({
  35. url: `http://${process.env.JAEGER_HOST || 'jaeger'}:4318/v1/traces`,
  36. })
  37. } else {
  38. return
  39. }
  40. const sdk = new opentelemetry.NodeSDK({
  41. traceExporter: exporter,
  42. logger: console,
  43. instrumentations: [getNodeAutoInstrumentations()],
  44. resource,
  45. })
  46. tracer = trace.getTracer(appName)
  47. sdk.start()
  48. }
  49. function getTracer() {
  50. return tracer
  51. }
  52. module.exports = { initialize, getTracer, tracingEnabled }