Skip to main content

Cacti - v0.8.8f



Introdução


O Cacti é uma ferramenta Open Source que obtém dados e mostra esses dados em forma de gráficos, normalmente obtendo dados de uma ou mais redes, mas podendo exibir dados do host local também. Basicamente qualquer método que possa exibir um valor de tempos em tempos pode ser adicionado ao Cacti para que se tenha um gráfico.


O Cacti é uma ferramenta feita em PHP que usa como base o RRDTool (Round-robin database tool), ele quem coleta, armazena e gera os gráficos, o Cacti em sí é apenas uma interface gráfica que torna toda a administração mais fácil. Em sua maior funcionalidade, o Cacti permite carregar scripts para fazer coleta, mas seu grande funcionamento é através do SNMP.


Outro grande fator que contribui para o crescimento do Cacti é o uso de plugins, com eles podemos expandir a funcionalidade e usabilidade do Cacti.

Um plugin que não pode faltar é o PHP Network Weathermap, que permite criar mapas da rede e mostra o estado de cada elemento nele.



SNMP


O Protocolo Simples de Gerenciamento de Rede (SNMP) é um protocolo de camada de aplicação que permite a troca de informações de gerenciamento entre dispositivos. Ele faz parte da suíte de protocolos de controle de transmissão (TCP/IP). O SNMP ajuda o administrador de rede a gerenciar o desempenho da rede, identificar e resolver problemas de rede e planejar o crescimento da rede. Existem três versões do SNMP: SNMP versão 1 (SNMPv1), SNMP versão 2 (SNMPv2c) e SNMP versão 3 (SNMPv3).


Como o SNMP funcionará em sua instalação do Cacti depende da versão que você escolher. A versão 1 é limitada na maioria dos dispositivos e deve ser evitada, a menos que não haja outra opção. Se você deseja ter acesso a recursos mais avançados (por exemplo, implementar contadores de alta velocidade de 64 bits), você pode escolher a versão 2. Para implementações seguras e autenticadas, você pode escolher o SNMPv3. O Cacti implementou a versão 3 completamente a partir da versão 0.8.7.

TipoDescriçãoOpção Suportada
SNMP ExternoChama o Net-SNMP e seus binários instalados em seu sistema.Suporta todas as versões
SNMP InternoUsa a função SNMP do PHP que chama o Net-SNMP ou ucd-snmp no momento da compilação.Suporta versão 1
SNMP SpineLiga diretamente contra ucd-snmp ou Net-SNMP e chama a API.Suporta todas as versões

Net-SNMP

O Net-SNMP é um conjunto de ferramentas e bibliotecas de software de código aberto para implementar o protocolo SNMP (Simple Network Management Protocol) em sistemas Unix/Linux. SNMP é um protocolo de gerenciamento de rede amplamente utilizado para monitorar e gerenciar dispositivos de rede, como roteadores, switches, servidores e outros equipamentos de rede.

Em resumo, o SNMP é o protocolo de gerenciamento de rede, enquanto o Net-SNMP é uma implementação de código aberto desse protocolo, usada para interagir com dispositivos de rede.



RRDtool


O RRDtool (Round Robin Database Tool) é uma ferramenta de código aberto amplamente utilizada para armazenar e visualizar dados coletados de tempos em tempos, especialmente dados de desempenho e monitoramento de sistemas.


É usado para coletar, armazenar e apresentar informações de monitoramento, como estatísticas de uso de CPU, largura de banda de rede, temperaturas, entre outros. E com isso, os administradores podem analisar os dados coletados a partir de todo tipo de origem de dados (Origem de dados normalmente é conhecido pelo acrônimo DS - Data Source).


O RRDTool foi desenvolvido pelo mesmo criador do MRTG, é escrito em C e seus dados são armazenados em arquivos .rrd, outro detalhe é que os registros que podem ser armazenados num arquivo .rrd nunca crescem, o arquivo fica com o mesmo tamanho de quando foi criado.


O RRDTool oferece várias opções de linha de comando para acessar e manipular arquivos .rdd:

  • create
  • update
  • updatev
  • graph
  • dump
  • restore
  • fetch
  • tune
  • last
  • info
  • rrdresize
  • xport
  • rrdcgi


Funcionamento do RRDtool


O RRDTool segue um design lógico para adquirir e processar os dados coletados da origem de dados (DS). Segue-se uma breve descrição das diferentes etapas do processo lógico:

  • Aquisição de dados
    Ao monitorizar um dispositivo ou sistema, é necessário receber dados num intervalo de tempo constante. Ele armazena os dados em um banco de dados round-robin, que é recebido em um intervalo de tempo constante definido pelo administrador do sistema, usando o poller definido como agendador no sistema operacional.

  • Consolidação de dados
    A consolidação de dados refere-se ao processo pelo qual dados brutos são reduzidos e agregados ao longo do tempo para economizar espaço e fornecer um histórico de dados mais longo e gerenciável. O RRDtool usa um mecanismo de consolidação para manter o tamanho do banco de dados constante, independentemente de quanto tempo os dados estão sendo armazenados. Ao criar um banco de dados round-robin, o administrador pode definir em que intervalo a consolidação de dados deve ocorrer usando funções de consolidação (CF) como MAXIMUM, AVERAGE, MINIMUM, entre outras.

  • Arquivos Round Robin de dados consolidados
    Os dados brutos são armazenados em arquivos chamados Round Robin Archives (RRA). Esses arquivos são configurados para armazenar dados de forma eficiente por um período de tempo definido pelo administrador do sistema.


    Isso significa que o RRDtool mantém o tamanho do arquivo de banco de dados constante, independentemente de quanto tempo os dados são armazenados. Isso ajuda a acelerar o processamento e a análise dos dados, tornando a ferramenta mais eficaz para o gerenciamento de séries temporais de dados.
  • Dados desconhecidos
    A ferramenta RRDTool armazena dados num intervalo constante numa base de dados round-robin. Algumas vezes, estes dados podem não estar disponíveis para serem armazenados no RRD devido a falhas no dispositivo ou outras causas. Neste caso, o RRDTool armazena o ficheiro RRD com um valor de dados UNKNOWN. Este valor UNKNOWN é suportado por todas as funções da ferramenta RRDTool.

  • Gráficos
    O RRDtool permite que o administrador do sistema gere relatórios em formato gráfico e numérico com base nos dados armazenados na base de dados round-robin (RDD), utilizando as funções de processamento gráfico incorporadas. A personalização destes gráficos é possível com base na cor, tamanho e conteúdo.



Operações


As operações do Cacti são divididas em três tarefas distintas:

  • Data retrieval (Recuperação de dados)
  • Data storage (Armazenamento de dados)
  • Data presentation (Apresentação de dados)


Data retrieval


O Cacti recupera os dados para gerar os gráficos através de um sistemas chamado poller. É uma aplicação que é executada de tempos em tempos, funciona como um serviço de agendamento. No Unix/Linux é usado o crontab para executar o poller. Por padrão usa o cmd.php, é essa aplicação que será usada para fazer coleta de informações via SNMP, como irei explicar mais para frente, é uma ótima ideia mudar esse cmd.php para o spine.


