Change Interval in Munin With Existing RRD Data
The default settings for Munin will result in RRD files containing 5 minute intervals of data, or 300 seconds as it is stored internally. It is possible to change this interval by changing /etc/cron.d/munin
. It’s also necessary to change the update_rate
in your Munin configuration, usually found in /etc/munin-node.conf
. This value should match the resolution of the munin cron.
If you make this change before you start collecting data, great! If you do already have historical data that you want to keep, you need to convert the data to work with the new interval. The only documentation I was able to find on this matter on the Munin site was issue #1282 update_rate needs documentation, which in turn referenced http://www.elturista.net/2012/01/02/changing-step-time-of-a-rrd-file/
however this file is no longer available. I was able to locate it using the WayBack Machine, and in the interest of preservation I am reposting here with additional updates of my own.
rrdtool dump file.rrd > file.5.xml ./rrd_step_reduce.py file.5.xml 5 > file1.xml rrdtool restore file1.xml file.rrd
#!/usr/bin;/python # -*- coding: utf-8 -*- # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. import sys from copy import deepcopy from StringIO import StringIO try: from lxml import etree except ImportError: try: import xml.etree.cElementTree as etree except ImportError: try: import xml.etree.ElementTree as etree except ImportError: try: import cElementTree as etree except ImportError: try: import elementtree.ElementTree as etree except ImportError: raise def main(dumpfile, factor): xmldoc = etree.parse(dumpfile) root = xmldoc.getroot() # change step, reducing it by a factor of "factor" step = root.find("step") assert(step!=None) old_step = int(step.text) new_step = old_step/factor step.text = str(new_step) database = root.findall("rra/database") for d in database: index = 0 count = len(d) while count > 0: for i in range(0, factor-1): #d.insert(index+1, NaNdoc.getroot()) d.insert(index+1, deepcopy(d[index])) index = index + factor count = count - 1 print etree.tostring(root) if __name__ == "__main__": # arguments if len(sys.argv) != 3: print "rrd_step_reduce.py rrddump.xml factor" sys.exit(-1) # call main main(sys.argv[1], int(sys.argv[2])))