トレジャーデータさんから、fluent bitというものがリリースされました。
FluentBit | Data Collection for Embedded Linux : http://fluentbit.io/
fluentdのような動きをする、C/C++で書かれたプログラムです。 fluentdのように、プラグイン形式でinput/outputの機能を拡張できます。 OSSとしてgithub上で公開されており、Apache 2.0ライセンスです。
https://github.com/fluent/fluent-bit
2015/06/01に開発者が来日し、「Fluentd Meetup 2015 夏」でお披露目されたのが、最初の情報のようです。
http://eventdots.jp/event/495315
http://www.slideshare.net/eventdotsjp/fluentbit
Armadillo-IoTでも採用したいので動かしてみたのですが、Linuxカーネルが古すぎて上手くありませんでした。(残念) Armadillo-IoTのLinuxカーネルは3.14にバージョンアップ予定ですので、3.14カーネル公開後に、再度情報をアップしたいと思います。
とありあえずは、動かしてみたときのメモを。
1. ソースからクロスビルドする手順
fluent bitはCMakeでビルドするので、開発環境(ATE5)にcmakeをインストールする必要があります。
[ATDE ~]$ sudo apt-get install cmake
git hubからソースコードを持ってきて、ビルドします。 CMakeでクロスコンパイルするには、toolchain fileというものを用意してあげる必要があります。
[ATDE ~]$ git clone https://github.com/fluent/fluent-bit.git
[ATDE ~]$ mkdir cross-build install && cd cross-build
[ATDE ~/cross-build]$ vi arm-linux-gnueabi.cmake (toolchain fileの用意。下記からダウンロードしてください。)
[ATDE ~/cross-build]$ cmake -DCMAKE_TOOLCHAIN_FILE=arm-linux-gnueabi.cmake -DCMAKE_INSTALL_PREFIX=../install ..
[ATDE ~/cross-build]$ make && make install
ダウンロード: toolchain file
上記手順を実行すると、installディレクトリにbin/fluent-bitとlib/libfluent-bit.so ができるので、 Armadilloにコピーすれば動作します。
Armadillo上では下記のように実行できます。(libfluen-bit.soは、ライブラリ検索パスの通ったところに置いてください。)
[armadillo ~]# ./fluent-bit -i mem -o stdout
2. 古いカーネルで動かす場合
fluent bitでは、 kernel 2.6.27(glibc 2.9)でサポートされたepoll_create1()を使っているので、 linux 2.6.26ベースのカーネルを採用しているArmadillo-IoTでは、そのままでは動きません。 (segmentation faultとなります。)
epoll_create1()をepoll_create()に書き換えてあげれば、とりあえず動きました。
diff --git a/lib/mk_core/mk_event_epoll.c b/lib/mk_core/mk_event_epoll.c
index ad4b2bc..6ae6e73 100644
--- a/lib/mk_core/mk_event_epoll.c
+++ b/lib/mk_core/mk_event_epoll.c
@@ -36,7 +36,7 @@ static inline void *_mk_event_loop_create(int size)
}
/* Create the epoll instance */
- ctx->efd = epoll_create1(EPOLL_CLOEXEC);
+ ctx->efd = epoll_create(1);
if (ctx->efd == -1) {
mk_libc_error("epoll_create");
mk_mem_free(ctx);
プラグイン形式で拡張できる点が良いですね。今後の展開に期待しています。