Para recuperar os dados de todos os dispositivos remotos em uma infraestrutura de rede, o Cacti usa o SNMP (Simple Network Management Protocol), ou seja, dispositivos capazes de usar SNMP podem ser monitorados pelo Cacti.


IMPORTANTE

Como foi dito, o Cacti usa o cmp.php como poller. Caso um poller mais rápido seja necessário devido a uma grande infraestrutura, podemos usar o Spine, formalmente conhecido como cactid, um poller muito rápido escrito em C que faz uso de threads POSIX e links diretamente para a biblioteca Net-SNMP para sobrecarga mínima de polling SNMP.


O Cacti vem com duas formas de configurar a recuperação de dados:

  • Data Input Method
  • Data Queries


Data Input Method


É um sistema básico para criação de gráfico que o Cacti usa, com ele é possível criar um método para obter os dados. O mais usado é a criação de script, nele usamos a opção Script/Command.



Data Queries


Não substitui o Data Input Method, ele na verdade é uma maneira fácil de consultar ou listar dados baseados num index que torna os dados mais fácil para adicionar ao gráfico. O index deve existir para que o Cacti consiga procurar os dados com base nele. O Data Query é composto por duas partes, o arquivo XML contendo os indexes a serem pesquisados e a definição dentro do Cacti. Cada query deve ter seu próprio xml.

O xml define onde a informação está e como recuperar ela.



Data storage


Existem muitos modos de guardar os dados armazenados, como banco de dados SQL e banco de dados de arquivo simples. O Cacti usa o RRDTool para armazenar dados.


O RRD é um sistema que armazena e mostra dados de diferentes dispositivos em forma de gráfico.



Data presentation


O Cacti usa a função gráfica integrada do RRDTool para exibir em forma de gráficos os dados coletados de dispositivos.



Poller Cache


O Cache do Poller mantém todos os comandos que o Cacti vai emitir durante o processo de obtenção dos dados, podemos ver isso na seção Utilities, clique em System Utilities -> View Poller Cache.


Quando realizado uma mudança no Cacti e os gráficos não atualizarem mais, precisamos reconstruir o Poller Cache. Para reconstruir vá na seção Utilities, clique em System Utilities -> Rebuild Poller Cache. Se tudo der certo, será redirecionado para a página View Poller Cache, se algo der errado, você verá um erro na tela.



Instalação


Existem duas formas de instalar o Cacti, uma delas é pelo repositório da distribuição e outra é instalando direto do código fonte, eu vou optar pela instalação usando o repositório do Ubuntu 16.04 LTS, para um versão mais recente acesse aqui.


# Primeiro atualize a data/hora do sistema:
$› sudo dpkg-reconfigure tzdata

# Comece atualizando a lista de pacotes no repo:
$› sudo apt update

# Atualizando os pacotes:
$› sudo apt dist-upgrade -y

# Configure o hostname:
$› sudo hostnamectl set-hostname cacti

# Instale o Cacti:
$› sudo apt install cacti -y

## Exemplo de senha usada durante a instalação: BvI1Tbx2VX6DH980piOJIGFq
## Web Server: Apache2
## Configure database for cacti with dbconfig-common?: Yes
## Senha para user Cacti: BvI1Tbx2VX6DH980piOJIGFq

# Edite o arquivo abaixo:
$› sudo vim /etc/php/7.0/apache2/php.ini

## Crie a linha abaixo no arquivo
date.timezone = America/Sao_Paulo

# Reinicie o server após finalizar a instalação!

Agora acesse via browser http://192.168.121.247/cacti/ (não esqueça de mudar o IP). Precisamos fazer isso para continuar a instalação.


Assim que logar clique em next, para a pergunta Please select the type of installation deixe New install, depois vá em Finish. O username e password padrão é admin, depois de logar, escolha uma nova senha, no meu caso vou deixar BvI1Tbx2VX6DH980piOasfikrg.


Dica

A localização dos arquivos do Cacti, como: logs, scripts, script de gerenciamento do Cacti, documentação entre outros fica em: /usr/share/cacti/.


Para ver os gráficos no Cacti sem precisar ficar logando com algum usuário faça:

1 - Logue com usuário admin;
2 - Em Utilities -> User Management -> guest. Marque a caixa de seleção que habilita o usuário guest. Em Graph Settings você pode marcar qual a Árvore será acessada ao logar.
3 - Agora vá em Configurations -> Settings -> Authentication -> Guest User coloque o usuário guest.


Agora é só acessar a url: http://192.168.121.247/cacti/graph_view.php?action=tree&tree_id=1


No momento não vai ter nada porque não colocamos nenhum gráfico nesse árvore.



Gráficos


O Cacti criará gráficos sem a necessidade de uma configuração extensiva por parte dos administradores. Os modelos de templates de gráficos vão facilitar a vida, não é necessário compreender a funcionalidade de cada campo para criar gráficos para dispositivos ligados à rede. Cada gráfico armazena diferentes conjuntos de parâmetros que controlam diferentes aspectos de cada gráfico.


Por enquanto vamos utilizar as opções predefinidas no Cacti. Para construir um modelo personalizado, precisamos entender o protocolo SNMP e as ferramentas de linha do Net-SNMP. Vamos criar gráficos com base nos modelos e dispositivos modelos disponíveis.



Configurando um dispositivo para ser monitorado


Vou demonstrar basicamente como configurar um servidor Linux com Ubuntu para ser monitorado no nosso servidor Cacti.

# Instale o snmpd:
$› sudo apt install -y snmpd

# Configure o SNMPD, mude o IP '192.168.121.247' para ser o IP do servidor Cacti:
$› cat /etc/snmp/snmpd.conf
rocommunity public 192.168.121.247
rwcommunity private 127.0.0.1
disk /

# Reinicie o daemon do snmpd:
$› systemctl restart snmpd


Adicionando um dispositivo


Antes de adicionarmos um gráfico, temos que adicionar um dispositivo para o qual pretendemos criar o gráfico. Para o fazer isso, clique em Devices abaixo de Management. O Cacti abrirá o painel de visualização Dispositivos.


Clique em Add no canto superior direito.

Será aberto um novo formulário para adicionar um novo dispositivo. Os dois primeiros campos, Description e Hostname, são ambos obrigatórios para a configuração. Outros campos devem ser configurados para funcionar o SNMP.


As opções que vamos usar estão descritas abaixo:
OpçãoDescrição
DescriptionColoque uma descrição para esse dispositivo.
HostnameColoque o IP do dispositivo a ser gerenciado. Pode ser usaod um nome, esse nome será resolvido usando os mecanismos padrão de resolução de host (DNS).
Host TemplateEstamos começando a gerenciar um dispositivo via SNMP, então deixe Generic SNMP-enabled.
SNMP VersionDeixe 2.
SNMP CommunityPode ser qualquer coisa que não seja public, mas como é apenas um teste, pode deixar public mesmo.
Downed Device DetectionQual método de verificação será usado para ver se o dispositivo está UP.
NONE: Desativa a detecção de host inativo.
PING and SNMP Uptime: execute ambos os testes.
PING or SNMP Uptime: Execute um, se falhar tenta o outro.
SNMP Uptime: Faz a verificação usando o SNMP no OID .1 e .1.3.
Ping: execute um teste de ping.
Ping Timeout ValueApós esse tempo, o teste falha (medido em milissegundos).
Ping Retry CountO número de vezes que o Cacti tentará executar ping em um host antes de falhar.
SNMP VersionQual versão do SNMP usar para esse dispositivo.
SNMP CommunityQual a community vamos usar para consultar os dados.
SNMP PortQual a porta do SNMP vamos usar.
SNMP TimeoutO número máximo em milissegundos que o Cacti aguardará por uma resposta SNMP (não funciona com suporte a php-snmp).
Maximum OID's Per Get RequestEste é um recurso de desempenho. Especifica o número de OIDs que podem ser obtidos em uma única solicitação SNMP Get. Este recurso só funciona ao usar o Spine.

