Como você pode depurar um script de método de entrada de dados no Cacti?

8

(Veja abaixo para atualizações ...)

Eu escrevi um script de método de entrada de dados para o Cacti (em Ruby, para coletar estatísticas do beanstalkd) e funciona na linha de comando (retornando um único inteiro simples, conforme documentado aqui ) quando executado como a conta de usuário do cacti, mas a ferramenta Cacti por si só não está coletando nenhum dado e não há nada nos logs.

Aqui está a configuração dos Métodos de entrada de dados: Método de entrada de dados do Cacti http://img.skitch.com/20091009-gh7g1kukn9yradj6y2iqrd5qm1.jpg

E aqui está o gráfico resultante (depois de ter sido adicionado ao modelo de gráfico de um host e deixado para ser executado o tempo suficiente para coletar dados): Gráfico de Cactos http://img.skitch.com/20091009-xq1kn3qxkteb5hb11wtx6tbs8m.jpg

Atualização # 1 : Parece que o Cacti pode estar removendo o ambiente:

sudo su - cacti -c 'env -i / script / beanstat --host 10.11.12.13 --port 11300 --stat current-waiting'
/ script / beanstat: 4: em `require ': nenhum arquivo para carregar - rubygems (LoadError)
    from / script / beanstat: 4

Se for esse o caso, como posso resolver isso?

Atualização 2 : esta resposta no stackoverflow.com parece ter resolvido o problema do ambiente, mas ainda não há dados no gráfico.

Atualização # 3 : Graças à sugestão de @ Heath, subi no nível de registro de pesquisas e peguei o seguinte:

AVISO: O resultado do CMD não é válido. Resultado parcial: U

Não tive sorte pesquisando no Google o que "Resultado Parcial: U" significa. O script apenas imprime um único valor inteiro.

Atualização # 4 : Finalmente consegui fazer isso funcionar. O principal problema foi a falta de ambiente quando o shell script é executado. Eu tive que resolver isso prefixando meu script Ruby com as seguintes linhas:

#! / bin / sh
PATH = / usr / local / bin: $ PATH
exec ruby ​​-x "/ completo / caminho / para / script / diretório" $ 0 "$ @"
#! / usr / bin / env ruby

E a questão secundária era a configuração adequada dos métodos de entrada de dados (um para cada métrica separada que eu queria coletar, embora todos usassem o mesmo script) que alimenta as fontes de dados que alimentam os modelos de dados (ou vice-versa, eu ' (ainda não estou claro sobre isso), que alimenta os modelos de gráfico que precisam ser atribuídos aos dispositivos e depois adicionados às árvores de gráfico. Em resumo, é uma grande falha na documentação e espero nunca ter que fazê-lo novamente.

Atualização # 5 : compartilhei meu script no GitHub http://github.com/trak3r/cacti-beanstalkd-script

Teflon Ted
fonte

Respostas:

4

Quando eu estava tentando depurar um script personalizado, achei útil anexar algumas informações a um arquivo temporário toda vez que ele era executado; Dessa forma, eu poderia ter certeza de que estava sendo chamado da maneira que eu esperava. Coisas como a linha de cmd args, ambiente e que valor (es) ele retornaria. Você também pode redirecionar o stderr para um arquivo de log para capturar a saída de erro do script.

Vejo que você criou um método de entrada de dados e um modelo de gráfico; você também criou um modelo de dados?

Heath
fonte
Esqueci de mencionar; você tentou aumentar o nível de registro de poller?
Heath
Sim, eu também fiz um modelo de dados; Para o IIRC, era um pré-requisito adicionar os pontos de dados ao modelo de gráfico.
Teflon Ted
Boa ideia no nível de registro de poller; Eu apenas aumentei um pouco. Obrigado.
Teflon Ted