Backstage 后端如何启用 OpenTelemetry 追踪与指标导出?

发布时间:2026/11/12 8:11:41

Backstage 后端如何启用 OpenTelemetry 追踪与指标导出? Backstage 后端如何启用 OpenTelemetry 追踪与指标导出【免费下载链接】backstageBackstage is an open framework for building developer portals项目地址: https://gitcode.com/GitHub_Trending/ba/backstageBackstage 的各个组件如 catalog通过 OpenTelemetry API 上报 traces 和 metrics但 Backstage 本身不负责初始化 OpenTelemetry SDK——你需要在自己的后端包里安装 SDK 与 exporter、创建 instrumentation 文件并在后端启动前加载它。完成后指标可以通过 Prometheus exporter 在http://localhost:9464/metrics暴露trace 可以通过 OTLP/HTTP exporter 推送到 Jaeger 等接收端。本文基于 Backstage 官方教程 Setup OpenTelemetry走一遍从安装依赖到本地验证、再到 Docker 生产配置的完整路径。原理为什么必须用--require加载有一个关键顺序约束NodeSDK 和自动插桩必须在导入任何业务库之前初始化否则 Express 等库的调用不会被自动创建 span。这就是教程要求在启动 Node 进程时使用--require参数提前加载 instrumentation 文件的原因本文的本地开发和 Docker 两条路径都围绕这一点展开。安装依赖在仓库根目录执行yarn --cwd packages/backend add \ opentelemetry/sdk-node \ opentelemetry/auto-instrumentations-node \ opentelemetry/exporter-prometheus \ opentelemetry/exporter-trace-otlp-http其中sdk-node提供 NodeSDKauto-instrumentations-node会为 Express 等库自动创建 spanexporter-prometheus用于指标导出exporter-trace-otlp-http用于将 trace 通过 OTLP/HTTP 协议推送到接收端。教程以 Prometheus Jaeger 作为演示组合你可以按自己的技术栈替换 exporter但依赖安装、instrumentation 文件和--require加载这三步结构不变。作为版本参考本仓库 packages/backend/package.json 当前使用的版本是opentelemetry/sdk-node ^0.221.0、opentelemetry/auto-instrumentations-node ^0.79.0、opentelemetry/exporter-prometheus ^0.221.0、opentelemetry/api ^1.9.0。创建 instrumentation.js在packages/backend/src下创建instrumentation.js文件内容如下来自教程的完整示例可直接使用// Prevent from running more than once (due to worker threads) const { isMainThread } require(node:worker_threads); if (isMainThread) { const { NodeSDK } require(opentelemetry/sdk-node); const { getNodeAutoInstrumentations, } require(opentelemetry/auto-instrumentations-node); const { PrometheusExporter } require(opentelemetry/exporter-prometheus); const { OTLPTraceExporter, } require(opentelemetry/exporter-trace-otlp-http); // By default exports the metrics on localhost:9464/metrics const prometheusExporter new PrometheusExporter(); // We post the traces to localhost:4318/v1/traces const otlpTraceExporter new OTLPTraceExporter({ // Default Jaeger URL trace endpoint. url: http://localhost:4318/v1/traces, }); const sdk new NodeSDK({ metricReader: prometheusExporter, traceExporter: otlpTraceExporter, instrumentations: [getNodeAutoInstrumentations()], }); sdk.start(); }两点说明开头的isMainThread判断是为了防止 worker 线程导致 SDK 重复初始化不要省略。OTLPTraceExporter的url是 Jaeger 的默认 trace 接收端点如果你的接收端不同需要替换getNodeAutoInstrumentations()会启用一组自动插桩教程提醒按需裁剪避免启用用不到的插桩。本仓库自带了一份只启用指标导出的参考实现 packages/backend/src/instrumentation.js它只配置了PrometheusExportertraceExporter一行处于注释状态。如果你只需要 Prometheus 抓指标、暂不推 trace可以参考这份更精简的写法要同时导出 trace则按上面的教程版本补全 OTLP exporter。本地开发接入 start 脚本并验证教程要求修改packages/backend/package.json的start脚本加上--require参数scripts: { start: backstage-cli package start --require ./src/instrumentation.js, ... }本仓库 packages/backend/package.json 中的 start 脚本已经是这个形态说明教程路径与仓库实际配置一致。接下来按常规方式启动实例yarn start验证指标导出打开http://localhost:9464/metrics能看到 Prometheus 格式的指标即表示 PrometheusExporter 工作正常。验证 trace 导出trace 被推送到http://localhost:4318/v1/traces需要在接收端确认。若按教程使用 Jaeger可在 Jaeger UI 中查看由自动插桩和 Backstage 组件产生的 span。可选用本地 Prometheus 抓取指标仓库提供了示例抓取配置 packages/backend/prometheus.yml抓host.docker.internal:9464该目标地址针对 Docker for MacOS其他 OS 和 Docker 引擎可能要换 host 地址。在 Backstage 根目录执行以下命令会启动一个本地 Prometheus 容器监听 9090 端口docker run --mount typebind,source./packages/backend/prometheus.yml,destination/etc/prometheus/prometheus.yml --publish published9090,target9090,protocoltcp prom/prometheus启动后访问http://localhost:9090即可查询抓到的指标packages/backend的start:prometheus脚本执行的也是同一条命令。可选调整直方图分桶ViewsOpenTelemetry 默认直方图分桶单位是毫秒但 Catalog 处理流程产生的直方图指标单位是秒分桶可能对不上。教程建议用 Views 功能调整聚合方式以下两个片段均为文档示例演示整体替换与针对性调整两种写法注意它们是 NodeSDK 构造参数片段的示意View、ExplicitBucketHistogramAggregation的引入方式参照主代码块中的 require 写法补齐// 文档示例所有直方图使用同一套分桶 const prometheus new PrometheusExporter(); const sdk new NodeSDK({ metricReader: prometheus, views: [ new View({ instrumentName: catalog.test, aggregation: new ExplicitBucketHistogramAggregation([ 0.01, 0.1, 0.5, 1, 5, 10, 25, 50, 100, 500, 1000, ]), }), ], });// 文档示例更有针对性的分桶 const prometheus new PrometheusExporter(); const sdk new NodeSDK({ metricReader: prometheus, views: [ new View({ instrumentName: catalog.test, aggregation: new ExplicitBucketHistogramAggregation([ 0, 0.01, 0.05, 0.1, 0.25, 0.5, 1, 2, 5, 10, 30, 60, 120, 300, 1000, ]), }), ], });生产环境Docker 构建接入Docker 部署需要两处改动在.dockerignore中加一行防止构建时把 instrumentation 文件过滤掉前提是你在用推荐的.dockerignore配置!packages/backend/src/instrumentation.js在Dockerfile中把instrumentation.js拷进工作目录根并在 CMD 中加--requireCOPY --chown${NOT_ROOT_USER}:${NOT_ROOT_USER} packages/backend/src/instrumentation.js ./ CMD [node, --require, ./instrumentation.js, packages/backend, --config, app-config.yaml]对照本仓库的 packages/backend/Dockerfile当前 CMD 是[node, packages/backend, --config, app-config.yaml]既没有拷贝 instrumentation.js也没有--require参数——也就是说示例镜像默认不带 OpenTelemetry 导出需要按教程自行补上这两处。如果运行时需要开关或调整某些 OpenTelemetry 行为可以使用 OpenTelemetry SDK 支持的标准环境变量来配置。指标或 trace 不生效时的排查教程给出的诊断手段是打开 OpenTelemetry 自带的 debug 日志。先安装 API 包yarn --cwd packages/backend add opentelemetry/api然后在instrumentation.js中sdk.start()调用之前加入const { diag, DiagConsoleLogger, DiagLogLevel } require(opentelemetry/api); diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.DEBUG);这样 OpenTelemetry 会输出 debug 日志帮助判断是 SDK 没启动、exporter 配置错误还是数据没被采集。教程明确不建议在生产环境保留这段代码因为日志密度太高。启动后应该能在指标端点看到什么Prometheus exporter 启动后http://localhost:9464/metrics会暴露 Backstage 内置的一组指标教程列出的完整清单catalog_entities_countcatalog 中实体总数catalog_registered_locations_count已注册 location 总数catalog_relations_count实体间关系总数catalog.processed.entities.count已处理实体数catalog.processing.duration完整处理流程耗时catalog.processors.durationcatalog 处理器执行耗时catalog.processing.queue.delay调度处理与实际开始处理之间的延迟catalog.stitched.entities.count已 stitched 实体数catalog.stitching.duration完整 stitching 流程耗时catalog.stitching.queue.length当前 stitching 队列长度catalog.stitching.queue.delay调度 stitching 与开始 stitching 之间的延迟scaffolder.task.count/scaffolder.task.duration任务运行次数与耗时scaffolder.step.count/scaffolder.step.duration步骤运行次数与耗时backend_tasks.task.runs.count任务总运行次数backend_tasks.task.runs.duration任务运行耗时直方图backend_tasks.task.runs.started各任务taskId标签最近一次启动的 Unix 时间秒backend_tasks.task.runs.completed各任务最近一次完成的 Unix 时间秒具体能收到哪些指标取决于你安装了哪些插件及其版本。与插件级 Metrics / Tracing 服务的关系Backstage 还内置了 alpha 阶段的 Metrics Service 和 Tracing Service供后端插件发出应用级指标和 span例如处理器处理了多少实体、单个任务执行细节。两者都不初始化 OpenTelemetry SDK依赖本文配置的 SDK、exporter 和自动插桩先就绪自动插桩负责基础设施层信号HTTP 请求数与耗时等这两个服务负责只有插件自身能提供的应用级信号。所以完成本文的 SDK 接入是插件级指标和 trace 上报的前提。生产部署的监控视角关键告警指标、健康检查端点等可继续参考 Monitoring your deployment。【免费下载链接】backstageBackstage is an open framework for building developer portals项目地址: https://gitcode.com/GitHub_Trending/ba/backstage创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/10 11:02:41

