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
Run Code Online (Sandbox Code Playgroud)
但当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
Run Code Online (Sandbox Code Playgroud)
以下是check_cron.json的示例
{
"checks": {
"jstat_metrics": {
"type": "metric",
"handlers": ["graphite"],
"command": "/etc/sensu/plugins/jstat-metrics.sh",
"interval": 5,
"subscribers": [ "webservers" ]
}
}
}
Run Code Online (Sandbox Code Playgroud)
还有我的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"
Run Code Online (Sandbox Code Playgroud)
我发现问题是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
| 归档时间: |
|
| 查看次数: |
4512 次 |
| 最近记录: |