5

jvm インスタンスの jstat メトリックを取得する bash scirpt を作成しました。

出力例は次のとおりです。

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 を使用するには、sudoers に sensu を追加する必要があります。

ファイル /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 に答える