mcpField
M
maple-onboard

maple-onboard

github.com/mapletechlabs云与 DevOps1.9k74 次安装今天更新
代码仓库

关于 maple-onboard

为编码 Agent 提供技能,将仓库中的运行服务接入 OpenTelemetry 并把遥测数据发送到 Maple。涵盖各技术栈配置、业务信号、验证与交接,同时保留现有可观测性供应商。

主要功能

  1. 01梳理所有运行服务
  2. 02配置原生 OpenTelemetry SDK
  3. 03添加业务 Span、日志和指标
  4. 04验证启动及遥测导出
  5. 05保留现有可观测性供应商

适用场景

  1. 01为多服务仓库接入遥测
  2. 02为服务添加关联追踪的日志
  3. 03检查遥测是否成功导出

MCP 相关

该技能列出 Maple MCP 端点及连接 Maple MCP 工具的步骤。使用真实密钥时,可通过 Maple MCP 工具验证服务并审计配置。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mapletechlabs/maple --skill maple-onboard

安装后在 Claude Code 中输入/maple-onboard确认已加载。

详细介绍

Maple 接入

将 OpenTelemetry 跟踪、日志和指标接入仓库中的每个应用和服务,让遥测数据流入 Maple。使用原生 OpenTelemetry API 和各框架文档说明的引导方式。如果遇到难以处理的技术栈,请查阅该语言的 OTel 文档;不要猜测。

配套技能

先阅读 maple-onboarding-style(Span 模式、资源属性、框架说明、信号质量、验证),然后阅读仓库中每种技术栈对应的技能:maple-nextjs-style、maple-nodejs-style、maple-python-style、maple-effect-style、maple-go-style、maple-rust-style、maple-java-style、maple-csharp-style、maple-kotlin-style。如果这些技能未安装在此技能旁边,请从 https://raw.githubusercontent.com/MapleTechLabs/maple/main/skills/<skill-name>/SKILL.md 获取,仅获取本仓库需要的技能。没有对应技能的技术栈(Ruby、Elixir、PHP、Deno 等)使用 maple-onboarding-style 和上游 OTel 文档。调用 LLM 的服务还需使用 maple-agent-tracing。

步骤 0:区域、端点和密钥

密钥仅在签发它的区域有效;另一个区域会返回 401。

区域接收端点控制台MCP 服务
US(默认)https://ingest.maple.devhttps://app.maple.devhttps://api.maple.dev/mcp
EUhttps://ingest.eu.maple.devhttps://app.eu.maple.devhttps://api.eu.maple.dev/mcp

按以下顺序选择区域:提示词中的接收端点(原样使用)、提及 EU 或包含 eu.maple.dev 的 URL,否则使用 US。下文的 <dashboard> 和 <mcp> 指该区域对应的主机。

将端点和接收密钥直接写入引导源码。 密钥按项目限定且仅可写入(可将其视为 Sentry DSN):不要使用 .env 文件、process.env.OTEL_EXPORTER_OTLP_* 或部署配置。公钥(maple_pk_…)可在任何地方安全使用,包括浏览器和移动端。私钥(maple_sk_…)仅限服务器使用。

  • 提示词中有公钥: 将其直接写入每个引导文件。
  • 提示词中有私钥: 仅写入服务器引导文件。浏览器和移动端代码中使用 MAPLE_TEST,并告知用户在那里替换为公钥(公钥也可用于服务器,因此一个密钥即可覆盖整个仓库)。
  • 没有密钥: 将占位符 MAPLE_TEST 直接写入代码。两个区域都会对此返回 200 且不存储任何内容,因此引导流程可以端到端运行。请先简要告知用户:“我将使用 MAPLE_TEST 作为占位符,以便引导流程能够运行。请从设置 → 数据接入(/settings?tab=ingestion)复制公用接收密钥,或先在 /sign-up 创建账户,然后在我编写的文件中搜索并替换 MAPLE_TEST。”然后继续操作。不要等待用户注册。

步骤 1:梳理每项服务

