设为首页 收藏本站
查看: 902|回复: 0

Nagios监控SSD健康的脚本

[复制链接]

尚未签到

发表于 2019-1-16 13:03:53 | 显示全部楼层 |阅读模式
  生产中使用了SSD磁盘,使用smartctl -a /dev/sdb可以查看到该磁盘的各项值,我们可以根据这些Value和Worst等于或小于thresh时候就要注意了,下面上脚本:


  • #!/usr/bin/perl

  • =head
  • check ssd infomation

  • usage: add "nagios  ALL=(root)      NOPASSWD: /usr/sbin/smartctl" to /etc/sudoers file;
  • =cut

  • use strict;
  • use warnings;
  • use Data::Dumper;
  • use Getopt::Long;

  • my ($result,$device,$h,$debug);
  • my ($start_time,$use_time) = (time,0.00);;
  • my %ssd_attribute = (   5   =>  "Reallocated_Sector_Ct",
  •                         184 =>  "End_to_End_Error_Detection_Count",
  •                         225 =>  "Raw_Read_Error_Rate",
  •                         232 =>  "Available_Reserver_Space",
  •                         233 =>  "Media_Wearout_Indicator",
  •                         9   =>  "Power_On_Hours",
  •                     );

  • $result = GetOptions ("device=s" => \$device,
  •                       "debug"    => \$debug);

  • $device ||= 'sdb';
  • $debug ||=0;

  • $h->{$device}->{output} = "";
  • $h->{$device}->{perfdata} = "";
  • $h->{$device}->{status} = 0;
  • $h->{$device}->{total_info} = `sudo /usr/sbin/smartctl -a /dev/$device 2>&1`;
  • if ( $h->{$device}->{total_info} =~ m{===\s+START\s+OF\s+INFORMATION\s+SECTION\s+===(.*)===\s+START\s+OF\s+READ\s+SMART\s+DATA\s+SECTION\s+===\s+SMART\s+overall-health\s+self-assessment\s+test\s+result:\s+(\w+)[\d\D]+Vendor\s+Specific\s+SMART\s+Attributes\s+with\s+Thresholds([\d\D]+)SMART\s+Error\s+Log\s+Version:\s+(\d+)}is) {
  •     $h->{$device}->{info_section} = $1;
  •     $h->{$device}->{smart_test_result} = $2;
  •     $h->{$device}->{healt_result} = $3;
  •     print "************************************** get $device healt info sta **************************************\n" if $debug;
  •     foreach my $line (split /\n/,$h->{$device}->{healt_result}) {
  •         #if ($line =~ m{(\d+)\s+([^\s]+)\s+([\dx]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\w+)\s+(\w+)\s+([^\s]+)\s+(\d+)}i) {
  •         if ($line =~ m{(\d+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)}i) {
  •             print "ID:$1\tATTRIBUTE_NAME:$2\tFLAG:$3\tVALUE:$4\tWORST:$5\tTHRESH:$6\tTYPE:$7\tUPDATED:$8\tWHEN_FAILED:$9\tRAW_VALUE:$10\n" if $debug;
  •             $h->{$device}->{healt}->{$1}->{id} = $1;
  •             $h->{$device}->{healt}->{$1}->{attribute_name} = $2;
  •             $h->{$device}->{healt}->{$1}->{flag} = $3;
  •             $h->{$device}->{healt}->{$1}->{value} = $4;
  •             $h->{$device}->{healt}->{$1}->{worst} = $5;
  •             $h->{$device}->{healt}->{$1}->{thresh} = $6;
  •             $h->{$device}->{healt}->{$1}->{type} = $7;
  •             $h->{$device}->{healt}->{$1}->{updated} = $8;
  •             $h->{$device}->{healt}->{$1}->{when_failed} = $9;
  •             $h->{$device}->{healt}->{$1}->{raw_value} = $10;
  •         }
  •     }
  •     print "************************************** get $device healt info end **************************************\n" if $debug;
  •     $h->{$device}->{smart_error_log_version} = $4;
  •     $h->{$device}->{match} = 1;
  • } else {
  •     $h->{$device}->{match} = 0;
  • }

  • print "runging..... `sudo /usr/sbin/smartctl -a /dev/$device 2>&1`\n" if $debug;
  • print "\n\n-------------------------------- Dumper \$h sta --------------------------------\n" if $debug;
  • print Dumper $h if $debug;
  • print "-------------------------------- Dumper \$h end --------------------------------\n\n" if $debug;

  • $use_time = sprintf("%0.2f",time - $start_time);
  • if ( (exists $h->{$device}->{match} && $h->{$device}->{match} == 0) ) {
  •     print "CRITICAL - smartctl get $device total info fail|status=1 time=$use_time\n";
  •     exit (2);
  • } elsif ( ! exists $h->{$device}->{healt} ) {
  •     print "WARNING - smartctl get $device healt info fail|status=1 time=$use_time\n";
  •     exit (1);
  • } else {
  •     while ( (my ($id,$id_hash)) = (each %{$h->{$device}->{healt}} ) ) {
  •         if ( !exists $ssd_attribute{$id}) {
  •             print "not exists \$ssd_attribute{\$id},now next\n" if $debug;
  •             next;
  •         }
  •         print "----------------------------- loop \$h->{\$device}->{healt} hash -----------------------------\n" if $debug;
  •         print $h->{$device}->{healt}->{$id}->{worst} . "\t" if $debug;
  •         print $h->{$device}->{healt}->{$id}->{value} . "\t" if $debug;
  •         print $h->{$device}->{healt}->{$id}->{thresh} . "\n" if $debug;
  •         if ($h->{$device}->{healt}->{$id}->{value} {$device}->{healt}->{$id}->{thresh}){
  •             $h->{$device}->{output} .= "CRITICAL - $device " if ($h->{$device}->{output} eq "");
  •             $h->{$device}->{output} .= "id:$id attribute_name:" . $ssd_attribute{$id} . " value:" . $h->{$device}->{healt}->{$id}->{value} . " ";
  •             $h->{$device}->{status} = 2;
  •             print 'value

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-664027-1-1.html 上篇帖子: nagios安装配置(一) 下篇帖子: ubuntu 安装 Nagios服务器监控软件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表