尧图精选

OneUptime 无服务器函数可观测性实战:基于 faas.name 的自动发现与 OTLP 接入指南

🕒 发布时间:2026/9/18 10:24:56 📁 来源:尧图网络
OneUptime 无服务器函数可观测性实战基于 faas.name 的自动发现与 OTLP 接入指南【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址: https://gitcode.com/GitHub_Trending/on/oneuptime在 AWS Lambda、Cloudflare Workers 等 FaaS 运行时上运行函数时传统的服务监控视角往往难以覆盖短生命周期、弹性伸缩的执行实例。本文基于 OneUptime 的官方文档 Serverless Functions 展开讲清楚 OneUptime 如何通过faas.name资源属性自动识别 Serverless Function、如何用标准 OTLP 环境变量完成接入并结合仓库源码剖析自动发现、心跳保活、实例登记与规则引擎背后的真实实现帮助你从零完成一个函数的全链路可观测接入。工作原理收到带 faas.name 的遥测数据即自动建档OneUptime 无需手工创建任何函数实体只要平台收到带有faas.name资源属性的 OpenTelemetry 数据对应函数就会自动出现在Serverless Functions视图中并聚合该函数的 traces、logs 与 metrics。这一机制适用于任何能产出 OpenTelemetry 数据的 FaaS 运行时——AWS Lambda、Google Cloud Functions、Azure Functions、Cloudflare Workers 均可。从源码实现看这个自动发现逻辑集中在 OTel 摄取基类的静态方法autoDiscoverServerless中它在每一条摄取路径上运行而不是某个专用端点保证即使同时设置了service.name函数遥测数据也能正确落到 Serverless 资源下身份Identity判定优先取资源属性faas.name作为函数身份若该数据来自 FaaS 平台但没有faas.name则回退到service.name。FaaS 平台的判定依据是cloud.platform归一化后是否落在共享注册表FAAS_CLOUD_PLATFORM_VALUES定义于 CloudPlatform中该共享注册表同时被 Serverless 与 Cloud Environment 两个产品消费从结构上避免了两者对同一平台的归属冲突门控Gate必须同时满足有函数身份且存在 FaaS 信号faas.name或 FaaS 平台标记两个条件否则直接返回null普通微服务数据不会被误判为函数——见 autoDiscoverServerless缓存projectId:函数标识组合的实体 ID 会缓存 24 小时SERVERLESS_FUNCTION_ID_CACHE_EXPIRY_SECONDS稳态摄取下无需反复查库实例登记若资源属性中带有faas.instance会同步调用ServerlessFunctionInstanceService.recordInstance记录该函数实例支撑Instances标签页的实时实例统计见 实例登记逻辑。// App/FeatureSet/Telemetry/Services/OtelIngestBaseService.ts节选L2007-L2019 // Identity: prefer faas.name; on a FaaS platform fall back to service.name. let functionIdentifier: string | null faasName; if (!functionIdentifier isFaasPlatform) { functionIdentifier this.getStringAttribute( data.attributes, service.name, ); } // Gate: need a function identity AND a FaaS signal (faas.name or platform). if (!functionIdentifier || (!faasName !isFaasPlatform)) { return null; }一个同时设置了service.name的函数也会照常出现在Services视图中。Serverless Functions视图是按faas.name作用域的 FaaS 聚焦视角二者并行不冲突。前置条件接入前需要准备两样东西OneUptime 遥测摄取令牌Telemetry Ingestion Token在控制台Project Settings → Telemetry APM → Ingestion Keys中创建并复制x-oneuptime-token的值你所用函数语言的OpenTelemetry SDK或自动埋点层如 AWS Lambda 的 OTEL layer、各语言的 auto-instrumentation 包。资源属性规范OneUptime 靠什么识别一个函数OneUptime 以faas.name作为函数身份键各属性取值及其作用如下属性是否必需用途faas.name是函数身份例如checkout-handlerfaas.version否显示在概览页faas.instance否按实例登记展示在Instances标签页cloud.platform否aws_lambda、gcp_cloud_functions、azure_functions等cloud.provider/cloud.region/cloud.account.id否显示在概览页这些属性在摄取侧并非只用于显示。源码中updateLastSeen会把它们写入函数行的 metadata 字段并额外采集process.runtime.name/process.runtime.version作为运行时信息见 自动发现与元数据落库await ServerlessFunctionService.updateLastSeen(functionId, { agentVersion: agentVersion || undefined, cloudPlatform: cloudPlatform || undefined, cloudProvider: this.getStringAttribute(data.attributes, cloud.provider) || undefined, cloudRegion: this.getStringAttribute(data.attributes, cloud.region) || undefined, cloudAccountId: this.getStringAttribute(data.attributes, cloud.account.id) || undefined, functionVersion: this.getStringAttribute(data.attributes, faas.version) || undefined, runtimeName: this.getStringAttribute(data.attributes, process.runtime.name) || undefined, runtimeVersion: this.getStringAttribute(data.attributes, process.runtime.version) || undefined, });步骤一配置 OTLP 导出器环境变量大多数语言的自动埋点方案都遵循标准 OpenTelemetry 环境变量约定因此只需在函数运行时环境中设置OTEL_EXPORTER_OTLP_ENDPOINThttps://oneuptime.com/otlp OTEL_EXPORTER_OTLP_HEADERSx-oneuptime-tokenYOUR_TELEMETRY_INGESTION_TOKEN OTEL_RESOURCE_ATTRIBUTESfaas.namecheckout-handler,faas.version1.4.2其中OTEL_EXPORTER_OTLP_ENDPOINT指向 OneUptime 的 OTLP 入口。若你自托管 OneUptime请将主机替换为自己的域名即https://YOUR-ONEUPTIME-HOST/otlpOTEL_EXPORTER_OTLP_HEADERS携带摄取令牌作为数据归属项目的鉴权凭据OTEL_RESOURCE_ATTRIBUTES用于补充 SDK 不会自动设置的资源属性——尤其是要明确声明faas.name这是自动发现的第一优先级身份来源。步骤二AWS Lambda 添加 OpenTelemetry Layer对 AWS Lambda最简单的路径是官方提供的 OpenTelemetry Lambda layer为你的运行时附上对应 layer并配置以下环境变量AWS_LAMBDA_EXEC_WRAPPER/opt/otel-handler OTEL_EXPORTER_OTLP_ENDPOINThttps://oneuptime.com/otlp OTEL_EXPORTER_OTLP_HEADERSx-oneuptime-tokenYOUR_TELEMETRY_INGESTION_TOKEN该 layer 会通过AWS_LAMBDA_EXEC_WRAPPER包装函数执行过程自动完成埋点并从函数名自动填充faas.name由资源检测器resource detector自动补全cloud.platform、cloud.region、cloud.account.id。这意味着在 Lambda 场景下你甚至不需要手写faas.name——只要 layer 正确挂载OneUptime 侧的自动发现门控条件即已满足。实体生命周期从创建、心跳到断连判定函数实体并非建一次就完事OneUptime 在 ServerlessFunctionService 中维护了一套完整的生命周期语义1. 幂等创建大小写不敏感findOrCreateByFunctionIdentifier以项目 函数标识为键做大小写不敏感查询。源码注释解释了这样设计的原因唯一性约束本身是大小写不敏感的若用大小写敏感的查询会在faas.name大小写漂移时漏掉已有行、继而因重名创建失败而卡住摄取wedge ingest查询到已存在行时直接复用create抛出的竞态异常并发请求同时创建则通过重新查询兜底见 findOrCreateByFunctionIdentifier。2. 带节流的心跳每次自动发现命中后都会触发updateLastSeen但落库通过ResourceHeartbeat.write做门控同一函数 60 秒内LAST_SEEN_THROTTLE_SECONDS只写一次存活状态metadata 字段按指纹去重避免高频遥测把数据库写满。函数行创建时即标记otelCollectorStatus connected并写入lastSeenAt。3. 断连判定后台任务markDisconnectedFunctions将lastSeenAt超过15 分钟且状态仍为connected的函数标记为disconnected。源码注释特别说明了 15 分钟阈值的由来OTel 摄取存在约 5 分钟的维护围栏maintenance fence遥测持续到达时lastSeenAt合法地滞后近 5 分钟阈值若贴着围栏 TTL 会导致健康资源状态抖动因此取 3 倍余量见 markDisconnectedFunctions。4. 创建即套用标签与负责人规则函数首次被创建时onCreateSuccess钩子系统会异步链式执行两个规则引擎ServerlessFunctionLabelRuleEngineService按Serverless → Settings → Label Rules中配置的规则自动打标签ServerlessFunctionOwnerRuleEngineService按 Owner Rules 自动分配负责人。此外attachLabels采用只做加法的策略手动在 UI 上设置的标签永不被摄取流程移除且标签集合会以 SHA1 指纹缓存 60 秒标签集不变时稳态摄取只产生一次内存查找。接入后你能看到什么函数只要发出过任意 span、log 或 metric即出现在Serverless Functions列表中。概览页提供Invocations调用量、error rate错误率、p95 durationp95 耗时——从 trace 数据推导支持选择时间范围并展示趋势图Instances——当前观测到的faas.instance取值的实时计数由上文的recordInstance登记驱动完整的Logs、Traces、Metrics标签页均按该函数的resource.faas.name作用域过滤通过Serverless → Settings → Label Rules / Owner Rules对新自动发现的函数自动套用标签与负责人。小结接入要点回顾关注点关键结论身份来源faas.name优先FaaS 平台上可回退service.name必需动作配置 OTLP endpoint/headers 环境变量并声明faas.nameLambda 捷径官方 OTEL layer AWS_LAMBDA_EXEC_WRAPPER/opt/otel-handler自动填充函数名与云属性实体生命周期幂等创建大小写不敏感→ 60 秒节流心跳 → 15 分钟无数据判断连元数据faas.version、cloud.*、process.runtime.*均落入函数行 metadata 并展示在概览规则自动化创建时自动执行 Label Rules / Owner Rules标签只做加法、不覆盖手动设置需要说明的适用前提以上机制以当前仓库代码为准依赖函数运行时能够向https://你的 OneUptime 主机/otlp发起出站请求自托管时需公网可达faas.instance若运行时不提供则 Instances 视图无数据但不影响函数本身的识别与指标聚合。【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址: https://gitcode.com/GitHub_Trending/on/oneuptime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →