Cacti

Supported OS Linux

Integration version2.1.1

Overview

Get metrics from Cacti in real time to:

  • Visualize and monitor Cacti states.
  • Be notified about Cacti failovers and events.

Setup

Installation

The Cacti check is included in the Datadog Agent package, to start gathering metrics you first need to:

  1. Install librrd headers and libraries.
  2. Install Python bindings to rrdtool.

Headers and libraries

On Debian/Ubuntu:

sudo apt-get install librrd-dev

On RHEL/CentOS:

sudo yum install rrdtool-devel

Python bindings

Add the rrdtool Python package to the Agent with the following command:

sudo -u dd-agent /opt/datadog-agent/embedded/bin/pip install rrdtool

Configuration

Create a Datadog user

  1. Create a Datadog user with read-only rights to the Cacti database.

    sudo mysql -e "create user 'datadog'@'localhost' identified by '<MYSQL_PASSWORD>';"
    sudo mysql -e "grant select on cacti.* to 'datadog'@'localhost';"
    
  2. Check the user and rights:

    mysql -u datadog --password=<MYSQL_PASSWORD> -e "show status" | \
    grep Uptime && echo -e "\033[0;32mMySQL user - OK\033[0m" || \
    echo -e "\033[0;31mCannot connect to MySQL\033[0m"
    
    mysql -u datadog --password=<MYSQL_PASSWORD> -D cacti -e "select * from data_template_data limit 1" && \
    echo -e "\033[0;32mMySQL grant - OK\033[0m" || \
    echo -e "\033[0;31mMissing SELECT grant\033[0m"
    
  3. Give the datadog-agent user access to the RRD files:

    sudo gpasswd -a dd-agent www-data
    sudo chmod -R g+rx /var/lib/cacti/rra/
    sudo su - datadog-agent -c 'if [ -r /var/lib/cacti/rra/ ];
    then echo -e "\033[0;31mdatadog-agent can read the RRD files\033[0m";
    else echo -e "\033[0;31mdatadog-agent can not read the RRD files\033[0m";
    fi'
    

Configure the Agent

  1. Configure the Agent to connect to MySQL, edit your cacti.d/conf.yaml file. See the sample cacti.d/conf.yaml for all available configuration options:

    init_config:
    
    instances:
      ## @param mysql_host - string - required
      ## url of your MySQL database
      #
      - mysql_host: "localhost"
    
        ## @param mysql_port - integer - optional - default: 3306
        ## port of your MySQL database
        #
        # mysql_port: 3306
    
        ## @param mysql_user - string - required
        ## User to use to connect to MySQL in order to gather metrics
        #
        mysql_user: "datadog"
    
        ## @param mysql_password - string - required
        ## Password to use to connect to MySQL in order to gather metrics
        #
        mysql_password: "<MYSQL_PASSWORD>"
    
        ## @param rrd_path - string - required
        ## The Cacti checks requires access to the Cacti DB in MySQL and to the RRD
        ## files that contain the metrics tracked in Cacti.
        ## In almost all cases, you'll only need one instance pointing to the Cacti
        ## database.
        ## The `rrd_path` will probably be `/var/lib/cacti/rra` on Ubuntu
        ## or `/var/www/html/cacti/rra` on any other machines.
        #
        rrd_path: "<CACTI_RRA_PATH>"
    
  2. Restart the Agent.

Validation

Run the Agent’s status subcommand and look for cacti under the Checks section.

Data Collected

Metrics

cacti.hosts.count
(gauge)
The number of hosts monitored by Cacti
Shown as host
cacti.metrics.count
(gauge)
The number of metrics collected from Cacti
cacti.rrd.count
(gauge)
The number of Cacti RRD files
Shown as file
system.disk.free.last
(gauge)
The amount of disk space that is free - last polling value
Shown as byte
system.disk.free.max
(gauge)
The amount of disk space that is free - max polling value
Shown as byte
system.disk.free.min
(gauge)
The amount of disk space that is free - min polling value
Shown as byte
system.disk.used.last
(gauge)
The amount of disk space that is used - last polling value
Shown as byte
system.disk.used.max
(gauge)
The amount of disk space that is used - max polling value
Shown as byte
system.disk.used.min
(gauge)
The amount of disk space that is used - min polling value
Shown as byte
system.load.1.last
(gauge)
The average system load over one minute - last polling value
system.load.1.max
(gauge)
The average system load over one minute - max polling value
system.load.1.min
(gauge)
The average system load over one minute - min polling value
system.load.15.last
(gauge)
The average system load over 15 minute - last polling value
system.load.15.max
(gauge)
The average system load over 15 minute - max polling value
system.load.15.min
(gauge)
The average system load over 15 minute - min polling value
system.load.5.last
(gauge)
The average system load over five minute - last polling value
system.load.5.max
(gauge)
The average system load over five minute - max polling value
system.load.5.min
(gauge)
The average system load over five minute - min polling value
system.mem.buffered.last
(gauge)
The amount of physical RAM used for file buffers - last polling value
Shown as byte
system.mem.buffered.max
(gauge)
The amount of physical RAM used for file buffers - max polling value
Shown as byte
system.mem.buffered.min
(gauge)
The amount of physical RAM used for file buffers - min polling value
Shown as byte
system.ping.latency
(gauge)
The system ping latency - avg polling value
Shown as millisecond
system.ping.latency.max
(gauge)
The system ping latency - max polling value
Shown as millisecond
system.proc.running.last
(gauge)
The number of processes running - last polling value
Shown as process
system.proc.running.max
(gauge)
The number of processes running - max polling value
Shown as process
system.proc.running.min
(gauge)
The number of processes running - min polling value
Shown as process
system.swap.free.max
(gauge)
The amount of free swap space - max polling value
Shown as byte
system.users.current.last
(gauge)
The number of logged in users - last polling value
system.users.current.max
(gauge)
The number of logged in users - max polling value
system.users.current.min
(gauge)
The number of logged in users - min polling value

Log collection

  1. Collecting logs is disabled by default in the Datadog Agent, enable it in your datadog.yaml file:

    logs_enabled: true
    
  2. Add this configuration block to your cacti.d/conf.yaml file to start collecting your Cacti logs:

    logs:
      - type: file
        path: /opt/cacti/log/cacti.log
        source: cacti
    

    Change the path parameter value based on your environment. See the sample cacti.d/conf.yaml for all available configuration options.

  3. Restart the Agent.

Events

The Cacti check does not include any events.

Service Checks

The Cacti check does not include any service checks.

Troubleshooting

Known issues

The Python library used by this integration leaks memory under certain circumstances. If you experience this, one workaround is to install the python-rrdtool package instead of rrdtool. This older package is not maintained and is not officially supported by this integration but it has helped others resolve the memory issues.

A Github issue has been opened to track this memory leak.

Need help? Contact Datadog support.