teketeke_55の日記

技術メモとか

gangliaでoptional_graphをホストビューに追加する方法

[ganglia]

gangliaはクライアントをインストールするだけでさまざまなメトリクスが簡単に収集できるツール。
http://ganglia.sourceforge.net/

ただ標準だとノードごとoptional_graph出力が出来ないので、
以下の様な修正を加えてホストビューにもoptional_graphが表示されるようにした。

サーバ環境

  • CentOS5.7
  • PHP-5.3.8
  • Ganglia Web 2.1.8
  • ganglia monitor core 3.2.0

修正するファイル一覧(全てgweb配下)

  • conf_default.php

gweb全体の設定をするファイル

  • host_view.tpl

ホストビュー表示のテンプレートファイル

  • host_view.php

変数を読み込んでホストビューに各表示をするためのファイル

詳細は公式のwikiを参照されたい
http://sourceforge.net/apps/trac/ganglia

修正内容

conf_default.php
  • optional_graphを追加

170行目あたりに以下の変数がある。これがgraph.d↓に配置したoptionalグラフを表示させるか判定している。

$conf['optional_graphs'] = array('packet');

上記ではpacketのグラフがクラスタービューに表示されている状態。

表示されるoptional_graphを追加するにはここに変数を追加してやればよい。

 $conf['optional_graphs'] = array('packet','apache_status','load_all');

このままだとすべてのクラスターで上記グラフが出てしまうので用途に応じて以下の様に変数を追加した。
webはapace,dbはmysqlのメトリクスが表示されるようにしている。

$conf['optional_graphs_web'] = array('packet','load_all','apache_status');


$conf['optional_graphs_db'] = array('packet','load_all','mysql_connections','mysql_innodb_bp_activity','mysql_innodb_io','mysql_qcache_hitrate','mysql_qcache_mem','mysql_qcache','mysql_query','mysql_select_types','mysql_table_locks');
host_view.tpl
  • optional_graphs変数を表示できるように以下の値を追加する。(290行目あたり)
   {foreach $optional_graphs_data graph}
   <a href="./graph_all_periods.php?{$graph.graph_args}&amp;g={$graph.name}_report&amp;z=large">
   <img border=0 {$additional_cluster_img_html_args} title="{$cluster} {$graph.name}" src="./graph.php?{$graph.graph_args}&amp;g={$graph.name}_report&amp;z=medium"></a>
optional_graphs
  • optional_graphsを表示するために以下の変数を追加
$graph_args = "h=$hostname&amp;$get_metric_string&amp;st=$cluster[LOCALTIME]";

$graph_args = "h=$hostname&amp;$get_metric_string&amp;st=$cluster[LOCALTIME]&amp;c=$cluster_url";
  • optional_graphs変数を読み取れるように判定を追加する(90行目あたり)
if (ereg('db',$hostname)) {
$data->assign("graph_args", $graph_args);
if (!isset($conf['optional_graphs_db']))
  $conf['optional_graphs_db'] = array();
$optional_graphs_data = array();
foreach ($conf['optional_graphs_db'] as $g) {
  $optional_graphs_data[$g]['name'] = $g;
  $data->assign("name", $optional_graphs_data[$g]['name']);
  $optional_graphs_data[$g]['graph_args'] = $graph_args;
}
$data->assign('optional_graphs_data', $optional_graphs_data);
}

if (ereg('web',$hostname)) {
$data->assign("graph_args", $graph_args);
if (!isset($conf['optional_graphs_web']))
  $conf['optional_graphs_web'] = array();
$optional_graphs_data = array();
foreach ($conf['optional_graphs_web'] as $g) {
  $optional_graphs_data[$g]['name'] = $g;
  $data->assign("name", $optional_graphs_data[$g]['name']);
  $optional_graphs_data[$g]['graph_args'] = $graph_args;
}
$data->assign('optional_graphs_data', $optional_graphs_data);
}

if (!ereg('web|db',$hostname)) {
$data->assign("graph_args", $graph_args);
if (!isset($conf['optional_graphs']))
  $conf['optional_graphs'] = array();
$optional_graphs_data = array();
foreach ($conf['optional_graphs'] as $g) {
  $optional_graphs_data[$g]['name'] = $g;
  $data->assign("name", $optional_graphs_data[$g]['name']);
  $optional_graphs_data[$g]['graph_args'] = $graph_args;
}
$data->assign('optional_graphs_data', $optional_graphs_data);
}

上記の場合ではhostnameでweb,dbかどうか判定し、conf_default.phpで指定された変数をもとに表示するようになっている。

注意点

gweb配下のコンフィグファイルを修正したとき

host_view.tplなどのファイルを修正すると

  • /var/lib/ganglia/dwoo/templates/default/

配下に

というようなファイルが生成される。
これができると優先的に参照するらしくgweb配下のコンフィグを変えても反映されないことがあるので注意
反映されなくなった場合はgmetdデーモンを停止してから

  • /var/lib/ganglia/dwoo/templates/default/

配下のファイルを消すとよい