从工作区清单(pnpm/bun/npm 工作区、go.work、Cargo、Python 工作区)以及 apps/* 和 services/* 中枚举服务:Web 前端、API、工作进程、后台任务、CLI、演示应用、移动应用、无服务器函数和边缘函数。仅跳过没有运行时入口的包。本轮对所有内容进行埋点;后续可能不会再有处理机会。打印清单,让用户有机会更正,然后继续操作,无需等待。

第 2 步:安装原生 OTel 并为每项服务引导初始化

使用该语言的原生 SDK:

  • Node 服务:@opentelemetry/sdk-node。Next.js 服务端:在 instrumentation.ts 中使用 @vercel/otel。
  • 浏览器前端(Vite、SPA、Next.js 客户端):@maple-dev/browser(追踪、错误和会话回放共用同一个 session.id)。
  • Expo / React Native:使用带有 OTLP HTTP 导出器的 @opentelemetry/sdk-trace-web。
  • Python:opentelemetry-sdk + opentelemetry-instrumentation-*。Go:go.opentelemetry.io/otel。Effect:@maple-dev/effect-sdk。

规则:

  • 引导初始化必须在导入任何框架之前运行,并通过文档说明的钩子(--import、instrumentation.ts、main.py 顶部)执行。
  • 使用 HTTP OTLP 导出器,绝不使用 gRPC。
  • 服务端需要追踪、日志和指标。日志通过语言的日志桥接,经由现有日志记录器使用 OTLP 发送,从而携带 trace_id / span_id。
  • 设置 service.name、service.version、deployment.environment.name、vcs.repository.url.full(服务端必需)和 vcs.ref.head.revision(尽力设置)。
  • 不使用封装 API(sendMapleSpan、recordCounter、withTelemetry):使用模块级 tracer 和 meter,以及 SDK 自带的调用。
  • 使用仓库的包管理器。编辑现有配置,不要覆盖。
  • 保留现有供应商(Sentry、Datadog、New Relic、Pino transports 等)。OTel 与它们并行运行。

各框架的具体说明(浏览器初始化和 CORS、Expo、Workers、FastAPI)见 maple-onboarding-style 中的“框架说明”和各技术栈的技能。

第 3 步:业务追踪、日志和指标

自动插桩是基础。阅读代码,并根据 maple-onboarding-style 中的“业务信号”添加:

  • 追踪:覆盖每项关键业务操作(order.process、payment.charge、job.<type>),将实体 ID 和结果作为属性,记录异常,失败时设置 Error 状态,并始终结束追踪。跳过简单辅助函数。不得包含 PII。
  • 日志:采用结构化格式,并与追踪关联。仅在需要人工干预时使用错误级别。
  • 指标:用计数器统计状态转换,用直方图统计延迟和大小,仅使用低基数维度。

第 4 步:验证

针对每项服务:

  1. 项目自身的开发或构建命令仍能正常启动,并且冒烟测试(启动或导入应用,然后通过已插桩的路由发送一个请求,或运行一条真实的 CLI 命令)会初始化引导流程。启动故障属于回归:必须修复。
  2. 遥测数据必须离开进程:启用导出器诊断运行,并确认关闭刷新后没有导出错误。maple-onboarding-style 中的“验证导出”说明了各语言对应的开关,以及遇到 401 时的处理方法。
  3. 使用真实密钥和 Maple MCP 工具,等待约一分钟,调用 list_services 确认每个 service.name,然后调用 audit_setup 并修复其报告的问题。使用 MAPLE_TEST 时跳过此项,因为它不会存储任何内容;没有 MCP 时,告知用户在“设置 → 数据摄取”中可以查看数据何时到达。

引导流程能加载却从不导出数据,就不算完成。

Step 5:交接

  • 更改内容: 用 3 到 7 条简短要点说明:软件包、文件、业务跨度和指标、保留的供应商。如果添加了 @maple-dev/browser,请说明已开启会话回放并屏蔽输入(replay: { enabled: false } 可关闭回放),且会在 localStorage 和 Cookie 中保存访客 ID(privacy: { persistVisitorId: false } 可关闭此功能)。
  • 占位符: 如果 MAPLE_TEST 仍是内联值,请告知用户:“引导程序使用 MAPLE_TEST 作为占位符,以便顺利完成端到端安装。请从 Settings → Ingestion(/settings?tab=ingestion)复制公开写入密钥;如果你还没有 Maple 账户,请先前往 /sign-up 创建账户。然后在我写入的文件中搜索并替换 MAPLE_TEST,再重新部署。如果你的组织位于欧盟区域(app.eu.maple.dev),还需将 ingest.maple.dev 替换为 ingest.eu.maple.dev,或在 Maple SDK 中设置 region: "eu"。”如果使用了欧盟端点,则省略有关欧盟的句子。
  • 部署: 按照平时的方式部署。无需进行任何配置:密钥已写入源代码。

Step 6:Maple MCP

如果 Maple MCP 工具已连接到 <mcp>,则跳过(另一地区的服务会返回 401 或读取其他组织的数据)。否则,先提出运行以下命令,并在确认后执行:claude mcp add --transport http maple <mcp>。告知用户,但不要运行:Codex 使用 codex mcp add maple --url <mcp>;Cursor 和其他客户端可复制 /mcp 中的代码片段。

严格规则

  • 切勿修改项目根目录之外的文件。切勿提交、推送或创建 PR。
  • 切勿将私钥(maple_sk_…)放入浏览器或移动端代码。
  • 除非用户要求,否则切勿移除现有的可观测性供应商。
  • 如果开发或构建命令因你添加的埋点而失败,请修复问题或报告情况。

评论

支持 Markdown