用户工具

站点工具


cacti_跨平台迁移

CACTI 跨平台迁移

rrd 文件跨平台迁移

CACTI 迁移的最大问题是 rrd 文件在不同系统下有不同的数据格式,因此必须重新创建数据文件。下面的脚本可以完成这项工作。

设目录下有 rra 目录,拟导出数据到 xml 目录并拷贝到目标机,在目标机内将 xml 目录数据导出到 rra 目录,则应使用下面的脚本:

rrd_convert.py
#!/usr/bin/env python
import os
import subprocess
 
def prep_list(rra_path, ext='rrd'):
    file_list = []
    dir_list = []
    for root, dirs, files in os.walk(rra_path):
        for dir in dirs:
            dir_list.append("%s/%s" % (root, dir))
        for file in files:
            if file.split('.')[-1] == ext:
                file_list.append("%s/%s" % (root, file))
    return dir_list, file_list
 
def mk_xml_struct(prefix, old_prefix, dirs):
    os.mkdir(prefix)
    for dir in dirs:
        os.mkdir("%s%s" % (prefix, dir.replace(old_prefix, '')))
 
def convert(prefix, old_prefix, files, replacer='.rrd', replacee='.xml', rrd_action='dump'):
    for file in files:
        new_file = file.replace(replacer, replacee).replace(old_prefix, prefix)
        subprocess.Popen(['/usr/bin/rrdtool', rrd_action, file, new_file])
 
def encode():
    dirs, files = prep_list('rra')
    mk_xml_struct('xml', 'rra', dirs)
    convert('xml', 'rra', files)
 
def decode():
    dirs, files = prep_list('xml', 'xml')
    mk_xml_struct('rra', 'xml', dirs)
    convert('rra', 'xml', files, '.xml', '.rrd', 'restore')
 
if __name__ == '__main__':
    decode()

导入时,只需将最后一行的 decode() 改为 encode() 即可。

cacti_跨平台迁移.txt · 最后更改: 2011/12/23 21:11 由 alex