2013-03-14 34 views
5

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!

Trả lời

3

Có đúng bạn đang sử dụng tất cả các tập lệnh như người dùng sensu. Để sử dụng jstat, bạn phải thêm sensu vào sudoers.

chỉ cần thêm tập tin /etc/sudoers.d/sensu

Ví dụ:

Defaults: requiretty sensu

Defaults: sensu secure_path = /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

sensu ALL = NOPASSWD:/vv/sensu/plugins/jsat-metrics.rb

8

Tôi không phải là người dùng Java hoặc Sensu, nhưng tôi có thể đoán điều gì sẽ xảy ra.

Rất có thể, sensu-client chạy tập lệnh của bạn với tư cách người dùng khác với tập lệnh bạn sử dụng khi kiểm tra thủ công, không có quyền "đính kèm" (bất kỳ điều gì có nghĩa) đối với các phiên bản jvm của bạn.

Để xác minh điều này, bạn có thể thêm lời gọi "whoami" vào tập lệnh của mình, chạy lại từ ứng dụng khách, xem người dùng chạy tập lệnh của bạn và, nếu nó khác, hãy thử chạy tập lệnh của bạn với người dùng đó .

+0

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! –

+0

Tuyệt vời! Vui mừng khi biết điều đó :) – spbnick

+0

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