二进制编译方案(官方)
https://github.com/DataDog/datadog-agent/blob/main/docs/dev/agent_build.md
简单总结
官方的开发手册上给出了build bianary和build package两种方式。按照介绍,最佳实践是开发者build packages,用户从官网下载一键安装脚本进行安装。
以下内容主要是结合现有的开发测试资源,在osx、docker、centos 搭建编译二进制环境。
1 osx 编译
推荐场景:自测
编译datadog agent需要开启cgo (调用C的一些库,比如内嵌Cpython解释器 调用zlib)
1 mac上交叉编译linux可执行文件,clang编译器会因为头文件问题报错。
生产环境不推荐
brew install FiloSottile/musl-cross/musl-cross
virtualenv newenv
pip install -r requirements.txt
invoke install-tools
invoke deps
GOOS=linux GOARCH=amd64 CC=x86_64-linux-musl-gcc invoke agent.build
这个方式编译出来的agent需要再目标机器上也安装musl库,比如centos上要运行编译的agent 需要执行
wget https://copr.fedorainfracloud.org/coprs/ngompa/musl-libc/repo/epel-7/ngompa-musl-libc-epel-7.repo \
-O /etc/yum.repos.d/ngompa-musl-libc-epel-7.repo
yum install -y musl-libc-static
2 docker编译
推荐场景 :自动化测试,或者目标环境允许使用docker采集
如果目标场景允许agent 容器运行,采用alpine+musl镜像(763M)比datadog官方提供的agent镜像(832M)还要小。 去掉开发环境的镜像,alpine+musl还可以进一步减小。
ROM alpine:3.15
RUN apk add --no-cache --update-cache --repository http://nl.alpinelinux.org/alpine/v3.15/main \
bash \
file \
xz \
tzdata \
ca-certificates \
git \
curl \
python3 \
python3-dev \
go \
make \
cmake \
g++ \
libexecinfo \
libexecinfo-dev \
elogind-dev \
libc-dev \
libgcc \
libstdc++ \
libc6-compat \
openssh-client \
mysql-client \
&& rm -f /usr/bin/godoc /usr/lib/go/bin/godoc \
&& rm -f /usr/bin/darwin* /usr/bin/freebsd* /usr/bin/openbsd* /usr/bin/windows* \
&& rm -rf /usr/lib/go/bin/darwin* /usr/lib/go/bin/freebsd* /usr/lib/go/bin/openbsd* /usr/lib/go/bin/windows* \
&& rm -rf /var/cache/apk/*
ENV GOPATH=/go PATH=$GOPATH/bin:$PATH
RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH"
镜像大小763MB,包含了编译需要的glibc、golang、python3环境 。
启动容器:
cd dd-agent/
docker run -it -v $PWD:/dd-agent flashcat/golang bash
在镜像中编译agent
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
GOPROXY=https://goproxy.cn invoke install-tools
GOPROXY=https://goproxy.cn invoke deps
invoke agent.build
3 centos8 编译
测试机上搭建编译环境
# 自带的python版本是3.6 ,需要升级python版本
yum install gcc openssl-devel bzip2-devel libffi-devel
wget https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tgz
tar zxvf Python-3.7.9.tgz
cd Python-3.7.9/
./configure --enable-optimizations CFLAGS=-fPIC
sudo make altinstall
进入datadog-agent代码目录
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
GOPROXY=https://goproxy.cn invoke install-tools
GOPROXY=https://goproxy.cn invoke deps
invoke agent.build
datadog agent 最佳实践
生产环境安装(用户侧)
物理机环境提供一键安装脚本。*nix系统安装脚本是同一个,脚本可以识别不同系统,拉取不同的包进行安装,比如deb、rpm、pkg等。
安装脚本 https://s3.amazonaws.com/dd-agent/scripts/install_script.sh
安装包release(开发侧)
datadog提供了一个基础镜像 ,这个基础镜像通过源码编译方式解决glibc、cmake、go、python的依赖。基础镜像有6.2G (自己制作一个镜像是为了节省搬运数据时间,后续我们也可以直接用他们的镜像)
基础镜像制作 https://github.com/DataDog/datadog-agent-buildimages
通过omnibus 指定不同参数,运行不同的task制作不同类型的安装包(dsi/pkg/deb/rpm)。