Cacti (home)ForumsDocumentation
Table of Contents


These Frequently Asked Questions should help you diagnose some, but not all Cacti issues. The Cacti Forums are indexed by Google and several other search engines. To search for a topic in google, it's best to use the following syntax:

"exact word or phrase" word phrase

Including “” will return search results only from our forums. It's a great way to find solutions to your problems.


This area is for user contributed Frequently Asked Questions. They will be cleaned up and added to the Official FAQ

Status Unknown

If the status of your device remains 'Unknown', ensure that you have added graphs to that device.

If there are no graphs, Cacti will not poll the device, and the status will remain 'Unknown'.

How does the Simple Network Management Protocol (SNMP) work?

RRDTool Debugging

Initial Graph does not appear

When viewing in tree mode, the initial graph does not show up. When you click on it, the graphs appear fine.

This may be an RRDTool version conflict. Go to Console/Configuration/Settings/General and ensure that RRDTool Utility Version is set to the correct version under Required Tool Versions

Linegod 2009/10/01 08:09

My graphs are broken in Cacti 1.x

You maybe be using an older version of RRDtool. The minimum version of RRDtool supported today is version 1.3 which is available on almost all operating systems. Another issue is that the permissions on the RRDfiles are not set to the correct ownership. This can happen if you happen to be running the data collectors for debugging as root, and during that debug session, new RRDfiles are created.

Can you graph Data Sources (ds) from different RRDs

I know it's kind of a pain to update an RRD to add fields after the fact, so I was also 
looking at potentially showing data from two different RRDs
on a single graph.

Is that possible?


Yes, search the forums1) for 'aggregate', or use the Aggregate plugin2)

External Resources

PHP Debugging

Deprecated Warnings

You may see the following errors in Cacti if you install with PHP 5.3.x or later in earlier versions of Cacti, namely 0.8.x. In the core of Cacti 1.x these warnings will no longer appear. However, if you are testing, or writing a plugin, you may experience them. These are several methods to address these warnings. Please read below for more information on how to address them.

PHP Deprecated:  Assigning the return value of new by reference is deprecated in
/usr/share/cacti/lib/adodb/ on line 866

PHP Deprecated:  Function ereg() is deprecated in /var/www/html/087e/lib/html_validate.php 
on line 38

Function split() is deprecated in /var/www/html/087e/lib/functions.php on line 1744

Function session_unregister() is deprecated in /var/www/html/087e/lib/functions.php 
on line 359


"PHP 5.3.0 introduces two new error levels: E_DEPRECATED and E_USER_DEPRECATED. The
E_DEPRECATED error level is used to indicate that a function or feature has been deprecated.
The E_USER_DEPRECATED level is intended for indicating deprecated features in user code,
similarly to the E_USER_ERROR and E_USER_WARNING levels."

These are simply warnings for functions that will eventually be unsupported in PHP.

As these have been fixed in 0.8.8, simply following the recommended procedure and do not show these warnings in production systems. Edit your /etc/php.ini and set the following values:

; error_reporting
;   Default Value: E_ALL & ~E_NOTICE
;   Development Value: E_ALL | E_STRICT
;   Production Value: E_ALL & ~E_DEPRECATED
error_reporting = E_ALL & ~E_DEPRECATED

Restart apache after adjusting the settings.

If for some reason you have no access to php.ini or cannot restart apache, add the following line of code to include/config.php


Time Zone Warning

Similar to the Deprecated Warning, you may see the following warning in your logs

PHP Warning:  strtotime(): It is not safe to rely on the system's timezone settings. You are
*required* to use the date.timezone setting or the date_default_timezone_set() function. In case
you used any of those methods and you are still getting this warning, you most likely misspelled
the timezone identifier. We selected 'Europe/Berlin' for 'CET/1.0/no DST' instead in
/usr/share/cacti/include/global_constants.php on line 156

In this case, simply follow the directions. Set your timezone in /etc/php.ini

; Defines the default timezone used by the date functions
date.timezone =America/Regina

Of course, read , and find your correct timezone.

As always, restart apache after any change to /etc/php.ini

When attempting to run poller.php you get: This script is only meant to run at the command line.

Most likely caused by a misconfiguration in your php.ini file. Make sure the following is set in it:

register_argc_argv = On
safe_mode = Off

Graph Debugging

My traffic graphs won't exceed 114 mbit/s

Traffic graphs clip at 114 mbit/s. To resolve this clipping, use SNMP v2c and 64-bit counters. In Cacti 1.x, we detect the ifHighSpeed of the various interfaces. However, please note that some interfaces, primarily bond type interfaces may not report the correct ifHighSpeed for the interface. In cases such as these, you may be required to utilize the RRDtool tune utility to modify the peak values in the RRDfiles to correct for intermediate spikes in the Graphs. In Cacti 1.x, you can also kill these spikes both prolifically in Cacti's data collection process, and from the Graphs tab.

