tracing.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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 { JaegerExporter } = require('@opentelemetry/exporter-jaeger')
  17. const { Resource } = require('@opentelemetry/resources')
  18. const {
  19. SemanticResourceAttributes,
  20. } = require('@opentelemetry/semantic-conventions')
  21. const GCP = require('@google-cloud/opentelemetry-cloud-trace-exporter')
  22. diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.INFO)
  23. const resource = new Resource({
  24. [SemanticResourceAttributes.SERVICE_NAME]: appName,
  25. [SemanticResourceAttributes.SERVICE_NAMESPACE]: 'Overleaf',
  26. 'host.type': 'VM',
  27. })
  28. let exporter
  29. if (process.env.GCP_OPENTELEMETRY) {
  30. exporter = new GCP.TraceExporter()
  31. } else if (process.env.JAEGER_OPENTELEMETRY) {
  32. exporter = new JaegerExporter({ host: process.env.JAEGER_HOST || 'jaeger' })
  33. } else {
  34. return
  35. }
  36. const sdk = new opentelemetry.NodeSDK({
  37. traceExporter: exporter,
  38. logger: console,
  39. instrumentations: [getNodeAutoInstrumentations()],
  40. resource,
  41. })
  42. tracer = trace.getTracer(appName)
  43. sdk.start()
  44. }
  45. function getTracer() {
  46. return tracer
  47. }
  48. module.exports = { initialize, getTracer, tracingEnabled }