news 2026/9/17 9:11:19

OneUptime Serverless 函数监控指南:基于 OpenTelemetry 与 `faas.name` 的零配置 FaaS 可观测性接入

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OneUptime Serverless 函数监控指南:基于 OpenTelemetry 与 `faas.name` 的零配置 FaaS 可观测性接入

OneUptime Serverless 函数监控指南:基于 OpenTelemetry 与faas.name的零配置 FaaS 可观测性接入

【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址: https://gitcode.com/GitHub_Trending/on/oneuptime

OneUptime 会自动识别接入的Serverless 函数(FaaS):只要函数通过 OpenTelemetry SDK 上报带有faas.name资源属性的 traces、logs 与 metrics,它就会自动出现在Serverless Functions页面,无需任何手动创建。本文以 OneUptime 官方文档为骨架,结合仓库中的摄取服务、数据模型与前端页面源码,完整讲解其识别原理、OTLP 导出器配置、AWS Lambda 接入步骤,以及落地后你能获得的监控能力。

概述:为什么无需手动注册函数

OneUptime 的 Serverless 监控走的是"零配置自动发现"路线。核心触发条件只有一个:当 OneUptime 收到带有faas.name资源属性的 OpenTelemetry 数据时,就自动识别出一个 Serverless 函数

这意味着你的接入流程只有三步:

  1. 用函数语言的 OpenTelemetry SDK(或自动埋点层)对函数进行插桩;
  2. 将函数的 OTLP 导出器指向 OneUptime;
  3. 函数首次上报 span、log 或 metric 后,自动出现在Serverless Functions(Serverløse funktioner)页面下,并关联其 traces、logs 和 metrics。

该机制对任何能够输出 OpenTelemetry 的 FaaS 运行时均有效,包括但不限于:

  • AWS Lambda
  • Google Cloud Functions
  • Azure Functions
  • Cloudflare Workers
  • 其他任何支持 OpenTelemetry 导出的 FaaS 运行时

前置条件

在开始之前,你需要准备两样东西:

  1. OneUptime Telemetry Ingestion Token(遥测摄取令牌):在 _Project Settings → Telemetry & APM → Ingestion Keys(项目设置 → 遥测与 APM → 摄取密钥)中创建,并复制其中的x-oneuptime-token值。它是 OTLP 请求的鉴权头。
  2. 函数语言对应的 OpenTelemetry SDK(或自动插桩层),用于在函数内生成和导出遥测数据。

OneUptime 如何识别一个函数:faas.name资源属性

OneUptime 以 OpenTelemetry 的faas.name资源属性作为每个函数的身份键(identity key)。下表完整列出了识别过程中涉及的资源属性及其用途:

属性是否必需用途
faas.name函数身份标识(例如checkout-handler
faas.version显示在概览页面上
faas.instance按实例跟踪,展示在Instances(实例)标签页下
cloud.platform取值如aws_lambdagcp_cloud_functionsazure_functions
cloud.provider/cloud.region/cloud.account.id显示在概览页面上

注意:如果一个函数同时设置了service.name,它仍然会出现在 Services(服务)下。Serverless Functions视图是以 FaaS 为聚焦视角的呈现方式,其范围限定于faas.name

从源码层面看,这一识别逻辑在摄取管线中有明确的落点。在 OtelIngestBaseService.ts 的selectPrimaryEntity中,当批次被判定为 Serverless 函数时,服务名解析优先取faas.name,缺省时回退到service.name,并组装为serverless/<name>的服务名,最终以ServiceType.ServerlessFunction作为主实体类型写入遥测行:

if (data.serverlessFunctionId) { const faasName: string | null = this.getStringAttribute(data.attributes, "faas.name") || this.getStringAttribute(data.attributes, "service.name"); return await OTelIngestService.buildResourceMetadataForNonService({ serviceName: faasName ? `serverless/${faasName}` : "Serverless Function", resourceId: data.serverlessFunctionId, primaryEntityType: ServiceType.ServerlessFunction, ... }); }

在数据模型侧,ServerlessFunction.ts 用functionIdentifier字段承载来自faas.name的稳定标识,并对(projectId, functionIdentifier)建立了数据库级唯一索引,确保同一 FaaS 函数并发首次上报时收敛为单一行,而不是竞争创建出重复记录。模型还持久化了cloudPlatformcloudProvidercloudRegioncloudAccountIdfunctionVersion(来自faas.version)、runtimeNameruntimeVersion(来自process.runtime.*)等"最后一次见到"的资源属性,以及lastSeenAt(最后收到遥测的时间)和otelCollectorStatus(连接/断开状态)。

而 ServerlessFunctionService.ts 中的findOrCreateByFunctionIdentifier则采用大小写不敏感查找QueryHelper.findWithSameText)来避免因faas.name大小写漂移导致的重复创建,并在创建失败(并发竞争)时重新查询已存在的行,保证摄取流程不被重复行卡住。