Clique em Create no canto inferior direito.


Após a criação do dispositivo seremos redirecionados a página do dispositivo que acabamos de criar, no final da página nós temos duas opções Associated Graph Templates e Associated Data Queries.

  • Associated Graph Templates
    Um "Graph Template" no Cacti é um conjunto de configurações que define como os dados coletados por uma consulta devem ser apresentados em um gráfico. Ele controla a formatação, cores, rótulos e outras propriedades visuais do gráfico. Já o "Associated Graph Templates" permite associar um modelo de gráfico (Graph Template) específico a uma consulta de dados. Isso significa que, quando os dados da consulta são coletados, eles são apresentados no gráfico de acordo com o modelo associado. Por exemplo, você pode criar um modelo de gráfico que exibe o uso de CPU em um gráfico de barras verdes e associá-lo à consulta de dados que coleta o uso de CPU do seu servidor.

  • Associated Data Queries (Consultas de Dados Associadas)
    No Cacti, uma consulta de dados é uma maneira de coletar informações de dispositivos ou serviços, como uso de CPU, largura de banda de rede, temperatura, etc. Associated Data Queries permite vincular uma consulta de dados a um dispositivo ou serviço específico. Isso significa que você está dizendo ao Cacti o que deseja monitorar em um dispositivo ou serviço específico. Por exemplo, você pode criar uma consulta de dados para coletar o uso de CPU de um servidor e, em seguida, associá-la a esse servidor no Cacti.


Por padrão nosso server veio com SNMP - Interface Statistics em Associated Data Queries, isso significa que nós podemos criar gráficos para as interfaces do servidor.


DICA

Se você vir um erro de SNMP, há um problema de SNMP entre o servidor com o Cacti instalado e o dispositivo que você está tentando adicionar ao Cacti.
Você pode usar o snmpwalk para depurar o problema. O comando a seguir mostra a tabela de interface num dispositivo Linux.

$› snmpwalk -v2c -c public 192.168.121.134 iso.3.6.1.2.1.31.1.1.1.1
iso.3.6.1.2.1.31.1.1.1.1.1 = STRING: "lo"
iso.3.6.1.2.1.31.1.1.1.1.2 = STRING: "eth0"


Criando um gráfico para o dispositivo


Agora que criamos um dispositivo no Cacti, vamos criar alguns gráficos para esse dispositivo. Você pode iniciar a criação de um gráfico a partir de dois locais diferentes: selecione New Graphs abaixo de Create ou, se ainda estiver editando o dispositivo, clique em Create Graphs for this Host. Após escolher qualquer uma das duas opções, você verá um formulário. As opções disponíveis podem variar com base no dispositivo/hospedeiro que você escolher.


Em New Graphs for certifique-se de que seja o dispositivo no qual acabamos de criar, como no exemplo abaixo. Vamos criar um gráfico para monitorar a interface de rede, caso não esteja aparecendo nenhuma interface, clique na bolinha verde, depois disso marque a caixa de seleção a direita para a interface desejada, no meu caso é a eth0. Em Select a graph type pode deixar In/Out Bits (64-bit Counters).

Add_graph


Agora é só clicar em Create. Demora um pouco até o gráfico ser criado (arquivo .rrd).



Organizando gráficos


No Cacti, os gráficos podem ser organizados em uma estrutura de árvore hierárquica. Cada árvore de gráficos pode conter zero ou mais ramos que contêm hosts ou gráficos individuais. Até mesmo cada nó da árvore pode ter vários ramos. Dessa forma, podemos organizar gráficos de forma funcional. Para acessar vá em Graph Trees abaixo de Management. Na página de Árvores de Gráficos, clique no botão Add para criar uma nova árvore de gráficos.


Escolha um nome e selecione um tipo de ordenação. Existem quatro tipos de ordenação disponíveis:

  1. Manual Ordering: Cada gráfico/dispositivo adicionado pode ser reordenado manualmente dentro da árvore/ramo.

  2. Alphabetic Ordering: Cada gráfico/dispositivo é ordenado em ordem alfabética.

  3. Numeric Ordering: Cada gráfico/dispositivo é ordenado numericamente.

  4. Natural Ordering: Ordenação alfanumérica que leva em consideração o aumento numérico.

Você pode escolher o tipo de ordenação que melhor atenda às suas necessidades de organização da árvore de gráficos.


Após criar a árvore, é possível entrar novamente em Graph Trees abaixo de Management, lá estará listado a nova árvore criada, ao clicar no nome da nova árvore é possível mudar o tipo de ordenação e até mesmo o nome, além disso, ainda é possível adicionar itens nessa árvore clicando no botão Add, esses itens são:

  • Graph
    Aqui adicionamos um gráfico que já exista, ou seja, o gráfico já está criado, estaremos apenas vinculando ele na nossa árvores (mas vamos fazer esse vinculo a partir de outro lugar).

  • Header
    É como se fosse uma seção dentro da árvores, isso facilita a organização dos gráficos, separando-os por seções.

  • Host
    Podemos adicionar um dispositivo com um agrupamento de gráficos específicos.


Vou criar um item Header com o nome Cliente para colocar o gráfico que criamos. É possível adicionar um gŕafico diretamente por aqui, como visto acima pelo item Graph, mas vou adicionar por outro caminho, vá em Devices -> Client test -> Graph List. Agora marque a caixa de seleção para o gráfico desejado (no meu caso é Client test - Traffic - eth0) e no menu de opções abaixo (em Choose an action) deixe Place on a Tree (Graph) (o nome da minha árvore principal é Graph), depois clique em Go.


Em Destination Branch: coloque Cliente e clique em continue, pronto, nosso gráfico foi adicionado a árvore.


DICA

No Ubuntu 16.04 LTS com o Cacti instalado via repositório pode acontecer dos gráficos não serem exibidos no modo dual-panel quando estamos no Tree Mode para ver os gráficos, para mais detalhes do problema clique aqui. Abaixo segue a solução encontrada no link anterior para resolver o problema.

$› sudo apt install --reinstall javascript-common


Criando e usando Templates


Os "modelos" (templates) são conjuntos predefinidos de configurações que podem ser aplicados a dispositivos, gráficos e consultas de dados para simplificar o processo de monitoramento e coleta de dados. Os modelos são uma característica fundamental do Cacti e oferecem várias vantagens. Os modelos do Cacti podem ser importados e exportados por meio do Console na seção "Importar/Exportar". Você só pode importar modelos que foram criados em um sistema que está na mesma versão ou em uma versão anterior do Cacti.


