2017-03-27 7 views
0

Selon les collectd naming schema - mesures de dumping sur les plugins collectd doivent suivre cette structureEst-ce que collectd prend en charge l'imbrication arbitraire des métriques?

host/plugin - plugin_instance/type - type_instance 

Cela fonctionne très bien pour les paramètres du système comme cpu, mémoire, etc., mais pour une application qui expose son état de santé par un problème de santé URL peut avoir des paramètres imbriqués arbitraire de la forme

{"datacenter": {"region": {"server": {"service": {"parameter": value } } } } } 

qui, lorsqu'il est envoyé par collectd devrait être traduit dans un schéma de graphite de

$datacenter.$region.$server.$service.$parameter = $value 

Mais le schéma de nommage collectd actuel ne le permet pas. Comment peut-on y parvenir en collectd?

Répondre

0

D'autres ont fait face à ce problème comme mentionné here

J'ai trouvé une façon détournée de faire ceci:

  1. Au lieu de collectd-python plugin, utilisez le collectd exec plugin
  2. Modifier le plugin write_graphite avoir EscapeCharacter comme "."
  3. Redémarrez collectd.

Maintenant, si j'écris un plugin exec:

#!/bin/bash 

HOSTNAME="${COLLECTD_HOSTNAME:-localhost}" 
INTERVAL="${COLLECTD_INTERVAL:-10}" 

function gen_random() { 
    echo $RANDOM % 10 + 1 | bc 
} 

while sleep "$INTERVAL"; do 
    VALUE=$(do_magic) 
    echo "PUTVAL \"$HOSTNAME/region.datacenter.rack.cluster.server.service/gauge-service_parameter\" interval=$INTERVAL N:$VALUE" | tee -a /var/tmp/test.log; 
done 

Cela va créer la hiérarchie suivante dans le graphite:

region/ 
region/datacenter 
region/datacenter/rack 
region/datacenter/rack/cluster 
region/datacenter/rack/cluster/server 
region/datacenter/rack/cluster/server/service 
region/datacenter/rack/cluster/server/service/gauge-service_parameter.wsp 

Notez que le préfixe "jauge" est important car collectd doit connaître le type de valeur qui est poussée.