QNAP TS-469Lをmackerelを使ってモニタリングする

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. 手順

  1. 作業用ディレクトリの作成

    mackerel-qnapという名前(※フォルダ名は任意)でフォルダを作成。

  2. 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
    
  3. mackerel-agentのダウンロード

    作業ディレクトリに mackerel-agent をGitでクローン

  4. 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"
    
  5. ディレクトリ構成の確認

    この時点でのディレクトリ構成は

    mackerel-qnapnas-build/
        mackerel-agent/
        build.sh
        Dockerfile
        provision.sh
        Readme.md
        Vagrantfile
    
  6. 仮想サーバの起動

    vagrant upでサーバを起動する

  7. コンテナのビルド

    仮想サーバが起動したらvagrant sshで仮想サーバ内にログイン、コンテナを起動時ビルドを実行する

    cd /vagrant
    docker build -t mackerel-agent .
    
  8. コンテナの起動、mackerel-agentのビルド
    cd /vagrant
    docker run -v "$(pwd)":/host mackerel-agent
    

    コンテナが正常に起動すると、ビルドが始まり成果物が_mackerel-agentという名前で作業ディレクトリに生成される

2. mackerel-agentの設置と起動

  1. NASにadminでSSHログイン

  2. mackerel-agentのダウンロードや収集データ送信時でのhttps通信のために証明書を設置する

    wget http://curl.haxx.se/ca/cacert.pem
    mv cacert.pem /etc/ssl/certs/ca-certificates.crt
    
  3. mackerel-agentをダウンロード、APIキーを設定する

    バイナリファイルで直接mackerel-agentをインストールする – Mackerel ヘルプ

    1. バイナリをダウンロード
      curl -O https://mackerel.io/file/agent/tgz/mackerel-agent-latest.tar.gz
      
    2. 展開
      tar xzf mackerel-agent-latest.tar.gz
      cd mackerel-agent
      
    3. ackerel-agent.confを編集して、APIキーを設定
      vi mackerel-agent.conf
      
      # apikey = "" の行の行頭の#を削除して、apikeyの値をセットする
      
  4. 生成した_mackerel-agentを転送し、mackerel-agentと置き換える
    mv _mackerel-agent mackerel-agent
    chmod +x mackerel-agent
    
  5. mackerel-agentを起動して、ホストが登録されることを確認する
    ./mackerel-agent --conf=./mackerel-agent.conf
    

    正常に起動できていれば、makerelにNASのサーバ名でホストが表示される。

  6. バックグラウンドで動作させるため、起動ファイルを作成する

    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 &amp;"
                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に変更する

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中