Usar modelos no Cacti é uma maneira eficaz de padronizar a configuração de dispositivos e gráficos, economizando tempo e reduzindo o potencial de erros ao adicionar novos elementos à sua infraestrutura de monitoramento.



Tipos de templates


Os templates do Cacti são divididos em três áreas:

  1. Graph templates
  2. Host templates
  3. Data templates

Na seção Templates, é possível ver os três tipos de templates que vêm com a instalação básica do Cacti. Se você clicar em um desses links, verá a lista completa de templates existentes para o tipo de template que clicou.



Graph templates


Os gráficos são usados para visualizar os dados que você coletou. Um modelo de gráfico fornece um esqueleto para um gráfico real. Quando você tem mais de um sistema/dispositivo, um modelo de gráfico economizará muito tempo e também reduzirá a possibilidade de erro. Quaisquer parâmetros definidos dentro de um modelo de gráfico são copiados para todos os gráficos criados usando esse modelo.



Host templates


Como eu não uso esse modelo de template não tenho muito o que falar dele, vou deixar apenas uma criação desse template.


Os modelos de host (Host templates) são um pouco diferentes dos templates de Dados e Gráficos. Um template de host é uma coleção de templates de gráficos associados e consultas de dados que você deseja associar a um tipo de host específico. Por exemplo, para um servidor Linux podemos associar os templates de gráficos: consumo de CPU, consumo de memória, consumo de disco e etc. Sempre que criarmos um dispositivo do tipo Linux no Cacti e vincularmos ele um determinado Host template, automaticamente esse novo dispositivo vai receber alguns gráficos para começar a ser monitorado.



Data templates


Como já foi visto, Data Templates definem uma forma de trabalhar com os tipos de dados (como tratar dados) antes de serem enviados ao gráfico.



Criando um Template de gráfico


Vamos criar um novo modelo de gráfico. Na seção de Templates, clique em Graph Templates. Uma lista dos modelos de gráficos já disponíveis será exibida. Clique no botão Add no canto superior direito. Aqui você deve fornecer os valores que serão usados ​​no futuro para criar um gráfico usando nosso template.


CampoDescription
NameNome do modelo.
TitleTítulo será exibido na parte superior do gráfico. O formato de título mais usado é |host_description| - Nome_do_gráfico. Se você marcou Use Per-Graph Value, sempre que usar este modelo de gráfico para criar um gráfico, você deverá fornecer uma entrada para esta opção. É sempre melhor ativar esta opção para o campo de título.
Image FormatO tipo de imagem que será gerada; o padrão, PNG, é adequado para quase todos. Existem outras duas opções, SVG e GIF.
HeightAltura do gráfico. O valor padrão é de 120 pixels, o que é suficiente para todos os gráficos.
WidthLargura do gráfico. O valor padrão é de 500 pixels.
Slope modeOs gráficos do RRDtool são compostos por curvas em forma de escada por padrão. Isso está alinhado com a forma como o RRDtool calcula seus dados. Algumas pessoas preferem uma aparência mais "orgânica" para seus gráficos. O RRDTool versão 1.2 e acima suporta o suavização de gráficos, conhecida como modo de inclinação.
Auto ScaleMarque isso se desejar que o gráfico seja dimensionado automaticamente.
Auto Scale OptionsSe você marcou a opção de Escala Automática, então você deve selecionar uma das quatro opções a seguir. Caso contrário, ignore-a.
--alt-autoscale (ignorando limites fornecidos): Aqui, o RRDTool ignorará todos os limites fornecidos.
--alt-autoscale-max (aceitando um limite inferior): Ele aceitará o limite inferior, mas o valor máximo será gerado automaticamente, dependendo dos dados armazenados.
--alt-autoscale-min (aceitando um limite superior): Semelhante ao --alt-autoscale-max, exceto que ele aceita o limite superior. (Requer RRDTool 1.2.x.)
--alt-autoscale (aceitando ambos os limites): Isso aceita tanto os limites superiores quanto os inferiores.
Logarithmic ScalingEscolha isso se você deseja escala logarítmica no eixo y.
Scientific Units for Logarithmic ScalingIsso depende da Escala Logarítmica, portanto, se você não a marcou, pode ignorá-la.
Rigid Boundaries ModeDe acordo com o manual do RRDTool: "Normalmente, o rrdgraph expandirá automaticamente o limite inferior e superior se o gráfico contiver um valor fora da faixa válida. Com esta opção, você pode desabilitar esse comportamento." Se você realmente não precisa disso, é melhor deixá-lo desabilitado.
Auto PaddingMarque isso se você deseja habilitar o preenchimento automático neste modelo.
Allow Graph ExportVocê deve marcar isso se desejar permitir a exportação deste modelo de gráfico.
Upper LimitO valor máximo que será exibido no eixo y. Este valor é ignorado quando a escala automática está ativada.
Lower LimitO valor mínimo que será exibido no eixo y. Este valor é ignorado quando a escala automática está ativada.
Base ValueSe você deseja basear os rótulos do eixo y em 1000 ou 1024. Normalmente, este campo será definido como 1024 para medições de memória e 1000 para medições de tráfego.
Unit Grid ValueDefine o valor da unidade para o eixo y.
Unit Exponent ValueDefine a escala de 10^e para o eixo y. Valores válidos para este campo estão entre -18 e 18. Por exemplo, você pode usar 3 para exibir tudo em k (quilo) ou -6 para exibir tudo em u (micro).
Vertical LabelO texto a ser impresso na borda esquerda do gráfico. Normalmente, são as unidades nas quais os dados do gráfico são medidos.

Para o meu template de gráfico vou preencher as seguintes opções:

  • Name: Check CPU
  • Title: |host_description| - Check CPU

Após criado nós temos que adicionar um Graph Template Item e Graph Item Inputs para finalizar a criação do template de gráfico.



Graph Template Item


Na seção Graph Template Items nós criamos os itens que serão mostrados no gráfico, aqui vamos definir como o gráfico será desenhado, vamos definir as cores, tipo de preenchimento, legenda e etc. Tomando como exemplo o uso de memória RAM, podemos definir alguns dados: Criar um item line1 para desenhar o gráfico e mostrar memória em uso, outro para memória livre, memória em cache e etc, alem de criar gprints para exibir a média, máxima e o consumo de memória atual.


Para adicionar um Graph Template Items, clique em Add no lado direito da caixa Graph Template Items.

CampoDescription
Data SourceA fonte de dados a ser usada para este item de gráfico. Selecione a fonte de dados que deseja mostrar neste item de gráfico no menu suspenso. Nem todos os itens de gráfico podem ter uma fonte de dados. Se você não precisa de nenhuma fonte de dados para este item, selecione None. Os dados aqui vem de Data Templates.
ColorSelecione a cor que deseja usar para esta fonte de dados. Ela só estará disponível para os tipos de item de gráfico LINHA1 - LINHA3, ÁREA e EMPILHAR.
Opacity/Alpha ChannelA opacidade/canal alfa da cor. Não disponível para RRDTool-1.0.x.
Graph Item TypeUm dos campos mais importantes. Aqui, você deve selecionar como os dados deste item serão exibidos no gráfico. Os tipos possíveis são: COMENTÁRIO, HRULE (Regra Horizontal), VRULE (Regra Vertical), LINHA1-3, Área, Empilhar, GPRINT (Impressão Gráfica) e LEGENDA.

