いつもお世話になっているMuninなのですが、任意のグラフを選んで並べて比較してといった使い方が簡単にできたらいいなと思っていました。
色々な実装方法があると思いますが、ここではMuninの基板であるRRDToolのような時系列データベースである Graphite
と、ダッシュボードである Grafana
を使ってフロントエンドとして利用することで、Muninのダッシュボードを作ってみようと思います。
Graphiteインストール
まずはこちらページでGraphiteとは何ぞやというのを勉強させてもらいます。
Mackerelを支える時系列データベース技術 - ゆううきブログ
そして、こちらの手順を参考にさせていただきインストールします。
Graphite Setup for CentOS · GitHub
Grafanaインストール
yumでインストールできます。前提パッケージと共にインストールします。
sudo yum install initscripts fontconfig sudo yum install https://grafanarel.s3.amazonaws.com/builds/grafana-3.1.1-1470047149.x86_64.rpm
起動します。
/etc/init.d/grafana-server start
chkconfig grafana-server on
これで Grafana
にアクセスできるようになっているはずです。
http://servername:3000/
Grafanaの使い方はこちらのサイトなどを参考にさせてもらいます。このサイトではデータソースとしてAWS CloudWatchをGrafanaに表示しています。今回はデータソースがMuninに蓄積されたデータになります。
Grafanaでかっけぇダッシュボード作るよ!(構築・設定編) | サーバーワークス エンジニアブログ
Muninのデータ確認
Muninのデータは rrd
という拡張子のファイルに格納されいます。
yumパッケージで入れたMuninなら以下のフォルダを確認するとrrdファイルが存在しているはずです。
/var/lib/munin/<group名>/
RRDファイル->WSPファイル変換
Muninの.rrd
ファイルをwhisper形式の .wsp
ファイルに変換することで、GraphiteにMuninのデータを食わせることができます。
変換には rrd2whisper
というツールを利用します。Graphiteインストールしていれば入っているはずです。
このツールを使うために以下のパッケージを入れておきます。
yum install rrdtool-python
使い方はこんな感じです。これで .wsp
ファイルが出力されます。
rrd2whisper --xFilesFactor=0.0 --aggregationMethod=average ./rrdfile/loadbalancer01-load-load-g.rrd
出力された .wsp
は whisper
フォルダ配下に配置します。ここでは munin
フォルダを掘って、そこに .wsp
ファイルを置いていくことにします。
mkdir /var/lib/carbon/whisper/munin chown -R carbon:carbon /var/lib/carbon/whisper/munin
先ほどの rrd2whisper
コマンドで出力された .wsp
ファイルを以下のように配置します。
/var/lib/carbon/whisper/munin/lb/loadbalancer01-apache_accesses-accesses80-d_42.wsp
Graphiteで確認してみると、データが読み込めていることがわかります。
Grafanaでもデータソース種別としてGraphiteを指定することで、ダッシュボードに表示できます。
スクリプト化
最後にMuninサーバの.rrd
ファイルを取得して、.wsp
形式に変換し、carbonフォルダ配下に配置する処理を自動化します。
# muninのGroup一覧からgroup.listを作成 group_list_file=/var/lib/carbon/tools/group.list data_dir=/var/lib/carbon/whisper/munin while read grp do test -d $data_dir/$grp || mkdir $data_dir/$grp test -d $data_dir/$grp/rrd || mkdir $data_dir/$grp/rrd rm -f $data_dir/$grp/*.wsp rsync -ar --include '*.rrd' --exclude '*' remote_user@munin_server:/var/lib/munin/$grp/ $data_dir/$grp/rrd/ cd $data_dir/$grp for rrdfile in $(ls -1 $data_dir/$grp/rrd);do rrd2whisper --xFilesFactor=0.0 --aggregationMethod=average $data_dir/$grp/rrd/$rrdfile;done >/dev/null mv $data_dir/$grp/{rrd/*.wsp,} done < $group_list_file
ここから rrd2whisper
の最新版を落としてくると、destinationPath
オプションが使えるようになり、wspファイルの出力先を指定できるようになります。
NFSと組み合わせると上記のrsyncを使うものよりもシンプルに実装できます。
whisper/rrd2whisper.py at master · graphite-project/whisper · GitHub
$ ./rrd2whisper.py -h Usage: rrd2whisper.py rrd_path Options: -h, --help show this help message and exit --xFilesFactor=XFILESFACTOR The xFilesFactor to use in the output file. Defaults to the input RRD's xFilesFactor --aggregationMethod=AGGREGATIONMETHOD The consolidation function to fetch from on input and aggregationMethod to set on output. One of: average, last, max, min --destinationPath=DESTINATIONPATH Path to place created whisper file. Defaults to the RRD file's source path.