SadTalker 10 分钟跑通:语音驱动人脸动画新手指南

SadTalker 10 分钟跑通:语音驱动人脸动画新手指南 【免费下载链接】SadTalker [CVPR 2023] SadTalker:Learning Realistic 3D Motion Coefficients for Stylized Audio-Driven Single Image Talking Face Animation 项目地址: https://gitcode.com/Git…

2026/11/12 8:11:40

基于以太坊的众筹Dapp开发实战:从合约设计到测试网部署

简介:这是一份基于以太坊的 DApp 众筹项目完整毕业设计/课程设计资料包,面向区块链方向在校生、毕业设计选题者及希望快速上手 Solidity 与 Web3 开发的学习者,解决从智能合约编写到前端交互演示的落地难题。资源共 31 个文件,包含…

2026/11/12 8:09:30

外省电工证能转过来吗?内部消息告诉你纸板电工证怎么考

外省电工证能转过来吗?内部消息告诉你纸板电工证怎么考 之前考的证在外省能不能转过来?这几乎是每个持证人心里的疑问,尤其是像南阳这样的应届工程类毕业生,刚刚步入职场,手里有个纸板电工证,可能就意味着多一份工作机会,少一份求职焦虑。但问题来了,…

2026/11/12 8:09:30

你考的电工证是哪种郑州报考避坑指南