AREA: Preenche a área do gráfico, desde do desenho da linha até a base do gráfico.

GPRINT: Não tem efeito no desenho do gráfico, é usado para exibir a informação que foi coletada, usado para mostrar Current, Average e Maximum dos valores coletados.

STACK: É uma mistura entre AREA e GPRINT.

LINE: Semelhante a AREA, mas cria uma linha, sem o preenchimento mencionado, a linha tem 3 opções, cada uma com espessura maior que a anterior.

HRULE: Permite adicionar uma linha horizontal no gráfico para marcar um valor específico. Isso é útil para criar linhas de referência horizontais no gráfico, como um limiar ou uma meta.

VRULE: Semelhante ao HRULE, mas adiciona uma linha vertical no gráfico para marcar um valor específico ao longo do eixo X. Isso é útil para destacar um ponto específico no tempo ou um evento no gráfico.

LEGEND: É usado para adicionar uma legenda ao gráfico. Essa legenda fornece informações sobre os itens representados no gráfico, como as cores e os rótulos associados a cada linha ou área.

COMMENT: É usado para adicionar comentários ao gráfico. Isso pode ser útil para fornecer informações adicionais, explicações ou anotações diretamente no gráfico.
Consolidation FunctionAqui, você deve informar ao RRDTool qual função de consolidação usar. Na maioria dos casos, é usada a função MÉDIA. Você também pode usar MAX, MIN ou LAST para o tipo de item de gráfico que seja GPRINT.
CDEF FunctionSe você deseja aplicar uma função CDEF ao item de gráfico, selecione uma aqui. Consulte a seção CDEF do manual para obter mais informações.
ValueEste campo é usado apenas com os tipos de item de gráfico HRULE (Regra Horizontal) ou VRULE (Regra Vertical). Digite um número inteiro válido para desenhar a linha em HRULE ou o horário HH:MM para VRULE.
GPRINT TypeSe este item for um GPRINT, você pode escolher como deseja que o número seja formatado. Você pode adicionar o seu próprio na seção de Predefinições de GPRINT do Cacti.
Text FormatVocê pode inserir texto a ser exibido na legenda aqui. Este campo se aplica a todos os tipos de item de gráfico, exceto para o tipo LEGENDA.
Insert Hard ReturnMarque esta caixa para forçar os itens de gráfico para a próxima linha.

DICAS

Ao criar um item gráfico, você deve sempre começar com um item AREA antes de usar STACK; caso contrário, seu gráfico não será renderizado.


O que é a Função CDEF?
O termo CDEF Function ou apenas CDEF se refere a uma função de definição de dados consolidados, que é uma parte fundamental do sistema de gráficos de Cacti. A função CDEF (Consolidation Definition Function) permite que você execute operações matemáticas ou lógicas em dados de origem antes de criar um gráfico. Isso é útil quando você deseja agregar, transformar ou calcular novos dados com base nos dados brutos coletados de seus dispositivos de monitoramento.


O que é um Data Source?
Um Data Source (Fonte de Dados) é um componente usado em um template de gráfico para coletar e armazenar dados de uma ou mais fontes. Um Data Source é a unidade básica que permite que o Cacti colete dados e crie gráficos a partir desses dados.


Vou criar um template de gráfico para monitorar o uso de CPU, por ser mais tranquilo. A image abaixo mostrar todos os itens que tenho no template de gráfico:

Add_graph


A imagem abaixo mostra o item com ID 1 do template de gráfico:

Add_graph


A imagem abaixo mostra o item com ID 2 do template de gráfico:

Add_graph


A imagem abaixo mostra o item com ID 3 do template de gráfico:

Add_graph


A imagem abaixo mostra o item com ID 4 do template de gráfico:

Add_graph



Graph Item Inputs


A segunda caixa é Graph Item Inputs. As entradas de itens de gráfico são a fonte de entrada por meio da qual os dados serão coletados. Para adicionar uma nova entrada de item de gráfico, clique no botão Add no lado direito da caixa Graph Item Inputs.


Abaixo estão os campos que devem ser preenchidos para um item de entrada de gráfico:

CampoDescription
NameIsso será usado como identificador para a entrada deste item de gráfico no modelo de gráfico e na página de edição do gráfico.
DescriptionEle será exibido na página de edição do gráfico. Este campo é opcional.
Field TypeAqui você deve escolher o campo que irá associar a um ou mais itens do gráfico.
Associated Graph ItemsSelecione os itens do gráfico para os quais deseja aceitar a entrada do usuário.

Como estamos usando o Data template SNMP - Generic OID Template que já foi adicionado após criarmos o item LINE1 não precisamos colocar mais nenhuma entrada de dados.


Agora vamos criar o gráfico usando nosso template, para isso vá em Devices e clique no servidor que gostaria de criar o gráfico, depois disso clique em Create Graphs for this Host, no menu de seleção Graph Types:, deixe Graph Template Based e na seção Graph Templates seleciona o template que criamos, no caso é Check CPU, agora clique em Create. Na próxima página corrija o nome do gráfico e na opção OID coloque o número .1.3.6.1.4.1.2021.11.11.0, depois é só clicar em Create novamente.


Esse gráfico vai retornar 99 porque o valor que o SNMP pega é o valor de inatividade da CPU, para converter esse valor em uso da CPU poderíamos criar uma função CDEF para "converter", isso funciona nesse caso. A conta seria 100-X onde X é o valor da CPU ociosa.



Criando um Template de gráfico com vários Item Inputs


Algumas vezes é necessário criar um template onde vários itens do gráfico receberão entradas, nesse caso, podemos fazer de duas maneiras. Uma delas é criar um script e colocar esse script para rodar no Cacti, dessa forma, vamos ter apenas uma única entrada, já que o script obteria todos os dados e forneceria para o Cacti como uma única entrada. Já a segunda maneira é criar mais Graph Item Inputs, sendo um desses para cada entrada de dados.



Método 1 - Data Input Methods


Primeiro vamos criar um Data Templates. No Cacti, Data Templates são templates que definem como os dados de várias fontes são coletados, armazenados e exibidos. Esses modelos fornecem uma maneira consistente de configurar a coleta de dados em várias fontes.


Primeiro vamos criar o script para depois criar o Data Template. Crie o script para fazer a coleta, ele deve ficar em /usr/share/cacti/site/scripts.

# Crie o arquivo abaixo:
$ sudo vim /usr/share/cacti/site/scripts/check_cpu

###### Conteúdo do arquivo ######

#!/bin/sh
#
# exemplo: 127.0.0.1 2c public .1.3.6.1.4.1.2021.11.11.0 10 30

host=${1}
version=${2}
community=${3}
oid=".1.3.6.1.4.1.2021.11.11.0"

if [ "${version}" = '2' ]; then
version='2c'
fi

idle=`snmpget -OQv -v${version} -c ${community} ${host} ${oid}`

cpu=$((100 - ${idle}))

echo "Idle:${idle} Used:${cpu}"

###### Fim do conteúdo do arquivo ######

# Agora torne o arquivo executável:
$ sudo chmod +x /usr/share/cacti/site/scripts/check_cpu

