上篇写了一个zabbix_系统IO监控,但每次都需要手动加,比较费劲,监控项跟图形都只能一个一个加

附上篇博客地址: http://xiong51.blog.51cto.com/5239058/1947663


这次使用zabbix_自动发现的模式来搞一次,


大概思路,

1、在zabbix客户端先配置iostat最新数据,

      1.1、不能直接使用iostat,因为它的数据一直会固定不动,使用iostst -xdkt 5 3   (5秒3次)

      1.2、 定义好脚本之后需要使用crontab配置每1分钟或者30秒更新一次数据,直接输送到文件就成

2、写一个自动发现的脚本,发现iostat有几个磁盘,格式必须为JSON,key值必须大写

       2.1、 小写会出现 这个  Cannot create item: item with the same key “custom.vfs.dev.read.ops `xxxxxx` already exists

       2.2、 避免出现坑,配置完成之后在zabbix服务端上运行,出现下图的结果说明脚本运行正常

       2.3、 在测试之前,必须在zabbix客户端的配置文件中加一行,io.dis为自己定义的键

                UserParameter=io.dis.status[*],/usr/local/zabbix/scripts/discovery_iostat_disk.sh

zabbix 使用模板监控zookeeper zabbix监控io模板_数据


3、最后在弄一个脚本,配置你想要监控的项就成

     rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util

      各项值的详解


rrqm            /s            : 每秒进行 merge 的读操作数目。即 rmerge            /s           


            wrqm            /s            : 每秒进行 merge 的写操作数目。即 wmerge            /s           


            r            /s            : 每秒完成的读 I            /O             设备次数。即 rio            /s           


            w            /s            : 每秒完成的写 I            /O             设备次数。即 wio            /s           


            rsec            /s            : 每秒读扇区数。即 rsect            /s           


            wsec            /s            : 每秒写扇区数。即 wsect            /s           


            rkB            /s            : 每秒读K字节数。是 rsect            /s             的一半,因为每扇区大小为512字节。           


            wkB            /s            : 每秒写K字节数。是 wsect            /s             的一半。           


            avgrq-sz: 平均每次设备I            /O            操作的数据大小 (扇区)。           


            avgqu-sz: 平均I            /O            队列长度。           


            await: 平均每次设备I            /O            操作的等待时间 (毫秒)。           


            svctm: 平均每次设备I            /O            操作的服务时间 (毫秒)。           


            %util: 一秒中有百分之多少的时间用于 I            /O             操作,即被io消耗的cpu百分比




4、 附上脚本一共四个   所有脚本都需要7的权限 rwx 使用zabbix用户


#!/bin/bash           


            #           


            #   Name:service 取出io数据用于分析           


            #   Version Number:1.01           


            #   Type: 取出I/O数据           


            #   Language:bash shell             


            #   Date:2017-08-07             


            #   Author:xiong           


                        


            iostat -xdkt 5 3 >             /tmp/io            .txt           


                        


            times            =`            date             +%H            ":"            %M            ":"            %S`           


                        


            # 取出最后一次iostat更新的数据,为最新数据,将最新的数据更新至/tmp/2.txt 不输出           


            grep             "$times"             -A 100             /tmp/io            .txt  >             /tmp/io2            .txt


