さまよう大アリクイ

横浜市に住む。ホームページを作っていたりするが、最近滞り気味。

GangliaでHDFS容量のグラフを書く

CapacityRemainingGBと、CapacityTotalGBと、CapacityUsedGBの値はgangliaで取れているとします(昨日のブログを見てください)。これを元に、HDFS容量のグラフを書きます。昨日のブログの作業はNameNodeでしたが、今日の作業はgangliaのweb画面を生成しているサーバで行います。 クラスタ毎に異なる画面(テンプレート)を使えるように、/var/www/html/ganglia/conf.php の $template_name の部分を以下のように変更します。なお、NameNodeはGanglia上でNameNodeというクラスタに属し、それ以外のサーバはそれ以外のクラスタに属しています。
変更前 $template_name = "default";
変更後 $template_name = isset($_GET["c"]) ? escapeshellcmd( htmlentities( rawurldecode($_GET["c"]) ) ) : "default";
$_GET["c"] でクラスタ名が得られるので、これをテンプレート名にしています。これにより/var/www/html/ganglia/templates/クラスタ名/ほげほげ.tpl が画面描写のテンプレートになります。なお、クラスタディレクトリにファイルがない場合は、/var/www/html/ganglia/templates/default/ほげほげ.tplが使われるので、変更のあるテンプレートのみを定義すればよです。 gangliaのロゴが正常に表示できるように、/var/www/html/ganglia/templates/default/header.tplを以下のように直します。
変更前 <IMG SRC="{images}/logo.jpg" HEIGHT="91" WIDTH="150"
変更後 <IMG SRC="{images}" HEIGHT="91" WIDTH="150"
/var/www/html/ganglia/header.php も以下のように直します。
変更前$tpl->assign("images","./templates/$template_name/images");
変更後$tpl->assign("images",template("images/logo.jpg") );
HDFS容量のグラフを書くために、/var/www/html/ganglia/graph.d/hdfs_report.phpを作成します。
#cat > /var/www/html/ganglia/graph.d/hdfs_report.php <<EOF <?php /* Pass in by reference! */ function graph_hdfs_report ( &$rrdtool_graph ) {     global $context,            $hostname,            $cpu_nice_color,            $cpu_user_color,            $cpu_num_color,            $range,            $rrd_dir,            $size,            $strip_domainname;     if ($strip_domainname) {        $hostname = strip_domainname($hostname);     }     $title = 'Hdfs';     $rrdtool graph['height'] += ($size == 'medium') ? 28 : 0;     if ($context != 'host') {        $rrdtool_graph['title'] = $title;     } else {        $rrdtool_graph['title'] = "$hostname $title last $range";     }     $rrdtool_graph['lower-limit']    = '0';     $rrdtool_graph['vertical-label'] = 'Bytes';     $rrdtool_graph['extras']         = '--rigid --base 1024';     $series = "DEF:'cap_total'='${rrd_dir}/CapacityTotalGB.rrd':'sum':AVERAGE "         ."DEF:'cap_used'='${rrd_dir}/CapacityUsedGB.rrd':'sum':AVERAGE "         ."DEF:'cap_remain'='${rrd_dir}/CapacityRemainingGB.rrd':'sum':AVERAGE "         ."CDEF:'bcap_total'=cap_total,1073741824,* "         ."CDEF:'bcap_used'=cap_used,1073741824,* "         ."CDEF:'bcap_remain'=cap_remain,1073741824,* "         ."CDEF:'bcap_nondfs'='bcap_total','bcap_used',-,'bcap_remain',- "         ."AREA:'bcap_used'#$cpu_user_color:'DFS Used' "         ."STACK:'bcap_nondfs'#$cpu_nice_color:'Non DFS Used' "         ."LINE2:'bcap_total'#$cpu_num_color:'Configured Capacity' ";     $rrdtool_graph['series'] = $series;     return $rrdtool_graph; } ?> EOF
--rigid は lower-limit を強制するrrdtoolの設定です。--base 1024 は、通常は1K=1000であるのを、1K=1024としてグラフを書くためのrrdtoolの設定です。色はCPUのグラフの色を拝借しています。最後に余計な改行があるとグラフ生成に失敗します。 NameNode用のcluster_view.tplとhost_view.tplを作ります。/var/www/html/ganglia/templatesディレクトリにNameNodeディレクトリを作り、/var/www/html/ganglia/templates/defaultディレクトリのcluster_view.tplとhost_view.tplをコピーします。
#mkdir /var/www/html/ganglia/templates/NameNode #cp /var/www/html/ganglia/templates/default/cluster_view.tpl /var/www/html/ganglia/templates/NameNode/ #cp /var/www/html/ganglia/templates/default/host_view.tpl /var/www/html/ganglia/templates/NameNode/
それぞれのファイルのそれっぽい場所にHDFSグラフを描く設定をいれます。
cluster_view.tpl<A HREF="./graph.php?g=hdfs_report&z=large&{graph_args}"> <IMG BORDER=0 ALT="{cluster} HDFS"     SRC="./graph.php?g=hdfs_report&z=medium&{graph_args}"> </A>
host_view.tpl<A HREF="./graph.php?g=hdfs_report&z=large&c={cluster_url}&{graphargs}"> <IMG BORDER=0 ALT="{cluster_url} HDFS"    SRC="./graph.php?g=hdfs_report&z=medium&c={cluster_url}&{graphargs}"> </A>