YAOTU INSIGHTS

OneUptime Serverless Functions 接入指南:基于 `faas.name` 的 FaaS 自动发现与 OpenTelemetry 观测

OneUptime Serverless Functions 接入指南:基于 `faas.name` 的 FaaS 自动发现与 OpenTelemetry 观测
OneUptime Serverless Functions 接入指南基于faas.name的 FaaS 自动发现与 OpenTelemetry 观测【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址: https://gitcode.com/GitHub_Trending/on/oneuptime导读OneUptime 是一款开源的监控与可观测性平台完整监控与可观测性平台仓库根目录见 README.md。本文围绕其 Serverless Functions无服务器函数能力展开OneUptime 在收到携带 OpenTelemetry 资源属性faas.name的遥测数据的那一刻就会自动识别出一个Serverless Function无需任何手工创建。读完本文你将掌握如何为 AWS Lambda、Google Cloud Functions、Azure Functions、Cloudflare Workers 等任意 FaaS 运行时接入 OpenTelemetry 并指向 OneUptime以及平台如何通过faas.name完成函数归并、实例统计、标签与负责人自动分配。概述零配置的 FaaS 自动发现OneUptime 的 Serverless Functions 视图遵循先有遥测、后有实体的模型只要函数通过 OTLP 上报了携带faas.name资源属性的 Span、日志或指标该函数就会自动出现在Serverless Functions列表下并自带 Traces、Logs 与 Metrics 三个完整视图。这一机制对运行时完全中立适用于AWS LambdaGoogle Cloud FunctionsAzure FunctionsCloudflare Workers任何能够输出 OpenTelemetry 的 FaaS 运行时从源码看这一设计贯穿了从数据接入到界面展示的全链路前端列表页 ServerlessFunctions.tsx 的卡片描述即写明Serverless / FaaS functions auto-discovered from OpenTelemetry that carriesfaas.name后端遥测接入服务 OtelIngestBaseService.ts 在selectPrimaryEntity中对携带serverlessFunctionId的批次优先取faas.name回退到service.name作为函数名并以ServiceType.ServerlessFunction落地。可以推断faas.name是整个 Serverless Functions 产品线的身份锚点。前提条件接入前需要准备两样东西一个 OneUptime Telemetry Ingestion Token遥测摄取令牌在项目设置Project Settings→ 遥测与 APMTelemetry APM→ 摄取密钥Ingestion Keys中创建并复制其中的x-oneuptime-token值。对应函数语言的 OpenTelemetry SDK或自动插桩层。需要特别提醒令牌的安全性。应用内引导文档 documentationMarkdown.ts 明确提示令牌是机密信息应使用Server类型摄取密钥并设置为函数环境变量任何会被浏览器读取的场合请改用Browser类型摄取密钥避免密钥随页面源码泄露。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否显示在概览页上注意如果函数同时设置了service.name它仍会出现在Services服务视图中。Serverless Functions视图是面向 FaaS 的专属视角以faas.name为作用域。源码层面的识别实现上述表项在数据模型与接入服务中均有对应落点身份键数据库模型 ServerlessFunction.ts 中的functionIdentifier字段注释明确指出其来源即 OpenTelemetry 资源属性faas.name表级唯一索引Index([projectId, functionIdentifier], { unique: true })ServerlessFunction.ts从数据库层面保证同一(projectId, functionIdentifier)只对应一行避免并发首次接入时产生重复记录。查找与创建ServerlessFunctionService.ts 的findOrCreateByFunctionIdentifier采用大小写不敏感的findWithSameText查询避免faas.name大小写漂移导致同名函数已存在而卡死接入并在并发创建冲突时重新拉取已有行。元数据沉淀updateLastSeenServerlessFunctionService.ts会把cloud.platform、cloud.provider、cloud.region、cloud.account.id、faas.version、运行时名与版本等信息写入模型对应字段模型中的cloudPlatform、cloudRegion、functionVersion、runtimeName等列见 ServerlessFunction.ts这些正是概览页展示最近一次观测值的数据来源。云平台枚举CloudPlatform.ts 的FaasCloudPlatform枚举统一维护了 FaaS 平台词表aws_lambda、gcp_cloud_functions、azure_functions、tencent_cloud_scf、alibaba_cloud_fc并由FAAS_CLOUD_PLATFORM_VALUES集合供接入管线校验cloud.platform是否为受支持的 FaaS 平台。第一步为 OTLP Exporter 设置环境变量大多数语言级的自动插桩都会读取 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_ENDPOINTOTLP 上报地址。使用 OneUptime 云服务时指向https://oneuptime.com/otlp自托管 OneUptime时替换为https://YOUR-ONEUPTIME-HOST/otlp。OTEL_EXPORTER_OTLP_HEADERS认证头取值为x-oneuptime-token你的摄取令牌。OTEL_RESOURCE_ATTRIBUTES以逗号分隔的资源属性。faas.name为必填的身份键示例checkout-handlerfaas.version可选示例1.4.2建议一并设置cloud.platform、cloud.region等以便概览页展示更完整的信息。第二步AWS Lambda添加 OpenTelemetry 层对于 AWS Lambda最简路径是使用OpenTelemetry Lambda layer官方提供的 Lambda 自动插桩层。将对应运行时的层附加到函数后设置如下环境变量AWS_LAMBDA_EXEC_WRAPPER/opt/otel-handler OTEL_EXPORTER_OTLP_ENDPOINThttps://oneuptime.com/otlp OTEL_EXPORTER_OTLP_HEADERSx-oneuptime-tokenYOUR_TELEMETRY_INGESTION_TOKEN说明AWS_LAMBDA_EXEC_WRAPPER/opt/otel-handler让 Lambda 运行时通过该包装器启动从而自动完成插桩。该层会自动从 Lambda 函数名中提取faas.name并由资源检测器resource detector自动填充cloud.platform、cloud.region与cloud.account.id。对 AWS Lambda 以外的平台如 Google Cloud Functions、Azure Functions、Cloudflare Workers原理相同用对应语言的 OpenTelemetry SDK 或自动插桩并把 OTLP 指向 OneUptime 即可faas.name可通过资源属性手动设置。函数接入后你能获得什么一旦函数输出了一个 Span、一条日志或一个指标它就会出现在Serverless Functions下。概览页Overview.tsx提供调用次数Invocations、错误率Error rate与 p95 耗时p95 duration—— 由你的 Traces 派生而来支持选择时间范围并配有趋势图。源码中通过fetchSpanMetrics以resource.faas.name属性查询对应函数标识的 Span 指标Overview.tsx默认时间范围为过去一小时TimeRange.PAST_ONE_HOUR。实例Instances—— 观测到的faas.instance值的实时计数。实例清单由独立的 ServerlessFunctionInstance.ts 模型承载它以(projectId, serverlessFunctionId, instanceName)唯一索引记录每个实例由遥测接入管线写入、不可人工编辑且仅在采集器上报faas.instance资源属性时才有数据。完整的 Logs、Traces、Metrics 标签页—— 均限定在该函数范围内。此外列表页还展示了连接状态模型中的otelCollectorStatus字段ServerlessFunction.ts标识遥测是否仍在持续上报connected或已过期disconnected由 ServerlessFunctionService.ts 的markDisconnectedFunctions定期检查超过 15 分钟未收到遥测的函数会被标记为disconnected该阈值刻意高于接入维护栅栏的 5 分钟 TTL避免健康函数被误标。标签与负责人规则的自动应用在Serverless无服务器→ 设置Settings→ 标签规则Label Rules/ 负责人规则Owner Rules中可以配置规则让 OneUptime 为新发现的函数自动附加标签和负责人。这条能力在服务层有明确实现当一条 ServerlessFunction 记录创建成功后ServerlessFunctionService.ts 的onCreateSuccess会依次调用ServerlessFunctionLabelRuleEngineService.applyRulesToServerlessFunction与ServerlessFunctionOwnerRuleEngineService.applyRulesToServerlessFunction将匹配的标签Labels与负责人Owners规则应用到该函数attachLabelsServerlessFunctionService.ts采用增量附加策略——绝不删除已有标签人工在 UI 上设置的标签在持续接入过程中得以保留并用 60 秒的指纹缓存避免稳态接入期的重复写库。常见问题与注意事项令牌安全务必使用 Server 类型摄取密钥并以函数环境变量或平台的密钥服务方式注入不要放在浏览器端可见的代码中。service.name与faas.name的关系同时设置两者的函数会同时出现在Services与Serverless Functions两个视图从接入代码看函数命名优先取faas.name缺省时回退到service.name见 OtelIngestBaseService.ts。首次接入排障若列表中始终为空请检查 OTLP 端点是否可达、x-oneuptime-token是否与摄取密钥一致、以及资源属性中是否包含faas.name。当项目还没有任何函数时列表页会直接内嵌接入引导卡片ServerlessFunctions.tsx其文案与命令均根据你的 OneUptime 地址和摄取密钥动态生成可作对照。关联文档与多语言版本位于 App/FeatureSet/Docs/Content/en/telemetry/serverless-functions.md英文原版及 App/FeatureSet/Docs/Content/de/telemetry/serverless-functions.md本文对应德文版Telemetry 接入整体说明见 App/FeatureSet/Docs/Content/en/telemetry/cloud-environments.md。【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址: https://gitcode.com/GitHub_Trending/on/oneuptime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考