Tôi đã tạo ra bash scirpt có chỉ số jstat của các trường hợp jvm của tôi!Không thể lấy số liệu jstat bằng cách sử dụng bash như plugin Sensu
Dưới đây là ví dụ đầu ra:
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
Nhưng khi sensu-client chạy kịch bản này nó trả
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
Dưới đây là ví dụ về check_cron.json
{
"checks": {
"jstat_metrics": {
"type": "metric",
"handlers": ["graphite"],
"command": "/etc/sensu/plugins/jstat-metrics.sh",
"interval": 5,
"subscribers": [ "webservers" ]
}
}
}
Và một phần của tập lệnh bash của tôi
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"
Tôi phát hiện ra rằng vấn đề là với jstat và tôi đã cố gắng viết đường dẫn jstat đầy đủ như /usr/lib/jvm/java-1.7.0-openjdk.x86_64/bin/jstat -gc $pid|tail -n 1
nhưng nó không giúp được!
Bằng cách này, nếu tôi sẽ nhận xét hàng này, đầu ra như "Không thể đính kèm vào 8584" biến mất!
Bạn đã đúng tập lệnh đang chạy dưới người dùng sensu (điều đó thật bất ngờ đối với tôi) !!! Vì vậy, tôi đã phải sử dụng jstatd !!! đó là một deamon có thể cho phép người dùng khác lấy số liệu jstat từ xa! –
Tuyệt vời! Vui mừng khi biết điều đó :) – spbnick
jstat là tốt nhất chạy như root như bạn phát hiện ra .... bất kỳ người dùng khác có khả năng sẽ không thể kết nối với quá trình này. – np0x