diff --git a/zabbix/zabbix_php_fpm_discovery.sh b/zabbix/zabbix_php_fpm_discovery.sh new file mode 100644 index 0000000..c21f8c5 --- /dev/null +++ b/zabbix/zabbix_php_fpm_discovery.sh @@ -0,0 +1,55 @@ +#!/bin/bash +#Ramil Valitov ramilvalitov@gmail.com +#https://github.com/rvalitov/zabbix-php-fpm + +S_PS=`which ps` +S_GREP=`which grep` +S_AWK=`which awk` +S_SORT=`which sort` +S_HEAD=`which head` +S_LSOF=`which lsof` + +if [[ ! -f $S_PS ]]; then + echo "Utility 'ps' not found. Please, install it first." + exit 1 +fi +if [[ ! -f $S_GREP ]]; then + echo "Utility 'grep' not found. Please, install it first." + exit 1 +fi +if [[ ! -f $S_AWK ]]; then + echo "Utility 'awk' not found. Please, install it first." + exit 1 +fi +if [[ ! -f $S_SORT ]]; then + echo "Utility 'sort' not found. Please, install it first." + exit 1 +fi +if [[ ! -f $S_HEAD ]]; then + echo "Utility 'head' not found. Please, install it first." + exit 1 +fi +if [[ ! -f $S_LSOF ]]; then + echo "Utility 'lsof' not found. Please, install it first." + exit 1 +fi + +mapfile -t PS_LIST < <( $S_PS ax | $S_GREP "php-fpm: pool " | $S_GREP -v grep ) +POOL_LIST=`printf '%s\n' "${PS_LIST[@]}" | $S_AWK '{print $NF}' | $S_SORT -u` +POOL_FIRST=0 +echo -n "{\"data\":[" +while IFS= read -r line +do + if [[ $POOL_FIRST == 1 ]]; then + echo -n "," + fi + POOL_FIRST=1 + POOL_PID=`printf '%s\n' "${PS_LIST[@]}" | $S_GREP "php-fpm: pool $line" | $S_HEAD -1 | $S_AWK '{print $1}'` + if [[ ! -z $POOL_PID ]]; then + POOL_SOCKET=`$S_LSOF -p $POOL_PID | $S_GREP unix | $S_HEAD -1 | $S_AWK '{ print $(NF-1)}'` + if [[ ! -z $POOL_SOCKET ]]; then + echo -n "{\"{#POOLNAME}\":\"$line\",\"{#POOLSOCKET}\":\"$POOL_SOCKET\"}" + fi + fi +done <<< "$POOL_LIST" +echo -n "]}" \ No newline at end of file