Vectorを試用してみたのでメモ。
Vectorとは
VectorはNetflixが開発している"on-host performance monitoring framework"。
ざっくり言うと、サーバメトリクス収集ツールのPerformance Co-Pilotのデータ可視化ツール。
Vectorは、ブラウザから直接サーバのWebAPI(pmweb)にアクセスし、メトリクスを収集して表示する。クライアントとなるPCとサーバがIP通信可能ができる必要がある。
Netflixでは、別にAltasという、メトリクス収集・集計・可視化フレームワークを使っていて、基本的にはこちらで集計データを確認しつつ、トラブルシューティングなど、サーバ・インスタンスレベルでのメトリクスを詳細に確認したい時にのみ、Vectorを利用しているようだ。参考ブログ
Performance Co-Pilotとは
Performance Co-Pilotは、サーバのメトリクス収集ツールセット。
2007年から開発されていて、今も活発なOSSなのだが、日本での利用事例はほとんど見つからない。
sar(System Admin Reporter)で良い気もするけど、メトリクス取集、データ保存、可視化がモジュール化されていて、拡張可能になっている。(ElasticSearch, Apache, MySQL Agentなど色々そろっている)
インストール
環境
AWSのAmazon Linuxを利用。
$ cat /etc/os-release
NAME="Amazon Linux AMI"
VERSION="2015.03"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2015.03"
PRETTY_NAME="Amazon Linux AMI 2015.03"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2015.03:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
Performance Co-Pilot(PCP)のインストール
メトリクスを確認サーバにインストールする。
Vectorが要求するPCPのVersionが(>3.10)と高く、まだいい感じのrpmがないので自分でビルドする事にする。
# 必要なパッケージ
$ sudo yum install perl-Tk-devel bison flex libmicrohttpd-devel gcc-c++
# pcpユーザ/グループの作成
$ sudo groupadd pcp
$ sudo adduser -s /sbin/nologin -g pcp -M pcp
# ソースからビルド
$ git clone git://git.pcp.io/pcp
$ cd pcp
$ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --with-webapi=true
$ make
# インストール
$ sudo make install
$ sudo ldconfig -v
Vectorのインストール
Webサーバがあれば何でもOK、下記は公式の手順。
node.jsとnpmをyumでインストール(手抜き)
$ sudo yum install nodejs npm
Bowerのインストール
$ sudo yum install nodejs npm
Vectorと依存ライブラリのインストール
$ git clone https://github.com/Netflix/vector.git
$ cd vector
$ bower install
$ npm install
起動方法
Performance Co-Pilot(PCP)の起動
$ sudo /sbin/chkconfig pmwebd on
$ sudo /etc/init.d/pcp start
Vectorの起動
$ cd vector
$ gulp
http://localhost:8080 にアクセスする。
他の起動方法
Vectorは静的HTMLが表示できればいいので、サーバ側はApacheでも大丈夫。
とりあえずの検証目的なら、Pythonが簡単。
$ cd vector/app
$ python -m SimpleHTTPServer 8080
localhost以外でgulp利用
vector/gulpfile.js を下記の様に修正すればよい。
var gulp = require('gulp'),
connect = require('gulp-connect');
gulp.task('webserver', function() {
connect.server({
root: 'app',
host: '0.0.0.0',
livereload: true
});
});
gulp.task('default', ['webserver']);
おしまい