For now, see this forum post

Linegod 2009/10/01 08:05

Show exact numbers

In the legend of the graph, you want the full number displayed, not the unit number.  ie:  1950 vs 1.95k

Change the Graph Item GPRINT Type to 'Exact Numbers' instead of 'Normal'

What does µ , m , p , etc stand for

-18  a - atto
-15  f - femto
-12  p - pico
-9   n - nano
-6   µ - micro
-3   m - milli
0    (no unit)
3    k - kilo
6    M - mega
9    G - giga
12   T - tera
15   P - peta
18   E - exa

Please note that the Base Value (–base) in the Graph template determines the conversion base between these.

Base Value (--base) = 1000 -> 1 Megabyte = 1000 Kilobyte
Base Value (--base) = 1024 -> 1 Megabyte = 1024 Kilobyte

My very large disks reported with the 'SNMP - Get Mounted Partitions' Data Query are not reporting correct sizes

If you are using a more recent version of Net-SNMP for monitoring your devices, you can use a special snmpd.conf directive to adjust the Storage Allocation Units dynamically so that your very large disks don't overflow the numbers collected by the Cacti system. Use the setting below:


Then, restart your Net-SNMP agent. You should not have to do anything in Cacti after that change, the disks will simply start reporting correctly. If you are using the Windows SNMP Agent, we suggest you upgrade your agent to Net-SNMP as it is available for Windows.

How can I remove NFS volumes from my Host Mib Disk Graphing

There is a special settings for this in Net-SNMP. If you follow the man pages for snmpd.conf, you will find the following option:

skipNFSInHostResources true

Use that setting, then restart Net-SNMP. You should Re-Index the device in Cacti as well if it's not using 'uptime goes backwards' Re-Index method.

I don't see any graphs on the main graph page, but when I click on one, I see 4 graphs with data.

This can happen when you have the wrong version of RRDTool selected in Cacti. Set it by going to Settings and applying the proper RRDTool Utility Version.

Plugin Debugging

My plugins says it's not compatible and wont install

Cacti 1.x only supports plugins that have been migrated to the Cacti 1.x design. This was a conscious effort on the part of the Cacti Group in order to ensure that newly updated and new plugins followed our new design and GUI themes. There are instructions on some of the steps to migrate a plugin provided on GitHub. But there are also 19 example plugins already migrated for your on GitHub as well. You can also start with one of those.

My plugin keeps getting disabled by Cacti

Cacti 1.x will disable a plugin when it encounters a fatal error that might compromise the Cacti system. These errors include: syntax errors, fatal errors, etc. If Cacti 1.x finds one of these warnings, it will always log a message to the Cacti log so that you can pinpoint the problem. It also generates a backtrace that you can follow to make the process easier. This was done intentionally, to make Cacti more fault tolerant.

How can I ensure that my plugin has minimal chances of being exploited

Cacti 1.x provides numerous validation functions and display functions to protect your plugin from possible exploitation. We also have a Developer Debug checkbox under Configuration > Settings > General to inform you when you are not properly sanitizing your variables. When enabled, any time you consume a request variable without first sanitizing it, a message will appear in the Cacti log.

Next, you should never use raw request variables in your plugins. Examples include $_REQUEST, $_GET, and $_POST. These variables should always be validated using one of the following functions:

To sanitize a single variable for display, if/then/else, case statements, use in database functions, or any other code use:

get_filter_request_var($variable, $filter, $options);  // Default with no option is to validate INTEGER
get_request_var($variable);                            // Retrive a variable.  Warning issued if not previously checked
get_nfilter_request_var($varialbel)                    // Get a request var, but don't issue a warning if it has not already been validated
isset_request_var($variable);                          // Check if a request var is set
isempty_request_var($variable);                        // Check to see if the request var is set but empty
set_request_var($variable)                             // Set a request var to a value

If you have a table display filter that includes several variables, that you might want to recall later event if they have not been passed to the request, use the following function:

validate_store_request_vars($filter_array, $session_variable_prefix);  // Several examples in the code

If you are outputting anything to the browser, you should use the following function:


Cacti additionally provides a prepared statement API that will additionally ensure that you have no database exploits. Some example functions include:

db_fetch_cell_prepared($sql, $array_of_vars);
db_fetch_row_prepared($sql, $array_of_vars);
db_fetch_assoc_prepared($sql, $array_of_vars);

As long as your stick by these rules, your code should be safe from vulnerabilities.

I need to debug a problem, but when I put Cacti into debug mode, I can not see the trees from the forest

Cacti 1.x supports individual file, plugins, and device based debugging. Look for the settings in Configuration > Settings > General. You can place any number of files into debug mode and only get debug messages when those files are being called either from the Website or CLI. Spine also supports this setting.

