LoginSignup
1
1

More than 5 years have passed since last update.

NanoPi NEO用にfluent-bitをクロスビルドする

Last updated at Posted at 2018-02-13

fluent-bitとは

Fluentdのクライアントの軽量版。Fluentdはrubyで書かれていますが、fluent-bitは小さなシステム用にCで書かれています。
これを使うと、いろいろなログデータを簡単にサーバー側にアップロードすることができます。
センサーの計測データはもちろんですが、kernel log, syslog, cpu負荷、memory使用状況なども全部送信しておくと障害解析に役立ちます。

クロスビルド

今回はNanoPi NEOを題材にしますが、クロスコンパイラさえあれば他のボード向けにも同様にできます。

クロスコンパイラの準備

クロスコンパイラにはbuildrootで作成したarm-buildroot-linux-uclibcgnueabihf-gcc を使用します。buildrootのソースディレクトリの下のoutput/host/usr/bin にPATHを通しておきます。

fluent-bitのソースの入手

fluent-bitのgitリポジトリからとってきます。
今回は最新版でなくて、他のプロジェクトで使用経験のあるv0.11.x を使用します。

git clone https://github.com/fluent/fluent-bit.git
cd fluent-bit
git checkout -b v0.11 v0.11.17

クロスビルド

CMakeはあまり使ったことがなくて作法がよくわかりませんでしたが、試行錯誤した後、次のようにすればソースファイルを一切変更しなくてもクロスビルドできることがわかりました。

cd build
GNU_HOST=arm-buildroot-linux-uclibcgnueabihf
CC=${GNU_HOST}-gcc CXX=${GNU_HOST}-g++ cmake -D GNU_HOST=$GNU_HOST ..
make

インストール

デバッガをあてる時のことを想定して、シンボル情報付きの実行ファイルを _gのsuffixをつけてコピーし、stripしたものを実機に持っていくことにします。

$ cd bin
$ file fluent-bit 
fluent-bit: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-uClibc.so.0, not stripped
$ cp fluent-bit fluent-bit_g
$ arm-buildroot-linux-uclibcgnueabihf-strip fluent-bit
$ ls -l fluent-bit*
-rwxrwxr-x 1 koba koba 2420796 Feb 13 02:41 fluent-bit
-rwxrwxr-x 1 koba koba 3613964 Feb 13 02:41 fluent-bit_g
$ ls -lh fluent-bit*
-rwxrwxr-x 1 koba koba 2.4M Feb 13 02:41 fluent-bit
-rwxrwxr-x 1 koba koba 3.5M Feb 13 02:41 fluent-bit_g
$ 

このfluent-bit を実機の/usr/local/binにコピーすればインストール完了。

軽く動作確認

NanoPi NEOで

# /usr/local/bin/fluent-bit -i mem -o stdout
Fluent-Bit v0.11.17
Copyright (C) Treasure Data

[1970/01/01 00:56:57] [ info] [engine] started
[0] mem.0: [3418, {"Mem.total"=>510556, "Mem.used"=>23276, "Mem.free"=>487280, "Swap.total"=>0, "Swap.used"=>0, "Swap.free"=>0}]
[1] mem.0: [3419, {"Mem.total"=>510556, "Mem.used"=>23276, "Mem.free"=>487280, "Swap.total"=>0, "Swap.used"=>0, "Swap.free"=>0}]
[2] mem.0: [3420, {"Mem.total"=>510556, "Mem.used"=>23276, "Mem.free"=>487280, "Swap.total"=>0, "Swap.used"=>0, "Swap.free"=>0}]
[3] mem.0: [3421, {"Mem.total"=>510556, "Mem.used"=>23276, "Mem.free"=>487280, "Swap.total"=>0, "Swap.used"=>0, "Swap.free"=>0}]
^C[engine] caught signal
# 

fluentd に送信できることも確認しました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1