Vamos criar uma entrada de dados no Cacti, para isso vá em Data Input Methods abaixo de Collection Methods. Clique em Add e forneça os dados abaixo:

  • Name: check_cpu_used-idle
  • Input Type: Script/Command
  • Input String: /bin/bash <path_cacti>/scripts/check_cpu <hostname> <snmp_version> <snmp_community>

Cada string dentro de <> será reconhecido como o nome de uma variável, nessa etapa temos que falar para o Cacti as variáveis de entrada e o que será gerado como resultado.


Clique em Create. Em Input Fields vamos adicionar três entradas, elas são: nome da máquina, versão do snmp e a community. CLique em Add em Input Fields.

CampoDescription
Field [Input]Para qual a variável estamos criando a entrada.
Friendly NameDefine um nome para essa variável (um nome amigável), eu sempre deixo o mesmo nome do campo acima.
Regular Expression MatchUsado para fazer algum regra matemática com esse dado.
Allow Empty InputO campo pode estar vazio ou não.
Special Type CodeQual o nome da variável que será reconhecida pelo Host Template.

Crie três entradas, vou deixar as três que criei abaixo:

  • Field [Input]: Deixe selecionado hostname
  • Friendly Name: hostname
  • Special Type Code: hostname

  • Field [Input]: Deixe selecionado snmp_version
  • Friendly Name: snmp_version
  • Special Type Code: snmp_version

  • Field [Input]: Deixe selecionado snmp_community
  • Friendly Name: snmp_community
  • Special Type Code: snmp_community

Em Output Fields vamos adicionar o dado que será retornado, então clique em Add. O script vai retornar dois campos, um deles é Idle e o outro é Used, portanto crie dois campos também, veja como deixei:

  • Field [Output]: Idle
  • Friendly Name: Idle

  • Field [Output]: Used
  • Friendly Name: Used

Segue uma imagem de como ficou:

Add_graph


Para criar um Data Templates clique em Data Templates -> Add. Depois é só configurar as entradas de dados, segue um exemplo:


Para aba Idle: Data Template Idle


Para aba Used: Data Template Used

Esse template de gráfico é o mesmo que será usado no próximo método, ele é uma duplicada diferenciada do gráfico de Check CPU criado anteriormente. Perceba que o script retorna isso Idle:${idle} Used:${cpu}, por padrão deve ter o mesmo nome do Data Source Item mostrado nas imagens abaixo. Agora é só corrigir o Graph Template e criar o gráfico.


Em Graph Template Items, quando estiver adicionando ou editando um item do gráfico, a opção Data Source deve corresponder ao Data Source criado em Data Template, por exemplo:


O nome do Data template criado é Check CPU script, dentro dele temos dois itens na origem de dados (Data Source Item), que são: Idle e Used, como mostrado na imagem acima. Quando formos criar o layout do gráfico em Graph Template Items, temos que certificar de selecionar Check CPU script - (Idle) ou Check CPU script - (Used) na opção Data Source, veja dois exemplos:

Para aba Idle: Data Template Idle


Para aba Used: Data Template Used


Depois é só criar o gráfico!



Método 2 - Data Templates


Primeiro vamos criar dois Data Templates. No Cacti, Data Templates são templates que definem como os dados de várias fontes são coletados, armazenados e exibidos. Esses modelos fornecem uma maneira consistente de configurar a coleta de dados em várias fontes. Acesse Data Templates abaixo da seção Templates, e clique em Add. Agora temos que preencher algumas opções:

  • Name: cpu_idle
    É o nome do Data Template que estamos criando.

  • Name: |host_description| - cpu_idle
    É o nome do Data Source que estará vinculado ao gráfico.

  • Data Input Method: Get SNMP Data
    É a maneira que será usada para obter os dados, nesse caso será via SNMP. Esse Data Input Method não tem nenhum relação com Data Input Methods da seção Collection Methods.

  • Internal Data Source Name: cpu_idle
    Devemos fornecer um nome que será reconhecido internamente quando formos vincular esse Data Template dentro do Graph Templates.

  • Maximum Value ('U' for No Maximum): 0
    Como o menor valor de idle da CPU é 0.

  • Minimum Value ('U' for No Minimum): 100
    O maior valor de idle da CPU é 100.


Agora clique em Create, mais opções serão exibidas, certifique-se de marcar a caixa de seleção Use Per-Data Source Value (Ignore this Value) na seção OID. Crie outro Data Template e deixe como abaixo:

  • Name: cpu_used
    É o nome do Data Template que estamos criando.

  • Name: |host_description| - cpu_used
    É o nome do Data Source que estará vinculado ao gráfico.

  • Data Input Method: Get SNMP Data
    É a maneira que será usada para obter os dados, nesse caso será via SNMP. Esse Data Input Method não tem nenhum relação com Data Input Methods da seção Collection Methods.

  • Internal Data Source Name: cpu_used
    Devemos fornecer um nome que será reconhecido internamente quando formos vincular esse Data Template dentro do Graph Templates.

  • Maximum Value ('U' for No Maximum): 0
    Como o menor valor de used da CPU é 0.

  • Minimum Value ('U' for No Minimum): 100
    O maior valor de used da CPU é 100.


Agora clique em Create, mais opções serão exibidas, certifique-se de marcar a caixa de seleção Use Per-Data Source Value (Ignore this Value) na seção OID. As imagens abaixo mostram como ficou minha configuração.


Data Template Idle Data_template_idle


Data Template Used Data_template_used


Como já temos o gráfico existente, eu vou duplicar o Graph Template e modificar a duplicada para podermos incluir mais de uma entrada. Para duplicar basta ir em Graph Templates abaixo de Templates, seleciona a caixa de seleção do gráfico desejado, no menu suspenso Choose an action deixe Duplicate, depois clique em Go. Na opção que se abrir mude o nome do novo template.


Agora vamos criar o template de gráfico para usar os Data Templates que criamos. Com o gráfico novo eu vou criar os itens iguais foi mostrado em Método 1 - Data Input Methods, a única diferença é que os Inputs vamos deletar os Inputs, já que eles estavam criados e não são esses que vamos usar. Para deletar eles vá em Graph Templates -> Check CPU Idle and Used (eu dei esse nome para diferenciar), em Graph Item Inputs clique no X vermelho.


Agora vem a parte chata, para cada item que nós temos no gráfico (Graph Item), clique no número do item, em Data Source deixe cpu_idle para os itens referentes ao Idle e cpu_used para os itens referentes ao Used. Após fazer isso para o primeiro item, será adicionado automaticamente os Graph Item Inputs, que deverão ser mais ou menos assim:


Add_graph


Depois é só criar o gráfico! Mas ainda falta um detalhe para esse nosso gráfico, temos que converter o valor de Used para mostrar o Uso de CPU, no momento Used e Idle mostram o mesmos valores.


Acesse a entrada de dados que já estava criada e certifique-se de que ela não estava marcada para os novos itens. Depois disso, temos que criar uma função para converter o valor de Idle da CPU para ter o resultado de uso da CPU. Para criar, vá na seção Management, clique em Graph Management, depois clique em CDEFs e depois em Add. Forneça um nome, depois de salvar, clique em Add na linha CDEF Items, as opções são:

  • CDEF Item Type: Custom String
  • CDEF Item Value: 100

