5

我创建了 bash 脚本,它采用我的 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 客户端运行这个脚本时,它会返回

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 ”之类的输出就会消失!

4

2 回答 2

8

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

最有可能的是,sensu-client 以不同于您手动测试时使用的用户身份运行您的脚本,后者无权“附加”(无论这意味着什么)到您的 jvm 实例。

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

于 2013-03-15T16:55:47.027 回答
3

是的,你是对的 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

于 2014-02-12T04:38:38.730 回答