Onb*_*nat 5 bash shell monitoring sensu
我创建了bash scirpt,它接受了我的jvm实例的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
但当Sensu-client运行此脚本时,它会返回
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 "消失!
我不是Java或Sensu用户,但我可以猜到会发生什么.
最有可能的是,sensu-client以不同于手动测试时使用的用户身份运行脚本,该用户没有权限将"附加"(无论这意味着什么)添加到您的jvm实例.
要验证这一点,您可以向脚本添加"whoami"调用,再次从sensu-client运行它,查看运行脚本的用户,如果不同,请尝试以该用户身份运行脚本.
是的,你是对的 sensu 以 sensu 用户身份运行所有脚本。要使用 jstat,您必须将 sensu 添加到 sudoers。
只需添加文件 /etc/sudoers.d/sensu
例子:
默认值:sensu !requiretty
默认值:sensu secure_path = /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
sensu ALL = NOPASSWD:/etc/sensu/plugins/jsat-metrics.rb