LoginSignup
4
2

More than 5 years have passed since last update.

mackerel-agentをLinux/MIPS32環境で動かしてみた

Last updated at Posted at 2017-08-21

GoのMIPS32 soft-float対応が来たぞー(1.9に入るとは言っていない) - Qiita」で紹介した通り、Goで書かれたコードがFPUなしのMIPS32環境で動くようになりました。

そこで、ブロードバンドルータ上でmackerel-agentを動かしてみます。ブロードバンドルータのCPU(SoC)は32bit ARMか32bit MIPSのどちらかが使われていることが多いのですが、今回のターゲットマシンではMIPSが採用されています。また、この環境ではブロードバンドルータ向けのLinuxディストリビューションであるLEDE(OpenWrtのfork)が動いています。

以下、参考画像

2017-05-08 11.44.01.jpg

ビルド

単にmake buildとしてもうまくいかなかったので、Makefileを眺めつつ下記の手順でビルドしました。ここで使うgoバイナリはMIPS32向けsoftfloatパッチが当たったものです。また、バイナリサイズ削減のためMakefileを書き換えてBUILD_LDFLAGS-s -wを追加しています。

$ git clone https://github.com/mackerelio/mackerel-agent.git
$ cd mackerel-agent
$ make generate
$ GOOS=linux GOARCH=mips GOMIPS=softfloat make build

ただし、shirou/gopsutilのビルドで怒られるので、host/host_linux_mips.goを適当に作っています。shirou/gopsutilにPull Requestを取り込んでもらったので、現在は特にトラブルなくビルドができると思います。

ビルドが成功すると、build/以下にバイナリができます。

$ ls -la build/mackerel-agent
-rwxr-xr-x 1 hnw staff 4502656  8 21 08:07 build/mackerel-agent

バイナリサイズは4.5MB。ブロードバンドルータのストレージ(容量の小さいNOR型フラッシュメモリが多い)に置くには大きめですね。

実行バイナリを実行可能なまま圧縮するツールUPXがlinux/mipsにも対応しているので、これを適用してサイズ圧縮を試みてみましょう。

$ upx build/mackerel-agent
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2017
UPX 3.94        Markus Oberhumer, Laszlo Molnar & John Reiser   May 12th 2017

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
   4502656 ->   1607704   35.71%   linux/mips    mackerel-agent

Packed 1 file.

1.6MBまで圧縮できました。これならOpenWrt/LEDE環境でもギリギリ許容範囲かもしれません。

UPXのオプション バイナリサイズ 起動時間
(元のバイナリ) 4.3MB 0.05s
upx -7 (default) 1.6MB 0.25s
upx --best 1.5MB 0.25s
upx --brute 1.1MB 0.75s

同じバイナリについてUPXのコマンドラインを変えながら色々試してみましたが、--bestがバイナリサイズと展開時間のバランスが一番良い印象です。

実際に動かしてみる

LEDEが動いているブロードバンドルータに上記バイナリをコピーして動かしてみました。設定ファイル
/etc/mackerel-agent/mackerel-agent.confの変更点は下記になります。

root = "/etc/mackerel-agent/status"
apikey = "[organizationに対応するAPIKEY]"

[filesystems]
ignore = "/dev/root"

rootの設定を変更しているのは、デフォルトのままだと再起動のたびに毎回ホストIDが変わってしまう問題への対処です。OpenWrt/LEDEでは/varがtmpfsで実現されているので、この直下にファイルを置くと再起動時に必ず消されてしまうのです。

https://mackerel.io を見ると問題なく動いていることがわかります。

mackerel1.png

mackerel3.png

agent自体のCPU負荷は無視できる程度に小さい印象です。

image.png

ネットワーク通信が増えるとsoftirqが跳ねる、など学びがありますね(自力でLinuxルータ立てたことがない人の意見)。また、LuCI(OpenWrt/LEDEのWeb管理画面)だけでCPUを40%程度まで食うこともわかります1

mackerel2.png

ストレージが小さすぎて0.0GB表示になってしまうのはご愛敬でしょう(実際のストレージサイズは28.3MBと2.3MBです)。


  1. グラフで9:45より前はWeb管理画面に接続していました。ブラウザを閉じた途端にルータのCPU消費が減っているのがわかります。 

4
2
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
4
2