美文网首页
使用MegaCli通过zabbix监控硬盘状态

使用MegaCli通过zabbix监控硬盘状态

作者: 若有所思11 | 来源:发表于2018-01-17 11:39 被阅读0次

    1. 安装MegaCli及使用方法

    a. 安装

    • centos 7
    yum install http://sarepos.cpanel.net/centos/7/noarch/MegaCli-8.07.14-1.el7.centos.noarch.rpm
    
    • centos 6
    yum install http://sarepos.cpanel.net/centos/6/noarch/MegaCli-8.07.14-1.noarch.rpm
    
    • redhat 5

    由于之前的omsa与MegaCli有冲突,所以需要先卸载omsa。

    wget http://ftp.cs.stanford.edu/pub/rpms/centos/5.8/x86_64/Lib_Utils-1.00-08.noarch.rpm
    wget http://ftp.cs.stanford.edu/pub/rpms/centos/5.8/x86_64/MegaCli-8.00.46-1.i386.rpm
    yum remove srvadmin*
    rpm -ivh Lib_Utils-1.00-08.noarch.rpm 
    rpm -ivh MegaCli-8.00.46-1.i386.rpm
    

    b. 使用方法

    /opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -Lall -aALL # 查raid级别
    /opt/MegaRAID/MegaCli/MegaCli64 -AdpAllInfo -aALL # 查raid卡信息
    /opt/MegaRAID/MegaCli/MegaCli64 -PDList -aALL # 查看硬盘信息
    /opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -aAll # 查看电池信息
    /opt/MegaRAID/MegaCli/MegaCli64 -FwTermLog -Dsply -aALL # 查看raid卡日志
    /opt/MegaRAID/MegaCli/MegaCli64 -adpCount # 显示适配器个数
    /opt/MegaRAID/MegaCli/MegaCli64 -AdpGetTime –aALL # 显示适配器时间
    /opt/MegaRAID/MegaCli/MegaCli64 -AdpAllInfo -aAll # 显示所有适配器信息
    /opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -LALL -aAll # 显示所有逻辑磁盘组信息
    /opt/MegaRAID/MegaCli/MegaCli64 -PDList -aAll # 显示所有的物理信息
    /opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuStatus -aALL |grep ‘Charger Status’ # 查看充电状态
    /opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuStatus -aALL # 显示BBU状态信息
    /opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuCapacityInfo -aALL # 显示BBU容量信息
    /opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuDesignInfo -aALL # 显示BBU设计参数
    /opt/MegaRAID/MegaCli/MegaCli64 -AdpBbuCmd -GetBbuProperties -aALL # 显示当前BBU属性
    /opt/MegaRAID/MegaCli/MegaCli64 -cfgdsply -aALL # 显示Raid卡型号,Raid设置,Disk相关信息
    

    2. 修改zabbix-agent配置文件及测试脚本

    a. 修改zabbix-agnet配置文件

    将脚本放在 /etc/zabbix/scripts/ 下并修改权限为755。

    编辑zabbix-agent配置文件。

    vim /etc/zabbix/zabbix_agentd.conf

    修改以下选项。

    UnsafeUserParameters=1
    UserParameter=pdjson,python /etc/zabbix/scripts/linuxMega.py -c pdjson
    

    重启zabbix-agent。

    systemctl restart zabbix-agent

    配置zabbix用户sudo权限,并且允许无tty执行命令。

    vim /etc/suders

    在各自字段下,添加以下内容。

    # Defaults specification
    
    Defaults:zabbix    !requiretty
    
    ## Allow root to run any commands anywhere 
    zabbix ALL=(ALL)     NOPASSWD:ALL
    

    b. 在zabbix-server服务器上测试脚本是否能正常运行。

    zabbix_get -s xx.xx.xx.xx -k pdjson

    如果正常会返回以下结果:

    {"data": [{"{#PHYSICALDISK}": "SlotNumber6"}, {"{#PHYSICALDISK}": "SlotNumber7"}, {"{#PHYSICALDISK}": "SlotNumber4"}, {"{#PHYSICALDISK}": "SlotNumber5"}, {"{#PHYSICALDISK}": "SlotNumber2"}, {"{#PHYSICALDISK}": "SlotNumber3"}, {"{#PHYSICALDISK}": "SlotNumber0"}, {"{#PHYSICALDISK}": "SlotNumber1"}]}
    

    3. 新建模版并应用到主机

    新建模版 Template LinuxDisk Monitor v1

    建立自动发现规则

    20180111-015751.png

    监控项原型里建立采集器,其中Firmwarestate为字符类型,其他为数字。

    20180111-015828.png

    在主机上添加模版并应用。

    4. 在被监控主机上新建crontab任务,发送数据。

    a. 新建用户并修改权限

    由于脚本执行sudo需要tty,权限所以要修改/etc/sudoers的设置,但是给root账户不需要tty就可以执行sudo的权限比较不安全,所以新建用户opsmaster用来执行脚本,经测试nologin的用户crontab不能正常执行。

    vim /etc/sudoers

    添加以下内容:

    # Defaults specification
    
    Defaults:opsmaster    !requiretty
    
    ## Allow root to run any commands anywhere 
    opsmaster ALL=(ALL)     NOPASSWD:ALL
    

    b. 添加crontab

    给opsmaster用户添加一条crontab任务。

    crontab -u opsmaster -e

    添加以下内容:

    59 */2 * * * python /etc/zabbix/scripts/linuxMega.py -c sendpddata
    

    python如果是3.5的话则不能运行;python是2.7的话可以向/etc/zabbix/scripts/disksmonitor.log 文件里记日志;python是2.6.6的话可以运行,但是不会向/etc/zabbix/scripts/disksmonitor.log里写日志

    查看crontab里的任务是否执行,可以查看/var/log/cron 是否有对应记录。

    如果crontab执行了,却没有数据,在/var/spool/mail/ 查看对应用户的文件,可看到详细报错信息。


    附:目前服务器上使用的脚本

    #!/bin/bash
    #!/usr/bin/python2.6
    # -*- coding: utf-8 -*-
     
    import subprocess, re, logging, tempfile, os, json, optparse
     
     
    logfile = "/etc/zabbix/scripts/disksmonitor.log"
    logger = logging.getLogger()
    logging.basicConfig(filename=logfile,level="DEBUG",format='%(asctime)s %(levelname)s: %(message)s')
    conf = '/etc/zabbix/zabbix_agentd.conf'
    out_bytes = subprocess.Popen(['sudo','/opt/MegaRAID/MegaCli/MegaCli64','-PDList','-aALL'], stdout=subprocess.PIPE).communicate()[0]
    fjson = re.split('[:,\n]',out_bytes)
    logger.debug(fjson)
     
    noblank = []
    for i in fjson:
            i = re.sub('\s','',i)
            noblank.append(i)
     
    list2 = {}
     
    t = [i for i, x in enumerate(noblank) if x == 'SlotNumber']
    q = [i for i, x in enumerate(noblank) if x == 'Firmwarestate']
    m = [i for i, x in enumerate(noblank) if x == 'MediaErrorCount']
    ...skipping...
            if return_code == 1:
                    logger.error(out)
                    logger.error(err)
            else:
                    logger.debug(err)
                    logger.debug(out)
            return return_code
     
     
    def main():
            choices = ['pdjson','sendpddata']
            parser = optparse.OptionParser()
            parser.add_option('--check','-c', type='choice', choices=choices, help='Type of check')
            (options, args) = parser.parse_args()
            if not options.check:
                    parser.error('input option please')
            elif options.check == 'pdjson':
                    print pdjson()
            elif options.check == 'sendpddata':
                    diskdictmake()
            else:
                    print 'parameter error!'
     
    if __name__ == '__main__':
            main()
    
    

    相关文章

      网友评论

          本文标题:使用MegaCli通过zabbix监控硬盘状态

          本文链接:https://www.haomeiwen.com/subject/yrgyoxtx.html