2013-03-14 21 views
5

我创建了bash scirpt,它需要我的jvm实例的jstat指标!无法使用bash作为Sensu插件使用jstat指标

下面是输出示例:

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 

但是当扇子,客户端运行该脚本返回

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 

这里是check_cron.json

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

的例子和我的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" 

我发现问题出在jstat上,我试图编写完整的jstat路径,如/usr/lib/jvm/java-1.7.0-openjdk.x86_64/bin/jstat -gc $pid|tail -n 1,但它没有帮助!

顺便说一句,如果我会评论这一行输出像“无法附加到8584”消失!

回答

3

是的,你是正确的sensu运行所有脚本作为sensu用户。要使用jstat,你必须添加sensu给sudoers。

只需添加文件/etc/sudoers.d/sensu

例子:

默认值:意义上requiretty

默认值:意义上secure_path = 在/ usr /本地/ sbin:/ usr/local/bin:/ sbin:/ bin:/ usr/sbin:/ usr/bin

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

8

我不是Java或Sensu用户,但我可以猜测会发生什么。

最有可能的是,sensu-client以与用户手动测试时不同的用户身份运行脚本,该用户无权“附加”(无论如何)到您的jvm实例。

要验证这一点,您可以将“whoami”的调用添加到脚本中,再次从sensu-client运行它,查看它在哪个用户下运行脚本,如果不同,请尝试以该用户身份运行脚本。

+0

你是对的脚本运行在sensu用户下(这对我来说是惊喜)!所以我不得不使用jstatd!这是一个可以让其他用户远程使用jstat指标的deamon! – 2013-03-19 06:46:17

+0

太棒了!很高兴听到:) – spbnick 2013-03-19 09:32:19

+0

jstat最好以根用户身份运行,因为您发现....任何其他用户可能无法连接到该进程。 – np0x 2014-01-14 01:31:07