步骤 1:设置 OTLP 导出器的环境变量

大多数语言自动插桩库都遵循 OpenTelemetry 标准的三个环境变量约定,你只需要在函数运行环境中设置它们:

OTEL_EXPORTER_OTLP_ENDPOINT="https://oneuptime.com/otlp" OTEL_EXPORTER_OTLP_HEADERS="x-oneuptime-token=YOUR_TELEMETRY_INGESTION_TOKEN" OTEL_RESOURCE_ATTRIBUTES="faas.name=checkout-handler,faas.version=1.4.2"

参数说明:

  • OTEL_EXPORTER_OTLP_ENDPOINT:OTLP 上报地址。使用 OneUptime 云服务时指向https://oneuptime.com/otlp;如果你自托管 OneUptime,请将其替换为https://YOUR-ONEUPTIME-HOST/otlp(即你自托管实例的/otlp路径)。
  • OTEL_EXPORTER_OTLP_HEADERS:携带鉴权头x-oneuptime-token,值为前置条件中复制的 Telemetry Ingestion Token。
  • OTEL_RESOURCE_ATTRIBUTES:以逗号分隔的资源属性列表。这里至少应设置faas.name(如checkout-handler),并可按需附加faas.version(如1.4.2)。需要注意:在 AWS Lambda 场景下,faas.name通常会由 Lambda Layer 自动写入,因此这里的属性不是强制必须的。

步骤 2:(AWS Lambda)附加 OpenTelemetry Layer

对于 AWS Lambda,最简单的接入方式是在函数上附加OpenTelemetry Lambda Layer(针对你的运行时选择对应版本的 Layer),然后设置以下环境变量:

AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-handler OTEL_EXPORTER_OTLP_ENDPOINT=https://oneuptime.com/otlp OTEL_EXPORTER_OTLP_HEADERS=x-oneuptime-token=YOUR_TELEMETRY_INGESTION_TOKEN

其中:

  • AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-handler:让 Lambda 运行时通过该 wrapper 启动,从而自动注入 OpenTelemetry 的埋点与 span 上下文传播。
  • 后两个环境变量与步骤 1 中的含义一致,指向 OneUptime 的 OTLP 端点并携带摄取令牌。

该 Layer 会自动完成两件关键工作:

  1. 自动设置faas.name:从 Lambda 函数名派生,无需手工配置;
  2. 自动填充云资源属性:资源检测器(resource detector)会自动补齐cloud.platformcloud.regioncloud.account.id,让概览页直接展示运行平台、区域和账户信息。

其他 FaaS 平台(Google Cloud Functions、Azure Functions、Cloudflare Workers 等)虽然没有统一的 Lambda Layer 机制,但原理一致:只要其 OpenTelemetry 导出器能携带faas.name资源属性并指向 OneUptime 的 OTLP 端点即可被识别。仓库中 CloudPlatform.ts 定义了FAAS_CLOUD_PLATFORM_VALUES枚举,明确支持aws_lambdagcp_cloud_functionsazure_functions等平台取值,用于归一化与校验cloud.platform

接入后你能获得什么

