Ganglia で python module なんかで新たに監視項目を増やそうとしたときに、.pyconf のサンプルが不親切すぎ、.py にも説明ないとかで、設定すべき metric name がよくわからない場合にそれを探す方法のメモ。
まずは使うモジュールのソースを読んであたりを付ける、もしくは特定できるようならそれで。だいたい Init_Metric 関数、metric_init 関数あたりをみればわかる。以下は multidisk.py の例。
def Init_Metric (line, name, tmax, type, units, slope, fmt, desc, handler):
'''Create a metric definition dictionary object for a device.'''
metric_name = line[0] + '-' + name
d = {'name': metric_name.replace('/', '-').lstrip('-'),
'call_back': handler,
'time_max': tmax,
'value_type': type,
'units': units,
'slope': slope,
'format': fmt,
'description': desc,
'groups': 'disk',
'mount': line[1]}
return d
def metric_init(params):
'''Discover all of the local disk devices on the system and create
a metric definition dictionary object for each.'''
global descriptors
f = open('/proc/mounts', 'r')
for l in f:
line = l.split()
if line[3].startswith('ro'): continue
elif Remote_Mount(line[0], line[2]): continue
elif (not line[0].startswith('/dev/')) and (not line[0].startswith('/dev2/')): continue;
if ganglia.get_debug_msg_level() > 1:
print 'Discovered device %s' % line[1]
descriptors.append(Init_Metric(line, 'disk_total', int(1200),
'double', 'GB', 'both', '%.3f',
'Available disk space', DiskTotal_Handler))
descriptors.append(Init_Metric(line, 'disk_used', int(180),
'float', '%', 'both', '%.1f',
'Percent used disk space', DiskUsed_Handler))
f.close()
return descriptors
Init_Metric 関数への第2引数をサフィックスにして name パラメーターにいれてるので、呼び出し元から “disk_used”, “disk_total” が metric name のサフィックスなってるであろうことを確認。python 読めないけど、前半部分は /proc/mounts からなんかもってきて / を - に変換して、一番最初の / 削る、とかやってるぽい。けど、とりあえず disk_used を含む metric name 一覧で確認してみたい。
ひとまず、モジュールを有効にして gmond で使えるようにする。/etc/ganglia/conf.d/diskusage.pyconf に以下を入れて gmond reload。
modules {
module {
name = "multidisk"
language = "python"
}
}
で、metric name 一覧を取る(これを今回知った)。
$ /usr/sbin/gmond -m
とすると、利用可能な metric name と、どのモジュールで定義されているかの一覧がどばーっとでる。残念なことに python でかかれた module はすべてが “pyhotn_module” として出てしまうけど、まぁどうでもいいところなので。
$ /usr/sbin/gmond -m | grep disk_used
dev-sda1-disk_used Percent used disk space (module python_module)
dev-sdd1-disk_used Percent used disk space (module python_module)
dev-sdb1-disk_used Percent used disk space (module python_module)
dev-sda3-disk_used Percent used disk space (module python_module)
dev-sdc1-disk_used Percent used disk space (module python_module)
ということで、こいつらを metric name にそれぞれいれて gmond reload。まぁ、それ以外のこまい設定はソースよまないとわからないので最後は結局ソース読むのだけど。
徐々に脱 Ganglia 初心者。