#!/bin/bash           


            #           


            #   Name:service 自动发现io_磁盘           


            #   Version Number:1.01           


            #   Type: 自动发现io_磁盘           


            #   Language:bash shell             


            #   Date:2017-08-07             


            #   Author:xiong           


                        


            disk=(`            awk             '{print $1}'             /tmp/io2            .txt |             sed             -e             "1,2d"            `)           


            length=${            #disk[@]}           


                        


            printf             "{\n"           


            printf             "\t\"data:\"[\n"           


            for             ((i=0;i<$length;i++));             do           


                        printf             '\t\t{'           


                        printf             "\"{#disk_name}\":\"${disk[$i]}\"}"           


                        if             [ $i -lt $[$length - 1] ];            then           


                        printf             ",\n"           


                        fi           


            done           


            printf             "\n\t]\n"           


            printf             "}\n"


############### 配置脚本            


                        


            #!/bin/bash           


            #           


            #   Name:service 自动发现io_磁盘           


            #   Version Number:1.01           


            #   Type: 自动发现io_磁盘           


            #   Language:bash shell             


            #   Date:2017-08-07             


            #   Author:xiong           


                        


            disk=$1           


            case             $2             in           


            rrqm)           


                        grep             "$disk"             /tmp/io2            .txt |             awk             '{print $2}'             ;;           


            wrqm)           


                        grep             "$disk"             /tmp/io2            .txt |             awk             '{print $3}'             ;;           


            rs)           


                        grep             "$disk"             /tmp/io2            .txt |             awk             '{print $4}'             ;;           


            ws)           


                        grep             "$disk"             /tmp/io2            .txt |             awk             '{print $5}'             ;;           


            rkB)           


                        grep             "$disk"             /tmp/io2            .txt |             awk             '{print $6}'             ;;           


            wkB)           


                        grep             "$disk"             /tmp/io2            .txt |             awk             '{print $7}'             ;;           


            avgrqsz)           


                        grep             "$disk"             /tmp/io2            .txt |             awk             '{print $8}'             ;;           


            avgqusz)           


                        grep             "$disk"             /tmp/io2            .txt |             awk             '{print $9}'             ;;           


            await)           


                        grep             "$disk"             /tmp/io2            .txt |             awk             '{print $10}'             ;;           


            rawait)           


                        grep             "$disk"             /tmp/io2            .txt |             awk             '{print $11}'             ;;           


            wawait)           


                        grep             "$disk"             /tmp/io2            .txt |             awk             '{print $12}'             ;;           


            svctm)           


                        grep             "$disk"             /tmp/io2            .txt |             awk             '{print $13}'             ;;           


            util)           


                        grep             "$disk"             /tmp/io2            .txt |             awk             '{print $14}'             ;;           


            esac            *)           


                        echo             "使用方法  /bash disk_name disk_type"            


                        exit             5 ;;           


            esac




# 附上一个临时配置脚本文件,懒得写的 可以先运行一下这个脚本,然后再修改一下就成


#!/bin/bash           


            #           


            a=(`            cat             io2.txt |            sed             '1d'             |             grep             '^Device'            `)           


            length=${            #a[@]}           


                        


            printf             "#!/bin/bash\n"           


            printf             "#\n"           


            printf             "case \$1 in\n"           


            for             ((i<0;i<length;i++));            do           


                        printf             "${a[$i]})\n"           


                        printf             "\tgrep \"\$disk\" /tmp/io2.txt | awk \'{print $i}\' ;;\n"           


            done           


                        printf             "esac\n"




5、  配置计划任务,让iostat.sh脚本能够1分钟或者30秒执行一次,取最新的数据


crontab             -e 中添加一行           


            0 *            /1             * * *             /bin/bash             /usr/local/zabbix/scripts/iostat            .sh




6、 zabbix客户端配置


vim ..            /etc/zabbix_agentd            .conf               # 此处为自己配置的zabbix目录 使用绝对路径最为妥当           


            UserParameter=io.dis.status[*],            /usr/local/zabbix/scripts/discovery_iostat_disk            .sh           


            UserParameter=io.status[*],            /usr/local/zabbix/scripts/zabbix_iostat_disk            .sh  $1 $2


7、 效果图,所有的键值类型都是字符型

zabbix 使用模板监控zookeeper zabbix监控io模板_ios_02

zabbix 使用模板监控zookeeper zabbix监控io模板_awk_03

zabbix 使用模板监控zookeeper zabbix监控io模板_json_04

zabbix 使用模板监控zookeeper zabbix监控io模板_运维_05


8、 最后附上模板

        太长不方便看,请附件中下载




附件:http://down.51cto.com/data/2366911



     本文转自812374156 51CTO博客,原文链接:http://blog.51cto.com/xiong51/1954271,如需转载请自行联系原作者