现象
149(10.10.41.149)上 APM 接入脚本的探针下载接口返回 404,不是证书或路由问题。
以 Python 为例(default 云区域 NODE_SERVER_URL=https://10.10.41.149:443):
https://10.10.41.149:443/api/v1/apm/open_api/probe/download/opentelemetry-python-wheels.tar.gz
init 前响应:
{"code": "probe_artifact_not_found", "detail": "探针文件不存在,请先在服务端初始化探针制品。"}
下载接口只读 NATS JetStream Object Store,不读镜像磁盘。Java / Node / Go / .NET 同一接口同样 404。
根因
发布已经把 Java / Python / Node / Go 离线包打进 fusion-collector 镜像,但部署准备期没有执行 apm_probe_init,对象存储里没有 apm/probe/ key。.NET 连镜像归档都还没有。
核对时间 2026-09-02:
| 语言 |
collector 镜像 /opt/release/apm/ |
NATS apm/probe/ |
| Java |
有 java/opentelemetry-javaagent.jar(25,107,554 字节) |
无 |
| Python |
有 python/opentelemetry-python-wheels.tar.gz(9,289,044 字节,distro 0.65b0 / SDK 1.44.0) |
无(后由验证临时灌入,见下) |
| Node.js |
有 nodejs/opentelemetry-js-auto.tgz(9,164,283 字节) |
无 |
| Go |
有 go/opentelemetry-go-sdk.zip(46,109,361 字节) |
无 |
| .NET |
无 dotnet/ 目录,镜像未打入该包 |
无 |
compose-server-1 没有 /opt/release/apm/。NATS bucket bklite 当时 19 个对象全是 Controller / Collector / installer。
约定见 docs/operations/apm-probe-artifact-release.md 与 #5097:归档离线包之后,必须在 NATS 已可用时对每个制品执行一次 apm_probe_init。该命令禁止放进 Server startup.sh / batch_init。
把文件放进 collector 镜像 ≠ 初始化。少这一步,接入页 curl --fail 会失败,但不阻断 Server 启动,所以容易漏检。
已做的临时处理(仅 Python)
为验证下载链路,在 149 上只用 collector 里那份 Python 包执行了一次:
python manage.py apm_probe_init \
--artifact opentelemetry-python-wheels.tar.gz \
--file_path /tmp/opentelemetry-python-wheels.tar.gz
之后同一下载地址 HTTP 200,SHA-256 与镜像原包一致:
cfb8e533ddfd07a64f98f5173332d9e2f36c65ea304a1b67e186033d24b8bd2a
对象 key:apm/probe/python/opentelemetry-python-wheels.tar.gz。Java / Node / Go / .NET 未灌。这不是流水线修复。
请运维补的步骤
1. 前四种:镜像已有包,补初始化
流水线在 NATS 就绪后,对镜像里已有的四份制品执行:
python manage.py apm_probe_init \
--artifact opentelemetry-javaagent.jar \
--file_path /opt/release/apm/java/opentelemetry-javaagent.jar
python manage.py apm_probe_init \
--artifact opentelemetry-python-wheels.tar.gz \
--file_path /opt/release/apm/python/opentelemetry-python-wheels.tar.gz
python manage.py apm_probe_init \
--artifact opentelemetry-js-auto.tgz \
--file_path /opt/release/apm/nodejs/opentelemetry-js-auto.tgz
python manage.py apm_probe_init \
--artifact opentelemetry-go-sdk.zip \
--file_path /opt/release/apm/go/opentelemetry-go-sdk.zip
--file_path 以实际可被 Server 进程读到的路径为准(当前文件在 collector 镜像里,不在 Server 镜像里,不能假设 compose-server-1 上有 /opt/release/apm/)。命令覆盖同名对象,可重复执行。
2. .NET:先归档官方包,再初始化
collector 镜像里还没有 .NET 制品。请按 #5114 归档 opentelemetry-dotnet-instrumentation v1.16.0 的 Linux x86_64 glibc 包。
官方文件名带仓库前缀,短名 linux-glibc-x64.zip 不存在,GitHub 会 404:
https://github.com/open-telemetry/opentelemetry-dotnet-instrumentation/releases/download/v1.16.0/opentelemetry-dotnet-instrumentation-linux-glibc-x64.zip
下载后改名为制品名 opentelemetry-dotnet-auto-linux-glibc-x64.zip,建议放到 /opt/release/apm/dotnet/(或流水线等价归档路径),然后:
python manage.py apm_probe_init \
--artifact opentelemetry-dotnet-auto-linux-glibc-x64.zip \
--file_path /path/to/opentelemetry-dotnet-auto-linux-glibc-x64.zip
对象 key 必须是 apm/probe/dotnet/opentelemetry-dotnet-auto-linux-glibc-x64.zip。不要合并 musl / ARM64 / Windows,不要用 otel-dotnet-auto-install.sh。
验收
五个下载 URL 均为 HTTP 200、非空,SHA-256 与归档一致,且 NATS 中能看到对应 key:
{NODE_SERVER_URL}/api/v1/apm/open_api/probe/download/opentelemetry-javaagent.jar
{NODE_SERVER_URL}/api/v1/apm/open_api/probe/download/opentelemetry-python-wheels.tar.gz
{NODE_SERVER_URL}/api/v1/apm/open_api/probe/download/opentelemetry-js-auto.tgz
{NODE_SERVER_URL}/api/v1/apm/open_api/probe/download/opentelemetry-go-sdk.zip
{NODE_SERVER_URL}/api/v1/apm/open_api/probe/download/opentelemetry-dotnet-auto-linux-glibc-x64.zip
149 上 NODE_SERVER_URL 为 https://10.10.41.149:443。
现象
149(
10.10.41.149)上 APM 接入脚本的探针下载接口返回 404,不是证书或路由问题。以 Python 为例(default 云区域
NODE_SERVER_URL=https://10.10.41.149:443):init 前响应:
{"code": "probe_artifact_not_found", "detail": "探针文件不存在,请先在服务端初始化探针制品。"}下载接口只读 NATS JetStream Object Store,不读镜像磁盘。Java / Node / Go / .NET 同一接口同样 404。
根因
发布已经把 Java / Python / Node / Go 离线包打进
fusion-collector镜像,但部署准备期没有执行apm_probe_init,对象存储里没有apm/probe/key。.NET 连镜像归档都还没有。核对时间 2026-09-02:
/opt/release/apm/apm/probe/java/opentelemetry-javaagent.jar(25,107,554 字节)python/opentelemetry-python-wheels.tar.gz(9,289,044 字节,distro 0.65b0 / SDK 1.44.0)nodejs/opentelemetry-js-auto.tgz(9,164,283 字节)go/opentelemetry-go-sdk.zip(46,109,361 字节)dotnet/目录,镜像未打入该包compose-server-1没有/opt/release/apm/。NATS bucketbklite当时 19 个对象全是 Controller / Collector / installer。约定见
docs/operations/apm-probe-artifact-release.md与 #5097:归档离线包之后,必须在 NATS 已可用时对每个制品执行一次apm_probe_init。该命令禁止放进 Serverstartup.sh/batch_init。把文件放进 collector 镜像 ≠ 初始化。少这一步,接入页
curl --fail会失败,但不阻断 Server 启动,所以容易漏检。已做的临时处理(仅 Python)
为验证下载链路,在 149 上只用 collector 里那份 Python 包执行了一次:
之后同一下载地址 HTTP 200,SHA-256 与镜像原包一致:
对象 key:
apm/probe/python/opentelemetry-python-wheels.tar.gz。Java / Node / Go / .NET 未灌。这不是流水线修复。请运维补的步骤
1. 前四种:镜像已有包,补初始化
流水线在 NATS 就绪后,对镜像里已有的四份制品执行:
--file_path以实际可被 Server 进程读到的路径为准(当前文件在 collector 镜像里,不在 Server 镜像里,不能假设compose-server-1上有/opt/release/apm/)。命令覆盖同名对象,可重复执行。2. .NET:先归档官方包,再初始化
collector 镜像里还没有 .NET 制品。请按 #5114 归档
opentelemetry-dotnet-instrumentationv1.16.0 的 Linux x86_64 glibc 包。官方文件名带仓库前缀,短名
linux-glibc-x64.zip不存在,GitHub 会 404:下载后改名为制品名
opentelemetry-dotnet-auto-linux-glibc-x64.zip,建议放到/opt/release/apm/dotnet/(或流水线等价归档路径),然后:对象 key 必须是
apm/probe/dotnet/opentelemetry-dotnet-auto-linux-glibc-x64.zip。不要合并 musl / ARM64 / Windows,不要用otel-dotnet-auto-install.sh。验收
五个下载 URL 均为 HTTP 200、非空,SHA-256 与归档一致,且 NATS 中能看到对应 key:
149 上
NODE_SERVER_URL为https://10.10.41.149:443。