0
点赞
收藏
分享

微信扫一扫

datadog agent 多平台编译

二进制编译方案(官方)
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编译器会因为头文件问题报错。
d7c672be904b4ae49c007cb8d9c40c59.png

生产环境不推荐

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)。

举报

相关推荐

0 条评论