Sid Gifari From Gifari Industries - BD Cyber Security Team
Home
/
usr
/
local
/
bin
/
✏️
Editing: phpfpm_zabbix_monitor.sh
#!/bin/bash STATS_FILE="/var/lib/zabbix/phpfpm_stats" TEMP_FILE="/tmp/phpfpm_stats.tmp" count_processes_by_state() { local state=$1 ps -eo pid,ppid,user,stat,comm | grep "php-fpm" | grep -v "php-fpm: master" | awk -v state="$state" '$4 ~ state {count++} END {print count+0}' } get_total_workers() { ps -eo pid,ppid,user,stat,comm | grep "php-fpm" | grep -v "php-fpm: master" | wc -l } get_pool_info() { ps -eo args | grep "php-fpm: pool" | awk '{for(i=1;i<=NF;i++) if($i=="pool" && $(i+1)!="") print $(i+1)}' | sort | uniq } get_pool_cpu() { local pool=$1 local pool_processes=$(ps -eo args | grep "php-fpm: pool $pool" | wc -l) if [ "$pool_processes" -gt 0 ]; then echo "scale=1; $pool_processes * 5.0" | bc 2>/dev/null || echo "5.0" else echo "0.0" fi } get_pool_memory() { local pool=$1 local pool_processes=$(ps -eo args | grep "php-fpm: pool $pool" | wc -l) if [ "$pool_processes" -gt 0 ]; then echo "scale=1; $pool_processes * 0.1" | bc 2>/dev/null || echo "0.1" else echo "0.0" fi } get_user_workers() { ps -eo user,pid,ppid,stat,comm | grep "php-fpm" | grep -v "php-fpm: master" | awk '{users[$1]++} END {for(user in users) print users[user], user}' | sort -nr | head -15 | awk '{print $2, $1}' } > "$TEMP_FILE" echo "phpfpm.total_workers $(get_total_workers)" >> "$TEMP_FILE" echo "phpfpm.running $(count_processes_by_state 'R')" >> "$TEMP_FILE" echo "phpfpm.sleeping $(count_processes_by_state 'S')" >> "$TEMP_FILE" echo "phpfpm.disk_sleep $(count_processes_by_state 'D')" >> "$TEMP_FILE" echo "phpfpm.zombie $(count_processes_by_state 'Z')" >> "$TEMP_FILE" echo "phpfpm.stopped $(count_processes_by_state 'T')" >> "$TEMP_FILE" echo "phpfpm.traced $(count_processes_by_state 't')" >> "$TEMP_FILE" echo "phpfpm.dead $(count_processes_by_state 'X')" >> "$TEMP_FILE" get_user_workers | while read user count; do if [ -n "$user" ] && [ -n "$count" ]; then echo "phpfpm.user_workers[$user] $count" >> "$TEMP_FILE" fi done get_pool_info | while read pool; do if [ -n "$pool" ]; then cpu_usage=$(get_pool_cpu "$pool") mem_usage=$(get_pool_memory "$pool") echo "phpfpm.cpu_pool[$pool] $cpu_usage" >> "$TEMP_FILE" echo "phpfpm.mem_pool[$pool] $mem_usage" >> "$TEMP_FILE" fi done mv "$TEMP_FILE" "$STATS_FILE" chown zabbix:zabbix "$STATS_FILE" chmod 644 "$STATS_FILE" if [ -t 1 ]; then echo "PHP-FPM statistics updated in $STATS_FILE" echo "Contents:" cat "$STATS_FILE" fi
💾 Save
❌ Cancel