{"id":271476,"date":"2015-12-31T17:17:02","date_gmt":"2015-12-31T14:17:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=271476"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=271476","title":{"rendered":"\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043c S.M.A.R.T. \u0432 Zabbix"},"content":{"rendered":"<p>       \u0414\u043b\u044f \u0442\u0435\u0445 \u043a\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Zabbix, \u0438 \u0445\u043e\u0447\u0435\u0442 \u043d\u0430\u0443\u0447\u0438\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u043d\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b (\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0449\u0435 \u043d\u0435\u0442 \u0432 Zabbix), \u0430 \u0442\u0430\u043a\u0436\u0435,<br \/>  \u043a\u043e\u043c\u0443 \u043d\u0443\u0436\u0435\u043d \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 S.M.A.R.T., \u0438 \u043a\u043e\u0433\u043e \u043d\u0435 \u0443\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b, \u043f\u0440\u043e\u0448\u0443 \u043f\u043e\u0434 \u043a\u0430\u0442.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u0412\u0441\u0435 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u0434\u043b\u044f S.M.A.R.T. \u043c\u0435\u043d\u044f \u043d\u0435 \u0443\u0441\u0442\u0440\u043e\u0438\u043b. \u041e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432, \u0438 \u043d\u0430\u0440\u0430\u0449\u0438\u0432\u0430\u043d\u0438\u0435 \u0435\u0433\u043e \u0434\u043e \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u043e\u0433\u043e \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0443\u0440\u043e\u0432\u043d\u044f \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u043e\u0441\u044c \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u043c. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043f\u043e\u043b\u044f \u0432 Zabbix Agent, \u0438 \u043f\u0440\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 \u0438\u0445 \u0447\u0438\u0441\u043b\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u043e\u0441\u044c \u043a\u0430\u043a-\u0442\u043e \u043d\u0435 \u043f\u043e \u0441\u0435\u0431\u0435. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435, \u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 (\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0442\u0430\u043c \u043c\u043d\u043e\u0433\u043e):<\/p>\n<p>  <code>UserParameter=uHDD[*], sudo smartctl -A \/dev\/$1| grep &quot;$2&quot;| tail -1| cut -c 88-|cut -f1 -d' '<\/code><\/p>\n<p>  \u0412\u0441\u0435 \u0445\u043e\u0440\u043e\u0448\u043e, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043d\u0443 \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u0447\u043a\u0430, \u043d\u043e \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0438\u0445 \u0434\u0435\u0441\u044f\u0442\u044c? \u0418 \u0434\u0438\u0441\u043a\u043e\u0432 \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u0434\u0435\u0441\u044f\u0442\u043e\u043a? \u041d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0430\u043a\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u0440\u0433\u0430\u0442\u044c smartctl (\u043b\u0438\u0448\u043d\u0438\u0439 \u0440\u0430\u0437 \u043f\u043e\u0434\u0435\u0440\u0433\u0438\u0432\u0430\u044f \u0434\u0438\u0441\u043a)? \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0430\u043a\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0442 Zabbix Server (\u043d\u0443 \u0438\u043b\u0438 \u0433\u0440\u0443\u043f\u043f\u043e\u0432\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u043c\u0438 \u0432\u043c\u0435\u0441\u0442\u043e *). \u0412 \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043d\u0435\u0442, Zabbix Agent \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u043e \u043d\u0430\u043c \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 Zabbix Trapper \u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 zabbix_sender, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0446\u0435\u043b\u0443\u044e \u043f\u0430\u0447\u043a\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.<\/p>\n<p>  \u0412\u043e\u0442 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043d\u0438\u0445 \u043c\u044b \u0438 \u0437\u0430\u0439\u043c\u0435\u043c\u0441\u044f.<br \/>  \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u043e\u0438\u0441\u043a\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u0442\u0434\u0430\u044e\u0442 \u043d\u0430\u043c S.M.A.R.T., \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f:  <\/p>\n<ul>\n<li>\u0414\u0440\u0430\u0439\u0432\u0435\u0440 sg (modprobe sg), \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043a\u0440\u043e\u043c\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e, \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0434\u0438\u0441\u043a\u0438 \u0437\u0430 \u0440\u044f\u0434\u043e\u043c RAID \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 (\u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0443 \u043c\u0435\u043d\u044f Adaptec)<\/li>\n<li>\u0423\u0442\u0438\u043b\u0438\u0442\u0430 sg_map, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0430\u0441\u0442 \u043d\u0430\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 sg<\/li>\n<li>\u0418 \u043a\u043e\u043d\u0435\u0447\u043d\u043e smartctl<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041d\u0430\u043f\u0438\u0448\u0435\u043c \u0442\u0430\u043a\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 (smartdiscovery.sh):<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">#!\/bin\/bash # require: sg module and sg_map util # Get know generic scsi device from sg_map or from \/usr\/local\/etc\/smartdev.lst (is prefered used), # and then try to read some S.M.A.R.T. attribue, if success, echo output combination to SDTOUT  modprobe sg RUNPATH=$(dirname $0) DEV_TYPE=(sat scsi ata) while read -r -a attr; do \tif [ -z &quot;${attr[1]}&quot; ]; then \t\tDEV=${attr[0]} \telse \t\tDEV=${attr[1]} \tfi \tfor i in &quot;${DEV_TYPE[@]}&quot;;do \t\tsmartctl -A -d $i $DEV | grep -q 'ID#' \t\tif [[ $? == 0 ]]; then \t\t\tDEV=$(basename $DEV) \t\t\tgrep -q $DEV \/usr\/local\/etc\/smartdev.lst  \t\t\tif [[ $? != 0 ]]; then \t\t\t\techo &quot;$DEV $i&quot; \t\t\tfi \t\t\tbreak \t\tfi \tdone done  &lt; &lt;(sg_map) cat \/usr\/local\/etc\/smartdev.lst <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041e\u043d \u043f\u043e\u0438\u0449\u0435\u0442 \u0434\u043b\u044f \u043d\u0430\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u0438\u0449\u0435\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u0430\u043c\u0438 \u0438 \u0441\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0435 \u0441 \u0444\u0430\u0439\u043b\u043e\u043c \/usr\/local\/etc\/smartdev.lst, \u0435\u0441\u043b\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u0442\u043e \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0444\u0430\u0439\u043b\u0430) \u0438 \u0432\u044b\u0434\u0430\u0441\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0432 \u0432\u0438\u0434\u0435 \u043f\u0430\u0440 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439: &lt;\u0438\u043c\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430&gt; &lt;\u0442\u0438\u043f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f&gt;<br \/>  \u0414\u0430\u043b\u044c\u0448\u0435 \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u044d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0441\u043a\u0440\u0438\u043f\u0442\u0443 (zabbix_smart_discovery.sh), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 JSON \u0434\u043b\u044f Zabbix:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">zabbix_smart_discovery.sh<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">#!\/bin\/bash # Formating discovering device list to JSON format for zabbix  echo -e &quot;{\\n\\t\\&quot;data\\&quot;:[&quot; LN=0 while IFS=' ' read -r -a attribute; do\t \tif [[ $LN != 0 ]]; then \t\techo &quot;,&quot; \tfi \techo -e &quot;\\t\\t{ \\&quot;{#DEVNAME}\\&quot;:\\&quot;${attribute[0]}\\&quot;, \\&quot;{#DEVTYPE}\\&quot;:\\&quot;${attribute[1]}\\&quot; }\\c&quot; \tLN=1 done  &lt; \/dev\/stdin echo -e &quot;\\n\\t]\\n}&quot; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412\u044b\u0432\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">smartctl.discovery<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">{         &quot;data&quot;:[                 { &quot;{#DEVNAME}&quot;:&quot;sg1&quot;, &quot;{#DEVTYPE}&quot;:&quot;sat&quot; },                 { &quot;{#DEVNAME}&quot;:&quot;sg2&quot;, &quot;{#DEVTYPE}&quot;:&quot;sat&quot; },                 { &quot;{#DEVNAME}&quot;:&quot;sg3&quot;, &quot;{#DEVTYPE}&quot;:&quot;sat&quot; },                 { &quot;{#DEVNAME}&quot;:&quot;sg4&quot;, &quot;{#DEVTYPE}&quot;:&quot;sat&quot; },                 { &quot;{#DEVNAME}&quot;:&quot;sg5&quot;, &quot;{#DEVTYPE}&quot;:&quot;sat&quot; },                 { &quot;{#DEVNAME}&quot;:&quot;sg6&quot;, &quot;{#DEVTYPE}&quot;:&quot;sat&quot; },                 { &quot;{#DEVNAME}&quot;:&quot;sg7&quot;, &quot;{#DEVTYPE}&quot;:&quot;sat&quot; },                 { &quot;{#DEVNAME}&quot;:&quot;sg8&quot;, &quot;{#DEVTYPE}&quot;:&quot;sat&quot; },                 { &quot;{#DEVNAME}&quot;:&quot;sdb&quot;, &quot;{#DEVTYPE}&quot;:&quot;sat&quot; },                 { &quot;{#DEVNAME}&quot;:&quot;sdc&quot;, &quot;{#DEVTYPE}&quot;:&quot;sat&quot; },                 { &quot;{#DEVNAME}&quot;:&quot;sdd&quot;, &quot;{#DEVTYPE}&quot;:&quot;sat&quot; },                 { &quot;{#DEVNAME}&quot;:&quot;sde&quot;, &quot;{#DEVTYPE}&quot;:&quot;sat&quot; }         ] } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  {#DEVNAME} \u0438 {#DEVTYPE} \u044d\u0442\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b Zabbix \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a.<br \/>  \u0421\u043a\u0440\u0438\u043f\u0442 smart2zabbix.sh \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f Zabbix Trapper  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">smart2zabbix.sh<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">#!\/bin\/bash # Format output from smartctl to zabbix_sender input # $1 is path for examine device # $2 type of device is used in smartctld -d paramentr # $3 hostname of monitoring system, can set to '-', if using -s or -c paramentr in zabbix_sender  DEV_PATH=$1 DEV_TYPE=$2 HOSTNAME=$3 HEADERS=(id attribute_name flag value worst thresh type updated when_failed raw_value) DEVICE=$(basename $DEV_PATH) SECTION='' while IFS='' read -r line; do \tcase $line in \t\t'=== START OF INFORMATION SECTION ===') \t\t\tSECTION='INFO' \t\t\tcontinue \t\t;; \t\t'=== START OF READ SMART DATA SECTION ===') \t\t\tSECTION='HEALF' \t\t\tcontinue \t\t;; \t\t'ID#'*) \t\t\tSECTION='ATTR' \t\t\tcontinue \t\t;; \tesac \tcase $SECTION in \t\t'INFO') \t\t\tif [ -z &quot;$line&quot; ]; then \t\t\t\tSECTION='' \t\t\telse \t\t\t\tIFS=':' read -r -a attribute &lt;&lt;&lt; &quot;$line&quot; \t\t\t\tPRE=&quot;$HOSTNAME smartctl.info[$DEVICE,&quot; \t\t\t\tATTR_V=$( echo ${attribute[1]} | sed -e 's\/^[ \\t]*\/\/' ) \t\t\t\tATTR_N=$(echo ${attribute[0]} | tr '[:upper:]' '[:lower:]' | sed 's\/ \/_\/' ) \t\t\t\tcase ${attribute[0]} in \t\t\t\t\t'Model Family') \t\t\t\t\t\techo &quot;${PRE}$ATTR_N] \\&quot;$ATTR_V\\&quot;&quot; \t\t\t\t\t;; \t\t\t\t\t'Device Model') \t\t\t\t\t\techo &quot;${PRE}$ATTR_N] \\&quot;$ATTR_V\\&quot;&quot; \t\t\t\t\t;; \t\t\t\t\t'Serial Number') \t\t\t\t\t\techo &quot;${PRE}$ATTR_N] \\&quot;$ATTR_V\\&quot;&quot; \t\t\t\t\t;; \t\t\t\t\t'Firmware Version') \t\t\t\t\t\techo &quot;${PRE}$ATTR_N] \\&quot;$ATTR_V\\&quot;&quot; \t\t\t\t\t;; \t\t\t\t\t'User Capacity') \t\t\t\t\t\techo &quot;${PRE}$ATTR_N] \\&quot;$ATTR_V\\&quot;&quot; \t\t\t\t\t;; \t\t\t\t\t'Sector Size' | 'Sector Sizes') \t\t\t\t\t\tATTR_N=$(echo 'Sector Size' | tr '[:upper:]' '[:lower:]' | sed 's\/ \/_\/' ) \t\t\t\t\t\techo &quot;${PRE}$ATTR_N] \\&quot;$ATTR_V\\&quot;&quot; \t\t\t\t\t;; \t\t\t\t\t'Rotation Rate') \t\t\t\t\t\techo &quot;${PRE}$ATTR_N] \\&quot;$ATTR_V\\&quot;&quot; \t\t\t\t\t;; \t\t\t\tesac \t\t\tfi \t\t\t \t\t;; \t\t'HEALF') \t\t\tif [ -z &quot;$line&quot; ]; then \t\t\t\tSECTION='' \t\t\telse \t\t\t\tIFS=':' read -r -a attribute &lt;&lt;&lt; &quot;$line&quot; \t\t\t\tPRE=&quot;$HOSTNAME smartctl.smart[$DEVICE,&quot; \t\t\t\tATTR=$( echo ${attribute[1]} | sed -e 's\/^[ \\t]*\/\/' ) \t\t\t\tcase ${attribute[0]} in \t\t\t\t\t'SMART overall-health self-assessment test result') \t\t\t\t\t\techo &quot;${PRE}test_result] \\&quot;$ATTR\\&quot;&quot; \t\t\t\t\t;; \t\t\t\tesac\t\t\t\t \t\t\tfi \t\t;; \t\t'ATTR') \t\t\tif [ -z &quot;$line&quot; ]; then \t\t\t\tSECTION='' \t\t\telse \t\t\t\tread -r -a attribute &lt;&lt;&lt; &quot;$line&quot; \t\t\t\tPRE=&quot;$HOSTNAME smartctl.smart[$DEVICE,&quot; \t\t\t\tfor i in &quot;${!attribute[@]}&quot;;do \t\t\t\t\tif [[ $i == 0 ]]; then \t\t\t\t\t\tcontinue \t\t\t\t\tfi \t\t\t\t\tcase ${attribute[$i]} in \t\t\t\t\t\t''|*[!0-9]*) ATTR=&quot;\\&quot;${attribute[$i]}\\&quot;&quot; ;; \t\t\t\t\t\t*) ATTR=&quot;$(echo ${attribute[$i]} | sed 's\/0*\/\/')&quot; ;; \t\t\t\t\tesac \t\t\t\t\tif [ -z &quot;$ATTR&quot; ]; then \t\t\t\t\t\tATTR=0 \t\t\t\t\tfi \t\t\t\t\techo &quot;${PRE}${attribute[0]},${HEADERS[$i]}] $ATTR&quot; \t\t\t\tdone\t\t\t\t \t\t\tfi \t\t;; \tesac done &lt; \/dev\/stdin <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412\u044b\u0432\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412\u044b\u0432\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439:<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>test.local smartctl.info[sg1,model_family] &quot;Western Digital RE4 (SATA 6Gb\/s)&quot; test.local smartctl.info[sg1,device_model] &quot;WDC WD2000FYYZ-01UL1B1&quot; test.local smartctl.info[sg1,serial_number] &quot;WD-WCC1P1175320&quot; test.local smartctl.info[sg1,firmware_version] &quot;01.01K02&quot; test.local smartctl.info[sg1,user_capacity] &quot;2\u00a0000\u00a0398\u00a0934\u00a0016 bytes [2,00 TB]&quot; test.local smartctl.info[sg1,sector_size] &quot;512 bytes logical\/physical&quot; test.local smartctl.info[sg1,rotation_rate] &quot;7200 rpm&quot; test.local smartctl.smart[sg1,test_result] &quot;PASSED&quot; test.local smartctl.smart[sg1,1,attribute_name] &quot;Raw_Read_Error_Rate&quot; test.local smartctl.smart[sg1,1,flag] &quot;0x002f&quot; test.local smartctl.smart[sg1,1,value] 200 test.local smartctl.smart[sg1,1,worst] 200 test.local smartctl.smart[sg1,1,thresh] 51 test.local smartctl.smart[sg1,1,type] &quot;Pre-fail&quot; test.local smartctl.smart[sg1,1,updated] &quot;Always&quot; test.local smartctl.smart[sg1,1,when_failed] &quot;-&quot; test.local smartctl.smart[sg1,1,raw_value] 0 test.local smartctl.smart[sg1,3,attribute_name] &quot;Spin_Up_Time&quot; test.local smartctl.smart[sg1,3,flag] &quot;0x0027&quot; test.local smartctl.smart[sg1,3,value] 169 test.local smartctl.smart[sg1,3,worst] 169 test.local smartctl.smart[sg1,3,thresh] 21 test.local smartctl.smart[sg1,3,type] &quot;Pre-fail&quot; test.local smartctl.smart[sg1,3,updated] &quot;Always&quot; test.local smartctl.smart[sg1,3,when_failed] &quot;-&quot; test.local smartctl.smart[sg1,3,raw_value] 6508 test.local smartctl.smart[sg1,4,attribute_name] &quot;Start_Stop_Count&quot; test.local smartctl.smart[sg1,4,flag] &quot;0x0032&quot; test.local smartctl.smart[sg1,4,value] 100 test.local smartctl.smart[sg1,4,worst] 100 test.local smartctl.smart[sg1,4,thresh] 0 test.local smartctl.smart[sg1,4,type] &quot;Old_age&quot; test.local smartctl.smart[sg1,4,updated] &quot;Always&quot; test.local smartctl.smart[sg1,4,when_failed] &quot;-&quot; test.local smartctl.smart[sg1,4,raw_value] 36 test.local smartctl.smart[sg1,5,attribute_name] &quot;Reallocated_Sector_Ct&quot; test.local smartctl.smart[sg1,5,flag] &quot;0x0033&quot; test.local smartctl.smart[sg1,5,value] 200 test.local smartctl.smart[sg1,5,worst] 200 test.local smartctl.smart[sg1,5,thresh] 140 test.local smartctl.smart[sg1,5,type] &quot;Pre-fail&quot; test.local smartctl.smart[sg1,5,updated] &quot;Always&quot; test.local smartctl.smart[sg1,5,when_failed] &quot;-&quot; test.local smartctl.smart[sg1,5,raw_value] 0 test.local smartctl.smart[sg1,7,attribute_name] &quot;Seek_Error_Rate&quot; test.local smartctl.smart[sg1,7,flag] &quot;0x002e&quot; test.local smartctl.smart[sg1,7,value] 200 test.local smartctl.smart[sg1,7,worst] 200 test.local smartctl.smart[sg1,7,thresh] 0 test.local smartctl.smart[sg1,7,type] &quot;Old_age&quot; test.local smartctl.smart[sg1,7,updated] &quot;Always&quot; test.local smartctl.smart[sg1,7,when_failed] &quot;-&quot; test.local smartctl.smart[sg1,7,raw_value] 0 test.local smartctl.smart[sg1,9,attribute_name] &quot;Power_On_Hours&quot; test.local smartctl.smart[sg1,9,flag] &quot;0x0032&quot; test.local smartctl.smart[sg1,9,value] 79 test.local smartctl.smart[sg1,9,worst] 79 test.local smartctl.smart[sg1,9,thresh] 0 test.local smartctl.smart[sg1,9,type] &quot;Old_age&quot; test.local smartctl.smart[sg1,9,updated] &quot;Always&quot; test.local smartctl.smart[sg1,9,when_failed] &quot;-&quot; test.local smartctl.smart[sg1,9,raw_value] 15927 test.local smartctl.smart[sg1,10,attribute_name] &quot;Spin_Retry_Count&quot; test.local smartctl.smart[sg1,10,flag] &quot;0x0032&quot; test.local smartctl.smart[sg1,10,value] 100 test.local smartctl.smart[sg1,10,worst] 253 test.local smartctl.smart[sg1,10,thresh] 0 test.local smartctl.smart[sg1,10,type] &quot;Old_age&quot; test.local smartctl.smart[sg1,10,updated] &quot;Always&quot; test.local smartctl.smart[sg1,10,when_failed] &quot;-&quot; test.local smartctl.smart[sg1,10,raw_value] 0 test.local smartctl.smart[sg1,11,attribute_name] &quot;Calibration_Retry_Count&quot; test.local smartctl.smart[sg1,11,flag] &quot;0x0032&quot; test.local smartctl.smart[sg1,11,value] 100 test.local smartctl.smart[sg1,11,worst] 253 test.local smartctl.smart[sg1,11,thresh] 0 test.local smartctl.smart[sg1,11,type] &quot;Old_age&quot; test.local smartctl.smart[sg1,11,updated] &quot;Always&quot; test.local smartctl.smart[sg1,11,when_failed] &quot;-&quot; test.local smartctl.smart[sg1,11,raw_value] 0 test.local smartctl.smart[sg1,12,attribute_name] &quot;Power_Cycle_Count&quot; test.local smartctl.smart[sg1,12,flag] &quot;0x0032&quot; test.local smartctl.smart[sg1,12,value] 100 test.local smartctl.smart[sg1,12,worst] 100 test.local smartctl.smart[sg1,12,thresh] 0 test.local smartctl.smart[sg1,12,type] &quot;Old_age&quot; test.local smartctl.smart[sg1,12,updated] &quot;Always&quot; test.local smartctl.smart[sg1,12,when_failed] &quot;-&quot; test.local smartctl.smart[sg1,12,raw_value] 30 test.local smartctl.smart[sg1,183,attribute_name] &quot;Runtime_Bad_Block&quot; test.local smartctl.smart[sg1,183,flag] &quot;0x0032&quot; test.local smartctl.smart[sg1,183,value] 100 test.local smartctl.smart[sg1,183,worst] 100 test.local smartctl.smart[sg1,183,thresh] 0 test.local smartctl.smart[sg1,183,type] &quot;Old_age&quot; test.local smartctl.smart[sg1,183,updated] &quot;Always&quot; test.local smartctl.smart[sg1,183,when_failed] &quot;-&quot; test.local smartctl.smart[sg1,183,raw_value] 0 test.local smartctl.smart[sg1,192,attribute_name] &quot;Power-Off_Retract_Count&quot; test.local smartctl.smart[sg1,192,flag] &quot;0x0032&quot; test.local smartctl.smart[sg1,192,value] 200 test.local smartctl.smart[sg1,192,worst] 200 test.local smartctl.smart[sg1,192,thresh] 0 test.local smartctl.smart[sg1,192,type] &quot;Old_age&quot; test.local smartctl.smart[sg1,192,updated] &quot;Always&quot; test.local smartctl.smart[sg1,192,when_failed] &quot;-&quot; test.local smartctl.smart[sg1,192,raw_value] 29 test.local smartctl.smart[sg1,193,attribute_name] &quot;Load_Cycle_Count&quot; test.local smartctl.smart[sg1,193,flag] &quot;0x0032&quot; test.local smartctl.smart[sg1,193,value] 200 test.local smartctl.smart[sg1,193,worst] 200 test.local smartctl.smart[sg1,193,thresh] 0 test.local smartctl.smart[sg1,193,type] &quot;Old_age&quot; test.local smartctl.smart[sg1,193,updated] &quot;Always&quot; test.local smartctl.smart[sg1,193,when_failed] &quot;-&quot; test.local smartctl.smart[sg1,193,raw_value] 6 test.local smartctl.smart[sg1,194,attribute_name] &quot;Temperature_Celsius&quot; test.local smartctl.smart[sg1,194,flag] &quot;0x0022&quot; test.local smartctl.smart[sg1,194,value] 125 test.local smartctl.smart[sg1,194,worst] 96 test.local smartctl.smart[sg1,194,thresh] 0 test.local smartctl.smart[sg1,194,type] &quot;Old_age&quot; test.local smartctl.smart[sg1,194,updated] &quot;Always&quot; test.local smartctl.smart[sg1,194,when_failed] &quot;-&quot; test.local smartctl.smart[sg1,194,raw_value] 25 test.local smartctl.smart[sg1,196,attribute_name] &quot;Reallocated_Event_Count&quot; test.local smartctl.smart[sg1,196,flag] &quot;0x0032&quot; test.local smartctl.smart[sg1,196,value] 200 test.local smartctl.smart[sg1,196,worst] 200 test.local smartctl.smart[sg1,196,thresh] 0 test.local smartctl.smart[sg1,196,type] &quot;Old_age&quot; test.local smartctl.smart[sg1,196,updated] &quot;Always&quot; test.local smartctl.smart[sg1,196,when_failed] &quot;-&quot; test.local smartctl.smart[sg1,196,raw_value] 0 test.local smartctl.smart[sg1,197,attribute_name] &quot;Current_Pending_Sector&quot; test.local smartctl.smart[sg1,197,flag] &quot;0x0032&quot; test.local smartctl.smart[sg1,197,value] 200 test.local smartctl.smart[sg1,197,worst] 200 test.local smartctl.smart[sg1,197,thresh] 0 test.local smartctl.smart[sg1,197,type] &quot;Old_age&quot; test.local smartctl.smart[sg1,197,updated] &quot;Always&quot; test.local smartctl.smart[sg1,197,when_failed] &quot;-&quot; test.local smartctl.smart[sg1,197,raw_value] 0 test.local smartctl.smart[sg1,198,attribute_name] &quot;Offline_Uncorrectable&quot; test.local smartctl.smart[sg1,198,flag] &quot;0x0030&quot; test.local smartctl.smart[sg1,198,value] 200 test.local smartctl.smart[sg1,198,worst] 200 test.local smartctl.smart[sg1,198,thresh] 0 test.local smartctl.smart[sg1,198,type] &quot;Old_age&quot; test.local smartctl.smart[sg1,198,updated] &quot;Offline&quot; test.local smartctl.smart[sg1,198,when_failed] &quot;-&quot; test.local smartctl.smart[sg1,198,raw_value] 0 test.local smartctl.smart[sg1,199,attribute_name] &quot;UDMA_CRC_Error_Count&quot; test.local smartctl.smart[sg1,199,flag] &quot;0x0032&quot; test.local smartctl.smart[sg1,199,value] 200 test.local smartctl.smart[sg1,199,worst] 200 test.local smartctl.smart[sg1,199,thresh] 0 test.local smartctl.smart[sg1,199,type] &quot;Old_age&quot; test.local smartctl.smart[sg1,199,updated] &quot;Always&quot; test.local smartctl.smart[sg1,199,when_failed] &quot;-&quot; test.local smartctl.smart[sg1,199,raw_value] 0 test.local smartctl.smart[sg1,200,attribute_name] &quot;Multi_Zone_Error_Rate&quot; test.local smartctl.smart[sg1,200,flag] &quot;0x0008&quot; test.local smartctl.smart[sg1,200,value] 200 test.local smartctl.smart[sg1,200,worst] 200 test.local smartctl.smart[sg1,200,thresh] 0 test.local smartctl.smart[sg1,200,type] &quot;Old_age&quot; test.local smartctl.smart[sg1,200,updated] &quot;Offline&quot; test.local smartctl.smart[sg1,200,when_failed] &quot;-&quot; test.local smartctl.smart[sg1,200,raw_value] 0 <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0410 \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043c \u0432\u0441\u0435 \u044d\u0442\u043e Zabbix Trapper:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">zabbix_smartctl.sh<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">#!\/bin\/bash # Sending collected data to the zabbix server # Get device list and type from STDIN, produced by smartdiscovery.sh  PREFIX='\/usr\/local\/bin' while IFS=' ' read -r -a attr; do \tsmartctl -A -H -i -d ${attr[1]} \/dev\/${attr[0]} | $PREFIX\/smart2zabbix.sh \/dev\/${attr[0]} ${attr[1]} - | zabbix_sender -c \/etc\/zabbix\/zabbix_agentd.conf -i - done &lt; \/dev\/stdin  <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c sudo \u0434\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432, \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0432 cron \u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d \u043d\u0430 Zabbix Server.<br \/>  \u0413\u043e\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430\u043b\u0430 Zabbix Share, \u0433\u0434\u0435 \u044d\u0442\u043e \u0432\u0441\u0435 \u0432\u044b\u043b\u043e\u0436\u0435\u043d\u043e \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445: <a href=\"https:\/\/share.zabbix.com\/storage-devices\/smartmontools\/s-m-a-r-t-monitoring-with-smartmontools-lld-trapper\">S.M.A.R.T. monitoring with smartmontools (LLD,Trapper)<\/a><\/p>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u0435\u0440\u0435\u0434 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c\u0438\\\u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c\u0438, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u043f\u043e \u0436\u0435\u043b\u0430\u043d\u0438\u044e, \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432, \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0438\u0445 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435.               <\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/274391\/\"> http:\/\/habrahabr.ru\/post\/274391\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       \u0414\u043b\u044f \u0442\u0435\u0445 \u043a\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Zabbix, \u0438 \u0445\u043e\u0447\u0435\u0442 \u043d\u0430\u0443\u0447\u0438\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u043d\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b (\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0449\u0435 \u043d\u0435\u0442 \u0432 Zabbix), \u0430 \u0442\u0430\u043a\u0436\u0435,<br \/>  \u043a\u043e\u043c\u0443 \u043d\u0443\u0436\u0435\u043d \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 S.M.A.R.T., \u0438 \u043a\u043e\u0433\u043e \u043d\u0435 \u0443\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b, \u043f\u0440\u043e\u0448\u0443 \u043f\u043e\u0434 \u043a\u0430\u0442.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-271476","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/271476","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=271476"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/271476\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=271476"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=271476"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=271476"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}