• zabbix3.0自动发现磁盘并监控磁盘IO


    Zabbix 版本:3.0

    操作系统:Ubuntu16.04

    操作环境,在被监控的主机上安装zabbix agent。安装方式为源码包安装。

    简要安装步骤:

    参考:https://www.zabbix.com/documentation/3.0/manual/installation/install#installation_from_sources

    wget https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.0.24/zabbix-3.0.24.tar.gz/download
    mv download zabbix-3.0.tar.gz
    tar zxf zabbix-3.0.tar.gz
    mkdir zabbix
    cd  zabbix
    ./configure --enable-agent --prefix=$HOME/zabbix
    
    make install

    需要的预备知识:

           我的监控方案参考很多网上的资源,具体链接就不在这里写了。

           磁盘性能的数据来源主要是/proc/diskstats,其他方案用的大多数是iostat命令,但是这个命名需要安装一个包(syststat)。生产环境不能连互联网,也不想用源码包安装了,iostat取的好像也是/proc/diskstats的数据。

          先了解一下这和目录下数据的含义:

    diskstats各字段的含义:
    官方解释:https://www.kernel.org/doc/Documentation/iostats.txt
     
    A    B  C                        6        7        8   9   10      11   
    8      16 sdb 113686 7710 7704472 65448 225772 188612 184042704 298452 0  51952  363852
    A:主设备号
    B:次设备号
    C:设备名称
    1:读完成次数 ----- 读磁盘的次数,成功完成读的总次数。
    2:合并读完成次数,第6个域:合并写完成次数。为了效率可能会合并相邻的读和写。从而两次4K的读在它最终被处理到磁盘上之前可能会变成一次8K的读,才被计数(和排队),因此只有一次I/O操作。这个域使你知道这样的操作有多频繁。
    3:读扇区的次数,成功读过的扇区总次数。
    4:读花费的毫秒数,这是所有读操作所花费的毫秒数(用__make_request()到end_that_request_last()测量)
    5:写完成次数 ----写完成的次数,成功写完成的总次数。
    6:合并写完成次数 -----合并写次数
    7:写扇区次数 ---- 写扇区的次数,成功写扇区总次数。
    8:写操作花费的毫秒数 --- 写花费的毫秒数,这是所有写操作所花费的毫秒数(用__make_request()到end_that_request_last()测量)
    9:正在处理的输入/输出请求数 -- -I/O的当前进度,只有这个域应该是0。当请求被交给适当的request_queue_t时增加和请求完成时减小
    10:输入/输出操作花费的毫秒数 ----花在I/O操作上的毫秒数,这个域会增长只要field 9不为0。
    11:输入/输出操作花费的加权毫秒数 ----- 加权, 花在I/O操作上的毫秒数,在每次I/O开始,I/O结束,I/O合并时这个域都会增加。这可以给I/O完成时间和存储那些可以累积的提供一个便利的测量标准。

    agent安装完之后开始改配置文件。

    先改一下配置文件:etc/zabbix_agentd.conf

    UnsafeUserParameters=1
    # 把这个值改为1,因为自动发现的脚本中有一些特殊字符,被认为是不安全的因素,1表示允许这些字符存在(我的理解)如果不该,后期在Server端就会报错,原因就在这里。

    然后在etc/zabbix_agentd.conf末尾加两行

    # 第一行是自动发现脚本的路径
    UserParameter=disk.discovery,/home/zabbix/etc/zabbix_agentd.conf.d/disk_discovery.sh
    # 第二行是检测磁盘IO的脚本路径
     UserParameter=disk.status[*],/home/zabbix/etc/zabbix_agentd.conf.d/disk_status.sh $1 $2

    当然这两行可以单独写在另一个配置文件中,注意路径:

     # Include=/usr/local/etc/zabbix_agentd.userparams.conf
     # 在etc/zabbix_agentd.conf 中指明路径。

    自动发现脚本的文件内容:

    #!/bin/bash
    diskarray=(`cat /proc/diskstats |grep -E "sd[abcdefg]|xvd[abcdefg]"|grep -i "$1"|awk '{print $3}'|sort|uniq   2>/dev/null`)
    length=${#diskarray[@]}
    printf "{
    "
    printf  '	'""data":["
    for ((i=0;i<$length;i++))
    do
            printf '
    		{'
            printf ""{#DISK_NAME}":"${diskarray[$i]}"}"
            if [ $i -lt $[$length-1] ];then
                    printf ','
            fi
    done
    printf  "
    	]
    "
    printf "}
    "

    检测磁盘状态的脚本内容

    #/bin/sh
    
    device=$1
    DISK=$2
    
    case $DISK in
    
             read.ops)
                /bin/cat /proc/diskstats | grep "$device" | head -1 | awk '{print $4}'    #//磁盘读的次数
                ;;
             read.merged)
                /bin/cat /proc/diskstats | grep "$device" | head -1 | awk '{print $5}'      #//合并读完成次数
                ;;
             read.sectors)
                /bin/cat /proc/diskstats | grep "$device" | head -1 | awk '{print $6}'      #//读扇区的次数(一个扇区的等于512B)
                ;;
             read.ms)
                /bin/cat /proc/diskstats | grep "$device" | head -1 | awk '{print $7}'    #//磁盘读的毫秒数
                ;;
             write.ops)
                /bin/cat /proc/diskstats | grep "$device" | head -1 | awk '{print $8}'     #//磁盘写的次数
                ;;
             write.merged)
                /bin/cat /proc/diskstats | grep "$device" | head -1 | awk '{print $9}'      #//合并写完成次数
                ;;           
             write.sectors)
                /bin/cat /proc/diskstats | grep "$device" | head -1 | awk '{print $10}'     #//写扇区的次数(一个扇区的等于512B)
                ;;
             write.ms)
                /bin/cat /proc/diskstats | grep "$device" | head -1 | awk '{print $11}'    #//磁盘写的毫秒数
                ;;
             io.active)
                /bin/cat /proc/diskstats | grep "$device" | head -1 | awk '{print $12}'    #//I/O的当前进度,
                ;;
             io.ms)
                /bin/cat /proc/diskstats | grep "$device" | head -1 | awk '{print $13}'      #//花费在IO操作上的毫秒数
                ;;
    
    esac

    然后启动agent就可以了。启动路径在/sbin/zabbix-agentd

     到此agent端的配置完成,开始在server端配置。

    1.创建一个模板(可选),建议配置一个,名字根据需求写

    配置--模板--创建模板 

    2.创建自动发现

    3. 在自动发现规则里选创建监控原型(注意这里,之前有一个文章直接在监控项里创建的,误导了我一上午)

    具体的监控项原型

    效果图:

     

    详细的步骤各解释后期补充

    参考链接:https://idc.wanyunshuju.com/zabbix/563.html

  • 相关阅读:
    javaScript真值和假值以及相等操作符
    javaScript操作符
    javascript变量作用域
    javaScript变量
    Linux命令学习之路——档案拷贝:cp
    Linux命令学习之路——变更文档拥有者:chown
    Linux命令学习之路——文档权限管理:chmod
    Linux命令学习之路——变更工作目录:cd
    关于Scrum团队的理解
    关于MATHAPP的测试
  • 原文地址:https://www.cnblogs.com/gaoyuanzhi/p/10150226.html
Copyright © 2020-2023  润新知