├── README.md ├── etc ├── sudoers.d │ └── zabbix └── zabbix │ ├── bin │ └── mdraid.sh │ └── zabbix_agent2.d │ └── mdraid.conf └── zbx_export_templates.xml /README.md: -------------------------------------------------------------------------------- 1 | # Zabbix template handles Software RAID (MD) on Linux 2 | 3 | ## Design and Implementaion: 4 | 5 | - auto-discovery for all active MDs 6 | - no assumption made about MD name 7 | - currently, only two HDD/SSD reported as members of the array 8 | - trigger is constructed to monitor RAID State. 9 | - to avoid flipping, the trigger will fire if state change sustain for more than one collection cycle 10 | 11 | ## Compatibility 12 | 13 | - Agent: `Debian 12`, `zabbix-agent2 6.0.14`; Server: `Docker zabbix/zabbix-web-nginx-pgsql:7.2.3-ubuntu` 14 | 15 | ## TO DO list 16 | 17 | - indtroduce items: failed device, number of failed devices 18 | - auto-discover array devices 19 | 20 | 21 | ## Append to zabbix_agentd.conf file 22 | 23 | ```sheell 24 | UserParameter=mdraid[*], sudo /usr/local/bin/zabbix_mdraid.sh -m'$1' -$2'$3' 25 | UserParameter=mdraid.discovery, sudo /usr/local/bin/zabbix_mdraid.sh -D 26 | ``` 27 | 28 | ## Note 29 | 30 | **don't forget to add zabbix user to sudoers** 31 | 32 | 33 | ## Referrence: 34 | 35 | - https://www.kernel.org/doc/Documentation/md.txt 36 | - http://unix.stackexchange.com/questions/47163/whats-the-difference-between-mdadm-state-active-and-state-clean 37 | - Zabbix LSI RAID template https://www.zabbix.com/wiki/templates/start 38 | -------------------------------------------------------------------------------- /etc/sudoers.d/zabbix: -------------------------------------------------------------------------------- 1 | Cmnd_Alias C_ZABBIX = \ 2 | /etc/zabbix/bin/mdraid.sh, /etc/zabbix/bin/mdraid.sh * 3 | 4 | zabbix ALL = (root) NOPASSWD: C_ZABBIX 5 | -------------------------------------------------------------------------------- /etc/zabbix/bin/mdraid.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # AUTHOR: 4 | # 5 | # WEBSITE: https://github.com/linuxsquad/zabbix_mdraid 6 | # 7 | # DATE: 2013-12-31 8 | # 9 | # DESCRIPTION: LLD for SW RAID (MDRAID) 10 | # 11 | # PRE-REQUISIT: 12 | # 13 | # INPUT: see below 14 | # 15 | # OUTPUT: MD RAID parameters 16 | # 17 | # RELEASE NOTE: 18 | # 20250216 - Added "chmod 777 ${JSONFILE}" To avoid permission problems 19 | 20 | typeset JSONFILE="/tmp/zabbix_mdraid_discovery.json" 21 | 22 | #echo "OPTIND is now $OPTIND" 23 | while getopts ":Dm:e:s:d:" optname 24 | do 25 | case "$optname" in 26 | "e") 27 | # Extract string values 28 | /sbin/mdadm --detail ${MD_dev} | grep "${OPTARG}" | awk -F":" '{print $2}' | tr -d [[:space:]] 29 | ;; 30 | "s") 31 | # echo "Size of the array" 32 | /sbin/mdadm --detail ${MD_dev} | grep "${OPTARG}" | awk -F":" '{print $2}' | sed -e "s/(.*//" | tr -d [[:space:]] 33 | ;; 34 | "d") 35 | # echo "Devices in the array" 36 | /sbin/mdadm --detail ${MD_dev} | tail -n+2 | grep "/dev/" | awk -v x=${OPTARG} '$4 == x {print $5,$6,$7}' 37 | ;; 38 | "m") 39 | # echo "Setting MD RAID" 40 | MD_dev="${OPTARG}" 41 | ;; 42 | "D") 43 | # echo "Discovery" 44 | echo -en "{\n \"data\":[" > ${JSONFILE} 45 | cat /proc/mdstat | grep ^md | while read line 46 | do 47 | MDdev=`echo $line | awk '{print $1}'` 48 | echo -en "\n { \"{#MD_DEVICE}\":\"/dev/${MDdev}\" }," >> ${JSONFILE} 49 | done 50 | echo -e " ]\n}" >> ${JSONFILE} 51 | # this awkward way to handle removal of coma from the last line" 52 | cat ${JSONFILE} | sed -e 's/}, ]/}\n ]/' 53 | chmod 777 ${JSONFILE} 54 | ;; 55 | "?") 56 | echo "Unknown option $OPTARG" 57 | ;; 58 | ":") 59 | echo "No argument value for option $OPTARG" 60 | ;; 61 | *) 62 | # Should not occur 63 | echo "Unknown error while processing options" 64 | ;; 65 | esac 66 | # echo "OPTIND is now $OPTIND" 67 | done 68 | -------------------------------------------------------------------------------- /etc/zabbix/zabbix_agent2.d/mdraid.conf: -------------------------------------------------------------------------------- 1 | UserParameter=mdraid[*], sudo /etc/zabbix/bin/mdraid.sh -m'$1' -$2'$3' 2 | UserParameter=mdraid.discovery, sudo /etc/zabbix/bin/mdraid.sh -D 3 | -------------------------------------------------------------------------------- /zbx_export_templates.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 2.0 4 | 2013-07-18T05:19:56Z 5 | 6 | 7 | Templates 8 | 9 | 10 | 11 | 530 | 531 | 532 | --------------------------------------------------------------------------------