你考的电工证是哪种郑州报考避坑指南 实操考试心里没底怕挂科?这是很多准备考电工证的朋友心里的真实想法。尤其是在郑州,越来越多的建筑、电力、维修等行业从业者开始关注特种作业证,尤其是电工证。但很多人对“你考的电工证是哪种”这个问题并不清楚,导…

2026/11/12 8:09:30

河北维修电工证查询良心建议:实操考试心里没底怕挂科?

河北维修电工证查询良心建议:实操考试心里没底怕挂科? 实操考试心里没底怕挂科?你不是一个人,很多在河北准备维修电工证考试的小伙伴都遇到过这种情况。尤其是安阳水利工程从业者,工作性质决定了必须持证上岗,但实操考试的流程、内容、评分标准却常常让…

2026/11/12 8:09:29

退役特种兵搬运工怎么报名特种作业证?实操考试心里没底怕挂科

退役特种兵搬运工怎么报名特种作业证?实操考试心里没底怕挂科 实操考试心里没底怕挂科,这事儿我懂,尤其是像你这种退役特种兵搬运工,虽然有部队经验,但特种作业证的考试内容和流程,跟部队训练可不一样。很多人在报名前都会担心自己能不能过,能不能顺利…

2026/11/12 8:04:29

孝感大悟电工证多久拿证?找工作的刚需怎么解决

孝感大悟电工证多久拿证?找工作的刚需怎么解决 你还在为没证耽误找工作发愁?尤其是像你这样急需特种作业证才能上岗的求职者,孝感大悟电工证成了你必须拿下的一张通行证。但你知道 多久拿证 、怎么高效拿到、考试难不难吗?别急,下面给你全盘托出。…

2026/11/11 12:42:59

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/12 0:04:01

工地太忙根本没时间复习考试?学习电工证到哪里学通过率揭秘

工地太忙根本没时间复习考试?学习电工证到哪里学通过率揭秘 工地太忙根本没时间复习考试?你不是一个人。作为一名在南阳卧龙区干了七八年市政公用工程的电工,我深知这个问题的现实性。电工证不仅是工作的“入场券”,更是职业发展的“通行证”,但备考过程…

2026/11/12 0:04:01

双流电工证考别怕挂科!郑州报考避坑指南全攻略

双流电工证考别怕挂科!郑州报考避坑指南全攻略 实操考试心里没底怕挂科?双流电工证考在郑州报名,很多人因为不了解流程、准备不充分,白白浪费时间和金钱。作为三门峡应届工程类毕业生,我也曾经历过这样的焦虑。今天就从零开始,手把手教你如何避开郑州报…

2026/11/12 0:04:01

之前考的证在外省能不能转过来 怎么报名考电工证培训价格多少

之前考的证在外省能不能转过来 怎么报名考电工证培训价格多少 之前考的证在外省能不能转过来?这个问题确实让不少准备换城市工作的朋友犯了难,尤其像电工证这种实操性很强的证书,很多人担心跨省后证书能不能继续用。其实,只要符合相关流程,是可以顺利转…

2026/11/11 20:27:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/10 10:29:37

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