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

发布时间:2026/9/12 16:05:51

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/9/12 16:05:51

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/9/12 16:00:51

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

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

2026/9/12 17:15:55

意见直达小程序,打造一站式服务评价管理平台

好消息!意见直达小程序正式上线!针对企业、物业、园区、企事业单位反馈渠道分散、问题处置不及时、服务无评价、管理无闭环等痛点,全新打造集好评记录、意见建议、投诉反馈、在线回复、服务评价、自定义配置于一体的轻量化管理小程序。无需复…

2026/9/12 17:10:54

团子翻译器字体渲染性能:速度与美观的平衡

团子翻译器字体渲染性能:速度与美观的平衡 引言:你还在忍受翻译器界面卡顿吗? 当你在使用翻译工具时,是否遇到过这样的情况:选择了漂亮的艺术字体却导致界面响应迟缓,或者为了追求速度而被迫使用单调的系统…

2026/9/12 2:05:33

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/12 3:55:12

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/12 10:09:03

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/12 0:04:17

MATLAB仿生优化框架:长鼻浣熊算法多策略融合实现

简介:本资源是一份面向智能优化算法研究者与MATLAB初学者的仿生智能算法实践代码包,聚焦于长鼻浣熊优化算法(COA)的多策略改进与性能验证。针对传统COA易陷局部最优、收敛精度不足等问题,作者融合Circle映射初始化提升…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 JavaWeb 的校园一卡通管理系统的设计与实现 基于 JavaWeb 的校园卡业务管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 Java 的图书馆借阅管理平台的搭建与实现 基于 Java 的图书馆综合管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/12 14:32:17

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/12 6:37:43

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

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

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

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