Agora crie outro:

  • CDEF Item Type: Special Data Source
  • CDEF Item Value: Current Graph Item Data Source (Ele fica como CURRENT_DATA_SOURCE após criado.)

Agora crie outro:

  • CDEF Item Type: Operator
  • CDEF Item Value: - (sinal de menos)

Ficou assim:

Add_graph


Agora é só voltar no gráfico onde tem os itens e mudar a opção CDEF Function colocando o CDEF que criamos (precisa fazer em todas as opções para itens do tipo cpu_used). Agora faça o mesmo procedimento para adicionar mais um gráfico, usando a oid .1.3.6.1.4.1.2021.11.11.0.


No momento da criação do gráfico será solicitado a fornecer as OIDs para os Data Templates, no caso da imagem abaixo foi utilizado o mesmo OID, mas a ideia é representar um gráfico que precisa de várias OIDs.

Add_graph



Data Input Methods


Os métodos de entrada de dados são o sistema básico que o Cacti usa para coletar dados para gerar gráficos. Para verificar como trabalhar com Data Input Methods reveja este link onde foi usado um exemplo mais prático para uso do Data Input Methods.



Data queries


Consultas de dados (Data queries) não substituem os Data Input Methods no Cacti. Em vez disso, elas fornecem uma maneira fácil de consultar ou listar dados com base em um índice, tornando os dados mais fáceis de serem representados graficamente. O uso mais comum de uma Data query no Cacti é recuperar uma lista de interfaces de rede via SNMP. Se você deseja criar gráficos de tráfego de uma interface de rede, o Cacti deve primeiro recuperar uma lista de interfaces no host.


Em segundo lugar, o Cacti pode usar essa informação para criar os gráficos e fontes de dados necessários. As consultas de dados se preocupam apenas com a primeira etapa do processo, que é a obtenção de uma lista de interfaces de rede e não a criação dos gráficos/fontes de dados para elas. Embora a listagem de interfaces de rede seja um uso comum para as consultas de dados, elas também têm outros usos, como listar partições, processadores e etc.



Editar um Data Source/Data Templates de Produção


Algumas vezes é necessário editar um Data Template para adicionar algo a mais no gráfico, podemos editar os Templates mas temos que tomar cuidado, após editar um template, principalmente um Data Template os novos dados incluídos lá não existem no rrd de gráficos já criados. Esse processo funciona para gráficos que tenham apenas um único rrd, para gráficos com mais de um funciona, mas terá que se atentar para fazer corretamente. No meu caso eu preciso incluir um dado num script para mostrar o valor de memória total de swap, para isso, vou modificar o script primeiro, depois vou editar o Data Template e por fim vou editar o Graph Template.


A partir desse ponto os gráfico que usam esse Graph Template (que por sua vez usa o Data Template) vão parar de plotar, então temos que corrigir para que volte a funcionar. Primeiro vá em Graph Management, clique no gráfico que parou de plotar, certifique-se de que os Graph Item Fields estão corretos, no meu caso eu inclui um item chamado TOTALSWAP, e no item Data Source [TOTALSWAP] estava NONE, então tive que fazer o vínculo. Após ter feito o vínculo você poderá ver algo semelhante ha isso: ERROR: No DS called 'TOTALSWAP' in '/var/lib/cacti/rra/client_test_total_10.rrd, então vamos incluir o DS no arquivo (é importante fazer isso para manter o histórico do gráfico):

# Crie o DS TOTALSWAP no rrd:
$› sudo rrdtool tune /var/lib/cacti/rra/client_test_total_10.rrd DS:TOTALSWAP:GAUGE:600:0:U

Crie um novo gráfico, usando o mesmo template, vamos ter dois gráficos iguais, um funciona e outro não, o que funciona vai ser um gráfico novo, mas sem histórico enquanto o gráfico que não funciona vai ter histórico. Agora vá em Graph Management clique no gráfico novo e depois clique em Turn On Graph Debug Mode para pegar o rrd desse gráfico.

# Agora copie o rrd antigo para o rrd novo:
$› sudo cp /var/lib/cacti/rra/client_test_total_11.rrd /var/lib/cacti/rra/client_test_total_12.rrd

Dessa forma o gráfico novo passa a ter o histórico e passa a funcionar sem nenhum problema.



Estrutura de diretórios do Cacti


Abaixo segue a estrutura de diretório usada no Cacti:

DiretórioDescrição
cli/Aqui ficam os scripts de linha de comando usado para gerenciar alguns aspectos do Cacti.
site/docsManual do Cacti e documentação de ajuda.
site/imagesImagens usadas no Cacti web.
site/includePrincipais configurações do Cacti e arquivos Globais.
site/libDiretório das bibliotecas, ficam boa parte das chamadas que o Cacti faz para bibliotecas e funções, aqui temos bibliotecas para fazer chamadas no snmp, ldap, rrd etc.
site/scriptsAqui é onde os administradores deixam os script que serão usados em Data Input method.
resources/script_queriesContém arquivos XML para o script de Data Queries.
resources/script_serverContém arquivos XML para o script de Data Queries.
resources/snmp_queriesContém arquivos XML para o script de Data Queries que usam o SNMP.
conf_templatesModelos de algumas configurações do Cacti, como: configuração do Apache, lighttpd, estrutura do sql e etc.
/var/lib/cacti/rraAqui ficam os RRAs dos gráficos.



Debug/Erros


Deixei alguns exemplos de soluções que fui encontrando durante o aprendizado.



Como debugar gráfico que não aparecem dados


Uma das maneiras de verificar erros em gráficos é através do arquivo de log /var/log/cacti/poller-error.log. Além disso, da para ver mais ou menos o comando que é executado em para obter os dados e popular um .rrd, vá em System Utilities -> View Poller Cache, um exemplo de log que da para ver o que está sendo executado:

Script: /bin/bash /usr/share/cacti/site/scripts/check_cpu 192.168.121.134 2 public
RRD: /var/lib/cacti/rra/client_test_idle_12.rrd


Graph not added due to whitelist check failure


Siga o passo a passo abaixo:

# Entre na pasta '/var/www/cacti/cli':
$› cd /var/www/cacti/cli

# Rode o comando:
$› sudo php -q input_whitelist.php --update --push

# reinicie o serviço do cactid:
$› sudo systemctl restart cactid

### Vá em 'CONSOLE' -> 'MANAGEMENT' -> 'DEVICES'
# Marque o box do device que quer criar os gráficos, Selecione a opção 'Apply Automation Rules' e de um 'Go'.


Gráfico não aparece, tente isso!


Caso o gráfico não apareça (arquivo não foi criado), tente entrar em CONSOLE -> MANAGEMENT -> GRAPHS e logo em seguida clique em Unlock Graph.



Gráfico não da zoom


# Edite o arquivo abaixo:
$› sudo vim /usr/share/cacti/site/graph_xport.php

# Edite o arquivo abaixo:
$› sudo vim /usr/share/cacti/site/graph_image.php

Em ambos os arquivos altere as linhas abaixo:

# Para o arquivo 'graph_xport.php':
/* override: graph start time (unix time) */
/* if (!empty($_GET["graph_start"]) && is_numeric($_GET["graph_start"]) && $_GET["graph_start"] < 1600000000) {*/
if (!empty($_GET["graph_start"]) && is_numeric($_GET["graph_start"]) && $_GET["graph_start"] < 2600000000) {
$graph_data_array["graph_start"] = get_request_var("graph_start");
}

