#!/usr/bin/env bash # add this to snmpd.conf as below... actual path to the script can vary # extend phpfpmsp /root/snmp-extends/phpfpm-sp # # The location is is irrelevant. It just needs to be executable, # have access to curl, and be reachable by the snmpd. # # You can check it via... # snmpget -v 2c -c public localhost .1.3.6.1.4.1.8072.1.3.2.3.1.2.8.112.104.112.102.112.109.115.112 # which should print out... actual values will very... # NET-SNMP-EXTEND-MIB::nsExtendOutputFull."phpfpmsp" = STRING: www # 11/Feb/2017:18:45:43 -0600 # 189514 # 178516 # 0 # 0 # 0 # 2 # 1 # 3 # 20 # 13 # 0 # # In order the returned values are. # # pool # start_time # start_since # accepted_conn # listen_queue # max_listen_queue # listen_queue_len # idle_processes # active_processes # total_processes # max_active_processes # max_children_reached # slow_requests # the URL to fetch, change as needed url="http://localhost/status?full" opts="" # netdata # real-time performance and health monitoring, done right! # (C) 2016 Costa Tsaousis # GPL v3+ # # Contributed by @safeie with PR #276 # Modified to work as a SNMP extend by Zane C. Bowers-Hadley declare -A phpfpm_urls=() declare -A phpfpm_curl_opts=() # _update_every is a special variable - it holds the number of seconds # between the calls of the _update() function phpfpm_update_every= phpfpm_priority=60000 declare -a phpfpm_response=() phpfpm_pool="" phpfpm_start_time="" phpfpm_start_since=0 phpfpm_accepted_conn=0 phpfpm_listen_queue=0 phpfpm_max_listen_queue=0 phpfpm_listen_queue_len=0 phpfpm_idle_processes=0 phpfpm_active_processes=0 phpfpm_total_processes=0 phpfpm_max_active_processes=0 phpfpm_max_children_reached=0 phpfpm_slow_requests=0 # local opts="${1}" url="${2}" phpfpm_response=($(curl -Ss ${opts} "${url}")) [ $? -ne 0 -o "${#phpfpm_response[@]}" -eq 0 ] && exit 1 if [[ "${phpfpm_response[0]}" != "pool:" \ || "${phpfpm_response[2]}" != "process" \ || "${phpfpm_response[5]}" != "start" \ || "${phpfpm_response[12]}" != "accepted" \ || "${phpfpm_response[15]}" != "listen" \ || "${phpfpm_response[16]}" != "queue:" \ || "${phpfpm_response[26]}" != "idle" \ || "${phpfpm_response[29]}" != "active" \ || "${phpfpm_response[32]}" != "total" \ ]] then echo "invalid response from phpfpm status server: ${phpfpm_response[*]}" exit 1; fi phpfpm_pool="${phpfpm_response[1]}" phpfpm_start_time="${phpfpm_response[7]} ${phpfpm_response[8]}" phpfpm_start_since="${phpfpm_response[11]}" phpfpm_accepted_conn="${phpfpm_response[14]}" phpfpm_listen_queue="${phpfpm_response[17]}" phpfpm_max_listen_queue="${phpfpm_response[21]}" phpfpm_listen_queue_len="${phpfpm_response[25]}" phpfpm_idle_processes="${phpfpm_response[28]}" phpfpm_active_processes="${phpfpm_response[31]}" phpfpm_total_processes="${phpfpm_response[34]}" phpfpm_max_active_processes="${phpfpm_response[38]}" phpfpm_max_children_reached="${phpfpm_response[42]}" if [ "${phpfpm_response[43]}" == "slow" ] then phpfpm_slow_requests="${phpfpm_response[45]}" else phpfpm_slow_requests="-1" fi if [[ -z "${phpfpm_pool}" \ || -z "${phpfpm_start_time}" \ || -z "${phpfpm_start_since}" \ || -z "${phpfpm_accepted_conn}" \ || -z "${phpfpm_listen_queue}" \ || -z "${phpfpm_max_listen_queue}" \ || -z "${phpfpm_listen_queue_len}" \ || -z "${phpfpm_idle_processes}" \ || -z "${phpfpm_active_processes}" \ || -z "${phpfpm_total_processes}" \ || -z "${phpfpm_max_active_processes}" \ || -z "${phpfpm_max_children_reached}" \ ]] then echo "empty values got from phpfpm status server: ${phpfpm_response[*]}" exit 1 fi echo $phpfpm_pool echo $phpfpm_start_time echo $phpfpm_start_since echo $phpfpm_accepted_conn echo $phpfpm_listen_queue echo $phpfpm_max_listen_queue echo $phpfpm_listen_queue_len echo $phpfpm_idle_processes echo $phpfpm_active_processes echo $phpfpm_total_processes echo $phpfpm_max_active_processes echo $phpfpm_max_children_reached echo $phpfpm_slow_requests