1. 程式人生 > 實用技巧 >編譯Filebeat原始碼

編譯Filebeat原始碼

專案使用了Filebeat,現在需要執行在ARM架構的伺服器上,但是Filebeat官方沒有提供,需要自己編譯一份

filebeat等元件的原始碼地址https://github.com/elastic/beats ,可以選擇需要的版本,然後下載ZIP包來使用,也可以按照下面步驟直接git下載

編譯filebeat需要go語言環境,先安裝go環境

#建立工作目錄
mkdir -p /opt/gowork

#安裝go和git  命令
yum install -y go git

#設定環境變數
echo "export GOROOT=/usr/lib/golang" >> /etc/profile
echo "export GOBIN=\$GOROOT/bin" >> /etc/profile
echo "export GOPATH=/opt/gowork" >> /etc/profile
echo "export PATH=\$PATH:\$GOROOT:\$GOBIN:\$GOPATH" >> /etc/profile

#重新整理環境變數
. /etc/profile

#測試go是否成功,檢視env中GOPATH是否生效
go version
go env

  然後下載原始碼(吐槽一下國內的破網,國外的什麼網站都遮蔽,下載程式碼費了好長時間)

mkdir -p ${GOPATH}/src/github.com/elastic
cd ${GOPATH}/src/github.com/elastic
# 我需要的6.8版本,根據實際情況確定分支
git clone -b 6.8 https://github.com/elastic/beats.git

下載完之後進入filebeat目錄,如果編譯其他元件就進其他目錄,然後執行編譯命令

cd beats/filebeat
make

結果,不出意外的報錯了。。。。undefined: syscall.Dup2

應該是ARM平臺提供的Dup2不好用,好在之前瞭解了一點點go的知識,把他改成Dup3試試,直接根據錯誤資訊修改報錯的檔案,vi ../libbeat/common/file/stderr_other.go,將呼叫的地方改成Dup3

很幸運的編譯出了filebeat的可執行檔案

我們啟動一下試試,正常使用會根據需要修改filebeat.yml,我們現在只試試能不能正常啟動,簡單改了,將log的enabled改成true,其他都默認了

執行測試,可以看到索引模板已經生成,說明我們的filebeat在ARM環境下編譯成功了,撒花~~~~~~~~~~~~~~~~~~~~~