一旦函数发出 span、log 或 metric,它就会出现在Serverless Functions列表页。函数概览(Overview)页面提供以下核心能力:

  • Invocations(调用次数)、error rate(错误率)和 p95 duration(p95 延迟):这些指标从你的 traces 中推导得出,支持选择时间范围查看,并配有趋势图(trend charts)。在前端实现中,Overview.tsx 将Invocationsp95 duration渲染为带序列数据的图表卡片,调用次数与 p95 分别通过countSeriesp95Series驱动趋势曲线。
  • Instances(实例):实时统计观测到的faas.instance取值数量。底层由 ServerlessFunctionInstance.ts 承载——这是一张"存活实例清单"表,由遥测摄取管线根据faas.instance自动 upsert(仅收集器显式输出faas.instance资源属性时才填充),对(projectId, serverlessFunctionId, instanceName)建立唯一索引,且不可由用户手工编辑
  • 完整的 Logs(日志)、Traces(链路)和 Metrics(指标)标签页:均以该函数为范围进行过滤,对应仓库中的 Logs.tsx、Traces.tsx、Metrics.tsx 等页面。

标签与负责人的自动应用

除了观测数据,你还可以通过Serverless → Settings → Label Rules / Owner Rules(Serverless → 设置 → 标签规则 / 负责人规则)为函数自动应用标签(labels)和负责人(owners),实现大规模函数资产的自动化归类与责任到人。这一能力在仓库中对应独立的规则引擎服务:

  • ServerlessFunctionLabelRuleEngineService.ts:根据规则为 Serverless 函数自动匹配并应用标签;
  • ServerlessFunctionOwnerRuleEngineService.ts:按规则自动为函数指派负责人;
  • 配套的规则数据模型包括 ServerlessFunctionLabelRule.ts、ServerlessFunctionOwnerRule.ts 等。

结合 ServerlessFunction.ts 中的labels多对多关系字段,标签会直接挂载到函数对象上,从而在列表、过滤与权限控制中生效。

总结

OneUptime 的 Serverless 函数监控是典型的"协议优先、配置为零"设计:以 OpenTelemetry 的faas.name资源属性为唯一身份锚点,通过ServerlessFunction模型的唯一索引与摄取服务的大小写不敏感查找保证自动发现的健壮性,再以faas.versionfaas.instancecloud.*系列属性丰富概览信息,最终在 Dashboard 端呈现调用量、错误率、p95 延迟、实例清单与完整的 logs/traces/metrics 视图。无论你的函数跑在 AWS Lambda、Google Cloud Functions、Azure Functions 还是 Cloudflare Workers 上,接入路径都同样简单:插桩 → 配置 OTLP 端点与令牌 → 等待数据流入。

【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址: https://gitcode.com/GitHub_Trending/on/oneuptime

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/17 9:10:44

CFD静态降阶模型(ROM)在ANSYS Twin Builder中的构建与验证

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

作者头像 李华
网站建设 2026/9/17 9:08:49

蓝牙Channel Sounding深度解析:BLE从信号强度猜测进阶厘米级测距

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

作者头像 李华
网站建设 2026/9/17 9:06:57

基于Open Agents打造自己的云端智能体:完整指南

基于Open Agents打造自己的云端智能体&#xff1a;完整指南 【免费下载链接】open-agents An open source template for building cloud agents. 项目地址: https://gitcode.com/GitHub_Trending/op/open-agents Open Agents 是一个开源的云智能体&#xff08;Cloud Age…

作者头像 李华
网站建设 2026/9/17 9:04:25

Arthas OGNL实战:Spring微服务线上问题秒级定位

1. 为什么必须吃透Arthas里的OGNL表达式——一个Spring运维老手的真实痛点在Spring Boot项目线上出问题的凌晨三点&#xff0c;你盯着监控面板上飙升的线程数和缓慢的HTTP响应&#xff0c;心里清楚&#xff1a;不是CPU打满&#xff0c;也不是内存泄漏&#xff0c;而是某个Bean的…

作者头像 李华
网站建设 2026/9/17 8:59:41

基于STM32的环境监测系统设计:从Proteus仿真到实物实现

1. 项目概述与整体设计思路1.1 这项目到底能做什么环境质量监测&#xff0c;听起来像个挺大的词&#xff0c;但落到实际场景里&#xff0c;其实就是我们身边最常见的几个痛点&#xff1a;办公室空气闷不闷、新装修的房子甲醛担忧&#xff08;用传感器做间接判断&#xff09;、机…

作者头像 李华
网站建设 2026/9/17 8:57:58

企业级飞控系统自研指南:从算法到落地的完整路线

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

作者头像 李华