QNAPのNAS「TS-469L」をmackerelでモニタリングする。
TS-496Lのディスク使用推移や残量などを収集しグラフで見られるようにしたいと思い、検索したところ、mackerelを使うことにしました。
mackerelはエージェントプログラムを対象となるサーバで動作させ、情報収集し、結果をサーバに送るタイプのもので、CentOSやUbuntu、Windowsを対象にしています。→サポート動作環境
QNAPのOSはCentOSやUbuntuと同じく、Linuxですが、独自のディストリビューションになっており、dfコマンドやunameコマンドのオプションに違いがあるため、公式のエージェントプログラムはそのまま動きません。
そのため、何ら頭の手を加える必要があるのですが、すでにQNAPのNAS上でエージェントプログラムを動かしている先人がいらっしゃいました。
この記事では、VirtualBoxの仮想環境をvagrantで作成し、その上にDockerでmackerel-agentのビルド環境を構築、ビルドを行います。
0.必要なもの
- VirtualBox … 作業PCはWindowsですが、mackerel-agentをビルドする都合上Linuxが必要なため、VirtualBoxを使用する
- Vagrant … VirtualBoxを制御するため
- GitもしくはSourceTreeなどのGitクライアント … mackerel-agentの取得に
- SSHクライアント(PuTTYなど) … NAS上で作業するため
- WinSCPなどのSSH(SCP,SFTP)で転送できるソフト … ビルドしなおしたmackerel-agentをNAS上に転送するため
1. 手順
- 作業用ディレクトリの作成
mackerel-qnapという名前(※フォルダ名は任意)でフォルダを作成。
-
Vagrantfileの作成
$script = <<SCRIPT apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D echo 'deb https://apt.dockerproject.org/repo ubuntu-trusty main' > /etc/apt/sources.list.d/docker.list apt-get update apt-get install -y linux-image-extra-$(uname -r) apt-get install -y docker-engine usermod -aG docker vagrant SCRIPT Vagrant.configure(2) do |config| config.vm.box = "ubuntu/trusty64" config.vm.provision "shell", inline: $script end
- mackerel-agentのダウンロード
作業ディレクトリに mackerel-agent をGitでクローン
-
Dockerfileの作成
作業ディレクトリ直下にDockerfileというファイル名でファイルを作成
FROM golang:1.5 RUN mkdir -p /go/src/github.com/mackerelio ADD ./mackerel-agent /go/src/github.com/mackerelio/mackerel-agent WORKDIR /go/src/github.com/mackerelio/mackerel-agent RUN make deps CMD bash -c "GOOS=linux GOARCH=amd64 GOARM=5 CGO_ENABLED=0 make build && cp ./build/mackerel-agent /host/_mackerel-agent"
- ディレクトリ構成の確認
この時点でのディレクトリ構成は
mackerel-qnapnas-build/ mackerel-agent/ build.sh Dockerfile provision.sh Readme.md Vagrantfile
- 仮想サーバの起動
vagrant up
でサーバを起動する -
コンテナのビルド
仮想サーバが起動したら
vagrant ssh
で仮想サーバ内にログイン、コンテナを起動時ビルドを実行するcd /vagrant docker build -t mackerel-agent .
- コンテナの起動、mackerel-agentのビルド
cd /vagrant docker run -v "$(pwd)":/host mackerel-agent
コンテナが正常に起動すると、ビルドが始まり成果物が_mackerel-agentという名前で作業ディレクトリに生成される
2. mackerel-agentの設置と起動
-
NASにadminでSSHログイン
-
mackerel-agentのダウンロードや収集データ送信時でのhttps通信のために証明書を設置する
wget http://curl.haxx.se/ca/cacert.pem mv cacert.pem /etc/ssl/certs/ca-certificates.crt
- mackerel-agentをダウンロード、APIキーを設定する
バイナリファイルで直接mackerel-agentをインストールする – Mackerel ヘルプ
- バイナリをダウンロード
curl -O https://mackerel.io/file/agent/tgz/mackerel-agent-latest.tar.gz
- 展開
tar xzf mackerel-agent-latest.tar.gz cd mackerel-agent
- ackerel-agent.confを編集して、APIキーを設定
vi mackerel-agent.conf # apikey = "" の行の行頭の#を削除して、apikeyの値をセットする
- バイナリをダウンロード
- 生成した_mackerel-agentを転送し、mackerel-agentと置き換える
mv _mackerel-agent mackerel-agent chmod +x mackerel-agent
- mackerel-agentを起動して、ホストが登録されることを確認する
./mackerel-agent --conf=./mackerel-agent.conf
正常に起動できていれば、makerelにNASのサーバ名でホストが表示される。
-
バックグラウンドで動作させるため、起動ファイルを作成する
vi mackerel-agent.sh
#!/bin/bash DAEMON_MGR="/sbin/daemon_mgr" NAME=mackerel-agent PROG=/root/mackerel-agent/mackerel-agent CONF=/root/mackerel-agent/mackerel-agent.conf case "$1" in start) mypid=`/bin/pidof $NAME` if [ ! -z $mypid ]; then exit 1 else echo -n "Starting mackerel agent: " $DAEMON_MGR $NAME start "$PROG --conf=$CONF &" exit 0 fi ;; stop) echo -n "Stopping mackerel agent: " $DAEMON_MGR $NAME stop "$PROG" echo ;; *) echo "Usage: $1 start|stop" exit 1 ;; esac exit 0
※PROG,CONFはmackerel-agentを設置しているパスに適宜変更する
起動:
mackerel-agent.sh start
停止:mackerel-agent.sh stop
メモ
ビルド手順のファイルをまとめたものをここで公開しています。
- TS-210対応
TS-210のCPUはMarvell製で、TS-469LのCPUであるInterlのAtomとは違うが、ビルドオプションを変更するだけで利用できる
変更内容:Dockerfile内のGOARCHをamd64からarmに変更する