2013-03-14 5 views
5

Ho creato bash scirpt che accetta le metriche jstat delle mie istanze jvm!Impossibile prendere metriche jstat utilizzando bash come plug-in Sensu

Ecco l'esempio di uscita:

demo.server1.sms.jstat.eden 24.34 0 
demo.server1.lcms.jstat.eden 54.92 0 
demo.server1.lms.jstat.eden 89.49 0 
demo.server1.tms.jstat.eden 86.05 0 

Ma quando il Sensu-client esegue lo script che restituisce

Could not attach to 8584 
Could not attach to 8588 
Could not attach to 17141 
Could not attach to 8628 
demo.server1.sms.jstat.eden  0 
demo.server1.lcms.jstat.eden 0 
demo.server1.lms.jstat.eden  0 
demo.server1.tms.jstat.eden  0 

Ecco l'esempio di check_cron.json

{ 
    "checks": { 
    "jstat_metrics": { 
     "type": "metric", 
     "handlers": ["graphite"], 
     "command": "/etc/sensu/plugins/jstat-metrics.sh", 
     "interval": 5, 
      "subscribers": [ "webservers" ] 
    } 
    } 
} 

E parte del mio script di bash

jvm_list=("sms:$sms" "lcms:$lcms" "lms:$lms" "tms:$tms" "ums:$ums") 
for jvm_instance in ${jvm_list[@]}; do 
    project=${jvm_instance%%:*} 
    pid=${jvm_instance#*:} 
     if [ "$pid" ]; then 
      metric=`jstat -gc $pid|tail -n 1` 
      output=$output$'\n'"demo.server1.$project.jstat.eden"$'\t'`echo $metric |awk '{ print $3}'`$'\t0' 
     fi 
done 
echo "$output" 

Ho scoperto che il problema è con jstat e ho provato a scrivere il percorso completo di jstat come /usr/lib/jvm/java-1.7.0-openjdk.x86_64/bin/jstat -gc $pid|tail -n 1 ma non è stato d'aiuto!

A proposito, se commento questa riga, l'output come "Impossibile collegare a 8584" scompare!

risposta

3

Sì, hai ragione sensu esegue tutti gli script come utente sensu. Per usare jstat devi aggiungere sensu a un sudoers.

basta aggiungere file di /etc/sudoers.d/sensu

Esempio:

Defaults: sensu requiretty

Defaults: sensu secure_path = /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

sensu ALL = NOPASSWD:/etc/sensu/plugins/jsat-metrics.rb

8

Non sono un utente Java o Sensu, ma posso indovinare cosa succede.

Probabilmente, sensu-client esegue lo script come un utente diverso da quello che si usa durante il test manuale, che non ha le autorizzazioni per "allegare" (qualunque cosa significhi) alle istanze di jvm.

Per verificare questo è possibile aggiungere l'invocazione di "whoami" al proprio script, eseguirlo nuovamente da sensu-client, vedere in quale utente viene eseguito lo script e, se è diverso, provare a eseguire lo script come tale utente .

+0

Avevi ragione la sceneggiatura era in esecuzione sotto utente sensu (è stata una sorpresa per me) !!! Quindi ho dovuto usare jstatd !!! è un demone che può consentire ad altri utenti di prendere le metriche jstat da remoto! –

+0

Ottimo! Sono contento di sapere che :) – spbnick

+0

jstat è la migliore esecuzione come root come hai scoperto .... nessun altro utente probabilmente non sarà in grado di connettersi al processo. – np0x