ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OneUptime Cloud Environments 实战指南:Beanstalk、App Runner、App Engine、App Service 与 ACI 五大托管平台的遥测接入

OneUptime Cloud Environments 实战指南:Beanstalk、App Runner、App Engine、App Service 与 ACI 五大托管平台的遥测接入 OneUptime Cloud Environments 实战指南Beanstalk、App Runner、App Engine、App Service 与 ACI 五大托管平台的遥测接入【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址: https://gitcode.com/GitHub_Trending/on/oneuptime本篇指南面向需要在三大容器平台之外的托管计算环境AWS Elastic Beanstalk、AWS App Runner、Google App Engine、Azure App Service、Azure Container Instances上接入 OneUptime 遥测的开发者。读完你将掌握每个平台的cloud.platform取值、resource detector 选型与手动属性配置、OTLP 导出器与令牌ingestion token的落地方式并理解 OneUptime 侧如何根据cloud.platform cloud.account.id cloud.region自动归并出一个云环境一行的 Cloud Environment。通用规则环境身份与实例身份从哪里来OneUptime 的Cloud Environments产品遵循一条贯穿所有平台的规则凡是同时携带受管cloud.platform值、cloud.account.id和cloud.region的遥测数据都会落入平台 账号 区域唯一确定的一个环境实例身份属性instance identity attribute则决定Instances视图中一个运行中实例一行。各平台之间的差异只有两点其一是否有 OpenTelemetry resource detector 替你填好这些cloud.*属性其二导出器配置在控制台里的位置。平台cloud.platformcloud.*由谁填入实例身份属性AWS Elastic Beanstalkaws_elastic_beanstalkCollectorelastic_beanstalkec2detectorNodeawsdetectorhost.id需删除部署级service.instance.idAWS App Runneraws_app_runner手动无 detectorhost.nameGoogle App Enginegcp_app_enginegcpdetectorCollector 与所有 SDKfaas.instanceAzure App Serviceazure_app_serviceCollectorazureappserviceNode / .NETazuredetectorcloud.account.id手动补service.instance.id回退host.idAzure Container Instancesazure_container_instances手动无 detectorhost.name源码中的单一事实来源OneUptime 把这些平台的取值、检测方式与实例属性集中定义在 CloudPlatform.ts 中文件头注释明确说明它是 ingest 门禁OtelIngestBaseService.autoDiscoverCloudResource、环境键/显示名、仪表盘创建表单、应用内 Connect 平台选择器、以及文档页面的单一事实来源ManagedCloudPlatform 枚举 列出全部受管托管平台取值即 OpenTelemetry 语义约定的cloud.platform字符串。裸虚拟机aws_ec2、gcp_compute_engine、azure_vm被刻意排除在外——它们停留在HostsServerlessaws_lambda等单独列为FaasCloudPlatform避免与 Cloud Environments 抢同一份资源。每个平台的描述符MANAGED_CLOUD_PLATFORMS包含detection: detector | manual与instanceAttribute两个字段——上表由谁填入和实例身份两列正是从这里来的例如 Beanstalk 为host.id、App Runner 与 ACI 为host.name、App Engine 为faas.instance。环境键由 buildCloudEnvironmentKey 在一处统一构造三段platform|accountId|region以|连接缺失段保留为空如aws_ecs||us-east-1而不是丢弃——这样某个部署后来补上账号 ID 时不会静默地裂成两个环境。手动创建的环境必须携带同一个resourceIdentifieringest 才能匹配到既有环境而非创建重复项。新发现的环境名由 buildCloudEnvironmentName 生成形如AWS ECS · us-east-1 · 123456789012。因此任何环境裂开实例合到一行平台没识别出来的问题都可以回到这三个函数上核对属性是否齐全、是否拼写一致。两个永远需要的先决条件以下每个小节都假设你已具备一个Server类型的 ingestion token取自Project Settings → Telemetry APM → Ingestion Keys一个用 OpenTelemetry SDK 插桩的应用。自托管部署请将https://oneuptime.com/otlp替换为https://YOUR-ONEUPTIME-HOST/otlp。令牌在所有平台上都是机密。每一节都指明了对应平台的 secret store。把 token 直接写进普通环境变量等于让任何有配置读权限的人都能读到它。AWS Elastic Beanstalkcloud.platform取值为aws_elastic_beanstalk。Beanstalk detector 在实例上读取/var/elasticbeanstalk/xray/environment.conf设置cloud.platform、service.instance.id、service.version与环境名但它不知道账号与区域所以要搭配 EC2 detector 补齐。它的service.instance.id是部署deploymentID——同一部署的所有实例共享——如果原样保留会把所有实例在Instances里折叠成一行用resourceprocessor 的action: delete删掉它EC2 detector 的host.id实例 ID就升格为实例身份。Collector 中先设置的 detector 赢所以保持elastic_beanstalk排在ec2之前processors: resourcedetection: detectors: [env, elastic_beanstalk, ec2] timeout: 5s exporters: otlphttp/oneuptime: endpoint: https://oneuptime.com/otlp headers: x-oneuptime-token: ${env:ONEUPTIME_TOKEN}在实例上用.platform/hooks/postdeploy/脚本或.ebextensions运行 Collector脚本安装otelcol-contrib包并写入上面的配置文件token 来自环境属性或通过实例 profile 从 Secrets Manager 读取。Node 应用可以跳过 Collector 直接用 SDK detector——OTEL_NODE_RESOURCE_DETECTORSenv,host,os,aws已包含 Beanstalk 与 EC2 detector——然后检查一条 trace 里的 resource 属性如果cloud.platform输出成了aws_ec2说明你的 SDK 版本的合并顺序让 EC2 detector 占了上风此时 Collector 路径更可靠。控制台步骤AWS Console → Elastic Beanstalk → Environments → 你的环境 → Configuration。在Updates, monitoring, and logging分类点Edit滚动到Environment properties。添加OTEL_SERVICE_NAME、OTEL_EXPORTER_OTLP_ENDPOINT实例上有 Collector 时填http://localhost:4318没有则填https://oneuptime.com/otlp不用 Collector 时再加OTEL_EXPORTER_OTLP_HEADERSx-oneuptime-tokenYOUR_TELEMETRY_INGESTION_TOKEN和OTEL_NODE_RESOURCE_DETECTORSenv,host,os,aws。环境属性保存在环境配置里而非 secret store——token 更推荐由 hook 脚本用实例 profile 从 Secrets Manager 读取该 profile 需要secretsmanager:GetSecretValue权限。Apply。Beanstalk 会带上新属性重启应用。网络私有子网内的实例需要 NAT 网关实例安全组必须放行到 OneUptime 主机的 TCP 443 出站。AWS App Runnercloud.platform取值为aws_app_runner。没有任何 detector属性全部手动设置。App Runner 支持把 Secrets Manager或 SSM Parameter Store的 secret 注入为环境变量**实例角色instance role**需要secretsmanager:GetSecretValue权限OTEL_SERVICE_NAMEcheckout-api OTEL_EXPORTER_OTLP_ENDPOINThttps://oneuptime.com/otlp OTEL_EXPORTER_OTLP_PROTOCOLhttp/protobuf # Secret: 把整个 header 作为 secret 值存储 OTEL_EXPORTER_OTLP_HEADERSx-oneuptime-tokenYOUR_TELEMETRY_INGESTION_TOKEN OTEL_RESOURCE_ATTRIBUTEScloud.provideraws,cloud.platformaws_app_runner,cloud.regionus-east-1,cloud.account.id123456789012 OTEL_NODE_RESOURCE_DETECTORSenv,host,os其中hostdetector 提供host.name——容器的 hostname在 App Runner 实例间唯一——OneUptime 用它作为实例身份与源码描述符中instanceAttribute: host.name一致。控制台步骤AWS Console → App Runner → Services → 你的服务 → Configuration → Configure service在Configuration标签页点Edit。在Environment variables下点Add environment variable逐个添加上面的普通值。token 添加OTEL_EXPORTER_OTLP_HEADERSSource选Secrets Manager并填 secret ARN再在Security → Instance role选一个有读取权限的角色。Save changesApp Runner 会部署一个新版本。网络没有 VPC connector 的服务直接访问互联网Outgoing network traffic: Custom VPC时出站走 VPC需要 NAT 网关以及安全组中放行到 OneUptime 主机 TCP 443 的出站规则。Google App Enginecloud.platform取值为gcp_app_engine。GCP detector 依据GAE_SERVICE/GAE_VERSION/GAE_INSTANCE与 metadata server 识别 App Engine standard 和 flexible 环境并设置cloud.account.id即 project、cloud.region、faas.name、faas.version和faas.instance。与 Cloud Run 一样faas.name意味着每个 App Engine service 也会同时出现在Serverless Functions下而 Cloud Environment 一侧按 project 与 region 归组。各语言启用 GCP detector 的方式语言启用 GCP detectorNode.jsOTEL_NODE_RESOURCE_DETECTORSenv,host,os,gcpPythonpip install opentelemetry-resourcedetector-gcp然后OTEL_EXPERIMENTAL_RESOURCE_DETECTORSgcp_resource_detectorJava-Dotel.resource.providers.gcp.enabledtrueGogo.opentelemetry.io/contrib/detectors/gcp→gcp.NewDetector().NETOpenTelemetry.Resources.Gcp→.AddGcpDetector()App Engine 没有控制台的 env 编辑器环境变量写在app.yaml里。runtime: nodejs22 env_variables: OTEL_SERVICE_NAME: checkout-api OTEL_EXPORTER_OTLP_ENDPOINT: https://oneuptime.com/otlp OTEL_EXPORTER_OTLP_PROTOCOL: http/protobuf OTEL_NODE_RESOURCE_DETECTORS: env,host,os,gcp # 不要把真实值提交进仓库。在 CI 里做模板替换 # 或者启动时用 Secret Manager client 读取 secret。 OTEL_EXPORTER_OTLP_HEADERS: x-oneuptime-tokenYOUR_TELEMETRY_INGESTION_TOKEN步骤把 token 存入Secret Managergcloud secrets create oneuptime-ingestion-token --data-file-并给 App Engine 服务账号授予roles/secretmanager.secretAccessor。二选一在部署流水线中把真实值替换进app.yaml提交进仓库的文件保留占位符或者启动时读取projects/PROJECT_ID/secrets/oneuptime-ingestion-token/versions/latest在代码里把它传给 exporter 的headers选项。gcloud app deploy。控制台中App Engine → Versions会显示新版本App Engine → Services显示的 service 就是 Serverless Functions 下会出现的名字。网络standard 环境直接访问互联网flexible 环境的实例位于 VPC 内若子网没有外部 IP 需要配置 Cloud NAT防火墙放行到 OneUptime 主机的 TCP 443 出站。Azure App Servicecloud.platform取值为azure_app_service。Node 与 .NET 的 Azure detector以及 Collector 的azureappservicedetector读取 App Service 设置的WEBSITE_*变量填入cloud.platform、cloud.region、service.instance.id即WEBSITE_INSTANCE_ID、deployment.environmentslot与host.id。一个容易踩的坑在源码里有明确解释SDK detector 把平台拼成带点的azure.app_service而语义约定与 Collector 的 Azure detector 用下划线。OneUptime 在 ingest 时做了重写——见 CLOUD_PLATFORM_ALIASES 中azure.app_service: ManagedCloudPlatform.AzureAppService一项注释指出没有这张表时同一订阅里一个团队用 Node detector、另一个团队用 Collector sidecar会落进两个不同的环境。重写发生在 normalizeCloudPlatform含防原型键污染的 own-property 查找并且重写的是属性本身保证环境行上与每条 span、log、metric 上存的都是同一拼写——因为仪表盘按精确属性匹配圈定环境内的遥测。另外以上 detector 都不设置cloud.account.id需要手动补订阅 ID否则环境键中账号段为空对应上文缺失段保留为空的 key 行为OTEL_SERVICE_NAMEcheckout-api OTEL_EXPORTER_OTLP_ENDPOINThttps://oneuptime.com/otlp OTEL_EXPORTER_OTLP_PROTOCOLhttp/protobuf OTEL_EXPORTER_OTLP_HEADERSx-oneuptime-tokenYOUR_TELEMETRY_INGESTION_TOKEN OTEL_RESOURCE_ATTRIBUTEScloud.account.id00000000-0000-0000-0000-000000000000 # Node.js: OTEL_NODE_RESOURCE_DETECTORSenv,host,os,azure.NET添加OpenTelemetry.Resources.Azure并调用.ConfigureResource(r r.AddAzureAppServiceDetector())。其他语言在OTEL_RESOURCE_ATTRIBUTES中设置cloud.providerazure,cloud.platformazure_app_service,cloud.regionregion并在代码里从WEBSITE_INSTANCE_ID取service.instance.id。控制台步骤Azure portal → App Services → 你的应用 → Settings → Environment variables旧版门户叫Configuration → Application settings。 Add逐个添加上面的变量。token 用Key Vault reference作为值——Microsoft.KeyVault(SecretUrihttps://my-vault.vault.azure.net/secrets/oneuptime-otlp-headers/)——前提是启用应用的系统分配的 managed identitySettings → Identity并授予其 vault 上的Key Vault Secrets User角色。secret 内容存整个x-oneuptime-token...header。Apply后Confirm——应用会带新配置重启。Deployment slot 各有独立配置如果只有一个 slot 应该发送遥测把 token 标记为deployment slot setting。网络App Service 默认直连互联网开启VNet integration Route All后VNet 需要 NAT 网关或一条放行到 OneUptime 主机 TCP 443 的防火墙路由。Azure Container Instancescloud.platform取值为azure_container_instances。没有 detector属性手动设置。容器组的 env 在创建时固定修改意味着重建容器组——token 用--secure-environment-variables这样az container show不会回显它az container create \ --resource-group my-rg \ --name checkout-api \ --image myregistry.azurecr.io/checkout-api:1.4.2 \ --location eastus \ --environment-variables \ OTEL_SERVICE_NAMEcheckout-api \ OTEL_EXPORTER_OTLP_ENDPOINThttps://oneuptime.com/otlp \ OTEL_EXPORTER_OTLP_PROTOCOLhttp/protobuf \ OTEL_RESOURCE_ATTRIBUTEScloud.providerazure,cloud.platformazure_container_instances,cloud.regioneastus,cloud.account.id00000000-0000-0000-0000-000000000000 \ OTEL_NODE_RESOURCE_DETECTORSenv,host,os \ --secure-environment-variables \ OTEL_EXPORTER_OTLP_HEADERSx-oneuptime-tokenYOUR_TELEMETRY_INGESTION_TOKENhostdetector 的host.name容器组的 hostname是实例身份。Sidecar Collector 同样适用——容器组是类似 ECS task 的多容器单元——与 Azure Container Apps 文档相同的detectors: [env]OTEL_RESOURCE_ATTRIBUTES模式。控制台步骤Azure portal → Container Instances → Create填写Basics页资源组、名称、区域、镜像。Advanced页的Environment variables下逐项添加OTEL_EXPORTER_OTLP_HEADERS勾选Mark as secure: Yes值此后在门户与 API 中都不可见。Review create → Create。之后要改任何变量只能用新值删除并重建容器组。网络带公网 IP 的容器组直连互联网部署进 VNet 子网的容器组出站只走 VNet 路由——加 NAT 网关或放行防火墙 / NSG 到 OneUptime 主机的 TCP 443。验证Verify无论哪个平台先查 token再看环境是否出现curl -i https://oneuptime.com/otlp/v1/validate \ -H x-oneuptime-token: YOUR_TELEMETRY_INGESTION_TOKEN返回200且valid: true表示 token 能解析到一个 project401表示 token 未知、已被吊销或拼错。首条 span 或 metric 到达后一分钟内环境会出现在Cloud → All Environments名字即平台、区域、账号的组合由buildCloudEnvironmentName生成。故障排查通用问题见 Cloud Troubleshooting 文档尤其关注三类与本页平台直接相关的症状appears under Hosts某个 VM detector 在cloud.platform竞态中胜出例如 Beanstalk 场景下 EC2 detector 压过了 Beanstalk detector环境被归到了 Hostsappears only under ServerlessApp Engine 没启用 GCP detector只有faas.name而没有完整环境属性资源只落进 Serverless Functionsduplicate environmentscloud.account.id在部分部署上设置、另一部分没设置——对应环境键中账号段有值与为空platform||region的分裂这正是buildCloudEnvironmentKey保留空段设计要提醒你的补齐属性前两个键不会合并。小结一页速查平台关键操作最容易出错处BeanstalkCollector detector 顺序env, elastic_beanstalk, ec2resourceprocessor 删service.instance.id保留部署级service.instance.id导致实例折叠SDK 合并顺序让平台变成aws_ec2App RunnerOTEL_RESOURCE_ATTRIBUTES手填四项 Secrets Manager 注入 header实例 role 缺secretsmanager:GetSecretValueApp Engineapp.yaml里启用gcpdetectortoken 走 Secret Manager真实 token 提交进仓库flexible 环境漏配 Cloud NATApp Servicedetector 读WEBSITE_*手动补cloud.account.idtoken 用 Key Vault reference漏补账号 ID 导致环境键账号段为空ACIaz container create--secure-environment-variables误以为 env 可热改只能重建token 出现在az container show输出中接入完成后用curl https://oneuptime.com/otlp/v1/validate校验 token再到Cloud → All Environments确认环境名与账号、区域一致即代表cloud.*属性链完整无误。【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址: https://gitcode.com/GitHub_Trending/on/oneuptime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表