国产 ARM 环境跑 OpenTelemetry Collector 的完整步骤:二进制获取与校验、麒麟 V10 部署、systemd 托管、鲲鹏调优,以及对接国产数据库做存储。
做国产化改造,大家盯得最紧的是应用和数据库,采集层却容易被漏掉。实际上日志、指标、链路的采集组件也一样要跑在国产 CPU 和国产 OS 上,否则数据出口那一环就不算自主可控,你赖以合规的可观测数据,反而从一个外来二进制里流出去了。
OpenTelemetry Collector 本身是 Go 写的,交叉编译到 ARM64 很方便,体积小、依赖少,是信创环境里采集层的合适选择。因为是静态二进制,它绕过了开源工具在麒麟、统信上常遇到的共享库依赖地狱。
官方 Release 提供 otelcol_linux_arm64 二进制包。没有外网的生产环境,可以在内网编译机上下载、校验后再分发:
wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.100.0/otelcol_0.100.0_linux_arm64.tar.gz
sha256sum otelcol_0.100.0_linux_arm64.tar.gz
校验通过后,把 otelcol 放到 /usr/local/bin/。把校验值写进清单,每次部署都能复验,这也是审计团队对自主可控基础设施的常规要求。
麒麟 V10 基于 RPM,但 ARM 版很多仓库包不全,用包管理器装小众工具经常失败。Collector 是静态二进制,几乎不需要额外依赖,直接跑即可:
chmod +x /usr/local/bin/otelcol
otelcol --config /etc/otelcol/config.yaml
建议用 systemd 托管,保证重启后自拉起、崩溃后自动恢复:
[Unit]
Description=OpenTelemetry Collector
After=network.target
[Service]
ExecStart=/usr/local/bin/otelcol --config /etc/otelcol/config.yaml
Restart=always
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
鲲鹏 920 核心多、NUMA 结构明显,两个参数值得关注:
taskset 把 Collector 绑到单个 NUMA 节点,减少跨节点内存访问——这在负载下表现为尾延迟升高。limit_mib 和队列:鲲鹏单核性能弱于 x86 同频,内存缓冲要留够,避免突发流量下丢数据。processors:
memory_limiter:
limit_mib: 1024
spike_limit_mib: 256
batch:
send_batch_size: 16384
timeout: 10s
炬鲸 OBSERVE 支持把元数据与索引落到国产数据库。因为是 MySQL 协议,达梦(MySQL 兼容模式)、OceanBase、TiDB 都可以直接接:
storage:
type: mysql
dsn: "user:pass@tcp(dm8:5236)/observe?charset=utf8mb4"
数据库换掉,应用与采集层代码零改动。这正是从 MySQL 迁到国产数据库风险低的原因:线协议没变,变的只是连接串。
部署完别急着上线,按这个清单自检:
Restart=always 生效压测要打真实的采集链路,别用合成数据糊弄——自主可控审计看的是生产环境真实发生的事,不是演示。