Windows Specific Debugging

How do I stop the command windows from opening every 5 minutes?

This is occurring because your Cacti scheduled task is using the same user account you've logged onto the server with. The recommended fix is have the scheduled task run under a different user account. An unsupported method would be to use VBScript to hide the PHP windows.

Why doesn't Windows return Disk or CPU usage via SNMP?

  • Open up the SNMP Service and click on the Agent tab. Make sure all the service checkboxes are marked (they are not by default). Restart the SNMP service.
  • Increase the SNMP timeout to 3-5 seconds (yes, this is a longstanding issue with the Windows SNMP agent when fetching disk information)
  • Decrease the Maximum OID's Per Get Request.

ERROR: change root is not supported by your OS or at least by this copy of rrdtool.

This error message occurs when you use the Win32 build of RRDTool instead of Cygwin with versions prior to 1.2.15. RRDTool 1.2.30 Win32 build (or newer) is recommended.

All my graphs are blank. Enabling graph debugging reveals a blank RRDTool Says output

This typically occurs when the NTFS permissions on cmd.exe or rrdtool.exe are not set correctly. Both need Read/Execute rights by the web server's user account. Read about the exact details in the installation guide.

How do I get WMI scripts working on remote computers?

There are several things one needs to do to accomplish this:

  1. Open a hole in the firewall for DCOM. For the Windows XP/2003 firewall, do the following:
    • Open up the Windows Firewall control panel
    • Click on Add Port.
    • Name: DCOM. Port: 135. Type: TCP
    • You might need to change the scope of the rule, depending on where you will be remotely querying the server from.
    • Start | Run: gpedit.msc
    • Navigate to: Computer Configuration | Administrative Templates | Network | Network Connections | Windows Firewall
    • Enable the following:
      • Allow remote administration exception
      • Allow local port exceptions
  2. Edit WMI security
    • Start | Run: wmimgmt.msc.
    • Get properties on WMI Control.
    • Go to the Security tab
    • Click on the Root folder, then the security button at the bottom
    • Click on Advanced
    • Add the cactiuser account that's going to be used. Assign the following rights:
      • Enable Account
      • Enable Remote
    • Change the Apply onto to to: This namespace and subnamespaces.
    • Click OK several times and close the WMI window.
  3. Edit DCOM security
    • Start | Run: dcomcnfg
    • Navigate to: Component Services | Computers | My Computer.
    • Get properties on My Computer
    • Click on the COM Security tab.
    • Under Launch and Activate Permissions, click on Edit Limits
    • Add the cactiuser account that's going to be used. Assign the following rights:
      • Remote Activation
    • Click OK and exit.

I'm getting errors with: Warning: fgets(): supplied argument is not a valid stream resource: <filename>

This is most likely due to incorrect NTFS permissions on that file/folder. This prevents Cacti from accessing the file(s) to execute the code.

How do I install the Microsoft SNMP agent?

How do I configure the Microsoft SNMP agent?

Debian and Ubuntu

Because of requirements by Debian the file layout in the packages for Debian and Ubuntu are different than found in the cacti file from this site. All documentation is written for the default setup. Please be aware of the following differences:

  1. File bugs in the Debian or Ubuntu bug trackers and NOT in the cacti bug tracker
  2. All browsable files are located in /usr/share/cacti/site/ instead of /var/www/cacti/
  3. Configuration is done in /etc/cacti/debian.php instead of /var/www/cacti/include/config.php
  4. rrd files are stored in /var/lib/cacti/rra instead of /var/www/cacti/rra/ (symlink from /usr/share/cacti/site/rra is included)
  5. Cli scripts are located in /usr/share/cacti/resource/ (symlink from /usr/share/cacti/site/resource is included)
  6. Log files are located in /var/log/cacti/ (symlink from /usr/share/cacti/site/log is included)
  7. Local resources should be installed in /usr/local/share/cacti/resource/
  8. Local plugins should be installed in /usr/local/share/cacti/plugins (but this needs to be setup manually, please read README.Plugins)
  9. Cacti is run under the www-data user

For the 1.x.x packages the following additional delta's apply (may change or be expanded in the short term):

  1. The cache files are stored in /var/lib/cacti/cache instead of /var/www/cacti/cache/ (symlink from /usr/share/cacti/site/cache is included)
  2. Important: most JavaScript files are Debian versions instead of the cacti embedded versions because the embedded version is stripped and soft linked instead to other Debian packages. This may lead to (slight) delta's in experience that the cacti developers don't see, please don't blame the cacti developers.
  3. Because of the previous point, the html style sheets have been adapted, but I may have missed some delta's in the themes. There is a cacti bug to improve this.

Personal Tools