/* override: graph end time (unix time) */
/* if (!empty($_GET["graph_end"]) && is_numeric($_GET["graph_end"]) && $_GET["graph_end"] < 1600000000) {*/
if (!empty($_GET["graph_end"]) && is_numeric($_GET["graph_end"]) && $_GET["graph_end"] < 2600000000) {
$graph_data_array["graph_end"] = get_request_var("graph_end");
}


# Para o arquivo 'graph_image.php':
/* override: graph start time (unix time) */
/* if (!empty($_GET["graph_start"]) && $_GET["graph_start"] < 1600000000) { */
if (!empty($_GET["graph_start"]) && $_GET["graph_start"] < 2600000000) {
$graph_data_array["graph_start"] = $_GET["graph_start"];
}

/* override: graph end time (unix time) */
/*if (!empty($_GET["graph_end"]) && $_GET["graph_end"] < 1600000000) {*/
if (!empty($_GET["graph_end"]) && $_GET["graph_end"] < 2600000000) {
$graph_data_array["graph_end"] = $_GET["graph_end"];
}

Em ambos os arquivos, mudamos o valor de 1600000000 para 2600000000. Agora é só reiniciar o servidor web:

$› sudo systemctl restart apache2


Gráficos em 'Tree Mode' não exibe nada


No Ubuntu 16.04 LTS com o Cacti instalado via repositório pode acontecer dos gráficos não serem exibidos no modo dual-panel quando estamos no Tree Mode para ver os gráficos, para mais detalhes do problema clique aqui. Abaixo segue a solução encontrada no link anterior para resolver o problema.

$› sudo apt install --reinstall javascript-common


Gráficos não plotam mais - Erro de módulo SNMP


Os gráficos pararam de plotar, é possível encontrar os erros abaixo:

MIB search path: /var/www/.snmp/mibs:/usr/share/snmp/mibs:/usr/share/snmp/mibs/iana:/usr/share/snmp/mibs/ietf:/usr/share/mibs/site:/usr/share/snmp/mibs:/usr/share/mibs/iana:/usr/share/mibs/ietf:/usr/share/mibs/netsnmp
Cannot find module (SNMPv2-MIB): At line 1 in (none)
Cannot find module (IF-MIB): At line 1 in (none)
Cannot find module (IP-MIB): At line 1 in (none)
Cannot find module (TCP-MIB): At line 1 in (none)
Cannot find module (UDP-MIB): At line 1 in (none)
Cannot find module (HOST-RESOURCES-MIB): At line 1 in (none)
Cannot find module (NOTIFICATION-LOG-MIB): At line 1 in (none)
Cannot find module (DISMAN-EVENT-MIB): At line 1 in (none)
Cannot find module (DISMAN-SCHEDULE-MIB): At line 1 in (none)
Cannot find module (HOST-RESOURCES-TYPES): At line 1 in (none)
Cannot find module (MTA-MIB): At line 1 in (none)
Cannot find module (NETWORK-SERVICES-MIB): At line 1 in (none)
Cannot find module (SNMPv2-TC): At line 15 in /usr/share/snmp/mibs/UCD-DISKIO-MIB.txt
Cannot find module (SNMPv2-SMI): At line 34 in /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Cannot find module (SNMPv2-TC): At line 37 in /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Did not find 'enterprises' in module #-1 (/usr/share/snmp/mibs/UCD-SNMP-MIB.txt)
Did not find 'DisplayString' in module #-1 (/usr/share/snmp/mibs/UCD-SNMP-MIB.txt)
Did not find 'TruthValue' in module #-1 (/usr/share/snmp/mibs/UCD-SNMP-MIB.txt)
Unlinked OID in UCD-SNMP-MIB: ucdavis ::= { enterprises 2021 }
Undefined identifier: enterprises near line 39 of /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Did not find 'DisplayString' in module #-1 (/usr/share/snmp/mibs/UCD-DISKIO-MIB.txt)
Did not find 'ucdExperimental' in module UCD-SNMP-MIB (/usr/share/snmp/mibs/UCD-DISKIO-MIB.txt)
Unlinked OID in UCD-DISKIO-MIB: ucdDiskIOMIB ::= { ucdExperimental 15 }
Undefined identifier: ucdExperimental near line 19 of /usr/share/snmp/mibs/UCD-DISKIO-MIB.txt
Cannot find module (SNMPv2-TC): At line 10 in /usr/share/snmp/mibs/UCD-DLMOD-MIB.txt
Did not find 'DisplayString' in module #-1 (/usr/share/snmp/mibs/UCD-DLMOD-MIB.txt)
Did not find 'ucdExperimental' in module UCD-SNMP-MIB (/usr/share/snmp/mibs/UCD-DLMOD-MIB.txt)
Unlinked OID in UCD-DLMOD-MIB: ucdDlmodMIB ::= { ucdExperimental 14 }
Undefined identifier: ucdExperimental near line 13 of /usr/share/snmp/mibs/UCD-DLMOD-MIB.txt
Cannot find module (SNMPv2-TC): At line 15 in /usr/share/snmp/mibs/LM-SENSORS-MIB.txt
Did not find 'DisplayString' in module #-1 (/usr/share/snmp/mibs/LM-SENSORS-MIB.txt)
Did not find 'ucdExperimental' in module UCD-SNMP-MIB (/usr/share/snmp/mibs/LM-SENSORS-MIB.txt)
Unlinked OID in LM-SENSORS-MIB: lmSensors ::= { ucdExperimental 16 }
Undefined identifier: ucdExperimental near line 32 of /usr/share/snmp/mibs/LM-SENSORS-MIB.txt
Did not find 'ucdavis' in module UCD-SNMP-MIB (/usr/share/snmp/mibs/UCD-DEMO-MIB.txt)
Unlinked OID in UCD-DEMO-MIB: ucdDemoMIB ::= { ucdavis 14 }
Undefined identifier: ucdavis near line 7 of /usr/share/snmp/mibs/UCD-DEMO-MIB.txt
Cannot find module (SNMP-TARGET-MIB): At line 1 in (none)
Cannot find module (SNMP-FRAMEWORK-MIB): At line 9 in /usr/share/snmp/mibs/NET-SNMP-AGENT-MIB.txt
Cannot find module (SNMPv2-SMI): At line 8 in /usr/share/snmp/mibs/NET-SNMP-MIB.txt
Did not find 'enterprises' in module #-1 (/usr/share/snmp/mibs/NET-SNMP-MIB.txt)
Unlinked OID in NET-SNMP-MIB: netSnmp ::= { enterprises 8072 }

Para resolver faça:

$› sudo apt-get install -y snmp snmp-mibs-downloader

# Por precaução rebaixe as mibs:
$› sudo /usr/bin/download-mibs

### Por causa disso a hora foi alterada, se a hora estiver errada no sistema, faça os passos abaixo:

# Corrija a hora/data:
$› sudo dpkg-reconfigure tzdata

# Edite o arquivo abaixo:
$› sudo vim /etc/php/7.0/apache2/php.ini

## Crie a linha abaixo no arquivo
date.timezone = America/Sao_Paulo

# Reinicie o server!