Follow the instructions below to configure this check for an Agent running on a host. For containerized environments, see the section.
Host
To configure this check for an Agent running on a host:
Edit the php_fpm.d/conf.yaml file, in the conf.d/ folder at the root of your . See the sample php_fpm.d/conf.yaml for all available configuration options:
init_config: instances: ## @param status_url - string - required ## Get metrics from your FPM pool with this URL ## The status URLs should follow the options from your FPM pool ## See //php.net/manual/en/install.fpm.configuration.php ## * pm.status_path ## You should configure your fastcgi passthru (nginx/apache) to catch these URLs and ## redirect them through the FPM pool target you want to monitor (FPM `listen` ## directive in the config, usually a UNIX socket or TCP socket. # - status_url: //localhost/status ## @param ping_url - string - required ## Get a reliable service check of your FPM pool with `ping_url` parameter ## The ping URLs should follow the options from your FPM pool ## See //php.net/manual/en/install.fpm.configuration.php ## * ping.path ## You should configure your fastcgi passthru (nginx/apache) to ## catch these URLs and redirect them through the FPM pool target ## you want to monitor (FPM `listen` directive in the config, usually ## a UNIX socket or TCP socket. # ping_url: //localhost/ping ## @param use_fastcgi - boolean - required - default: false ## Communicate directly with PHP-FPM using FastCGI # use_fastcgi: false ## @param ping_reply - string - required ## Set the expected reply to the ping. # ping_reply: pong
.
Containerized
For containerized environments, see the Autodiscovery Integration Templates for guidance on applying the parameters below.
ParameterValuephp_fpmblank or {}{"status_url":"//%%host%%/status", "ping_url":"//%%host%%/ping", "use_fastcgi": false, "ping_reply": "pong"}Multiple poolsIt is possible to monitor multiple PHP-FPM pools using the same proxy server, a common scenario when running on Kubernetes. To do so, modify your server’s routes to point to different PHP-FPM instances. Here is an example NGINX configuration:
server { ... location ~ ^/(status1|ping1)$ { access_log off; fastcgi_pass instance1_ip:instance1_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ ^/(status2|ping2)$ { access_log off; fastcgi_pass instance2_ip:instance2_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
If you find this approach too tedious at scale, setting server { ... location ~ ^/(status1|ping1)$ { access_log off; fastcgi_pass instance1_ip:instance1_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ ^/(status2|ping2)$ { access_log off; fastcgi_pass instance2_ip:instance2_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } 0 to server { ... location ~ ^/(status1|ping1)$ { access_log off; fastcgi_pass instance1_ip:instance1_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ ^/(status2|ping2)$ { access_log off; fastcgi_pass instance2_ip:instance2_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } 1 instructs the check to bypass any proxy servers and communicate directly with PHP-FPM using FastCGI. The default port is server { ... location ~ ^/(status1|ping1)$ { access_log off; fastcgi_pass instance1_ip:instance1_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ ^/(status2|ping2)$ { access_log off; fastcgi_pass instance2_ip:instance2_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } 2 for when omitted from server { ... location ~ ^/(status1|ping1)$ { access_log off; fastcgi_pass instance1_ip:instance1_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ ^/(status2|ping2)$ { access_log off; fastcgi_pass instance2_ip:instance2_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } 3 or server { ... location ~ ^/(status1|ping1)$ { access_log off; fastcgi_pass instance1_ip:instance1_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ ^/(status2|ping2)$ { access_log off; fastcgi_pass instance2_ip:instance2_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } 4.
Unix socketsIf your PHP-FPM installation uses unix sockets, you have to use the below syntax for server { ... location ~ ^/(status1|ping1)$ { access_log off; fastcgi_pass instance1_ip:instance1_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ ^/(status2|ping2)$ { access_log off; fastcgi_pass instance2_ip:instance2_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } 3, server { ... location ~ ^/(status1|ping1)$ { access_log off; fastcgi_pass instance1_ip:instance1_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ ^/(status2|ping2)$ { access_log off; fastcgi_pass instance2_ip:instance2_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } 4 and enable server { ... location ~ ^/(status1|ping1)$ { access_log off; fastcgi_pass instance1_ip:instance1_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ ^/(status2|ping2)$ { access_log off; fastcgi_pass instance2_ip:instance2_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } 0:
ParameterValueserver { ... location ~ ^/(status1|ping1)$ { access_log off; fastcgi_pass instance1_ip:instance1_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ ^/(status2|ping2)$ { access_log off; fastcgi_pass instance2_ip:instance2_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } 3server { ... location ~ ^/(status1|ping1)$ { access_log off; fastcgi_pass instance1_ip:instance1_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ ^/(status2|ping2)$ { access_log off; fastcgi_pass instance2_ip:instance2_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } 9server { ... location ~ ^/(status1|ping1)$ { access_log off; fastcgi_pass instance1_ip:instance1_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ ^/(status2|ping2)$ { access_log off; fastcgi_pass instance2_ip:instance2_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } 4php_fpm.d/conf.yaml1php_fpm.d/conf.yaml2php_fpm.d/conf.yaml3server { ... location ~ ^/(status1|ping1)$ { access_log off; fastcgi_pass instance1_ip:instance1_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ ^/(status2|ping2)$ { access_log off; fastcgi_pass instance2_ip:instance2_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } 0server { ... location ~ ^/(status1|ping1)$ { access_log off; fastcgi_pass instance1_ip:instance1_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ ^/(status2|ping2)$ { access_log off; fastcgi_pass instance2_ip:instance2_port; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } 1Note: With Autodiscovery, if the Agent runs in a separate container/task/pod, it doesn’t have access to the Unix sockets file of your FPM pool. It order to address this, run the Agent as a sidecar.