PHP-FPM status monitor via Elastic's libbeat
Go Python Makefile PHP

README.md

Phpfpmbeat

Build Status

The Beat for PHP-FPM monitoring.

As Go currently doesn't provide possibility to connect directly to FPM via FastCGI as a client, PHP-FPM must be configured to show its status via some webserver. Example for Nginx can be found here.

Feel free to fork, create merge requests and open issues. I had no experience with Go language previously, so there should be a lot of things to improve.

Requirements

Exported fields

Phpfpmbeat exports all pool information fields provided by PHP-FPM, except FPM start time. To make slow_requests counter work, enable request_slow_log feature in you FPM config.

Document sample:

{
  "@timestamp": "2017-01-12T01:08:26.889Z",
  "accepted_conn": 22,
  "active_processes": 1,
  "beat": {
    "hostname": "Valentins-iMac.local",
    "name": "Valentins-iMac.local",
    "version": "5.1.2"
  },
  "idle_processes": 1,
  "listen_queue": 0,
  "listen_queue_len": 128,
  "max_active_processes": 1,
  "max_children_reached": 0,
  "max_listen_queue": 0,
  "pool": "www",
  "process_manager": "dynamic",
  "slow_requests": 0,
  "start_since": 1730,
  "total_processes": 2,
  "type": "phpfpmbeat"
}

There is no support for per-process info for now.

Usage

To build the binary for Phpfpmbeat run the command below. This will generate a binary in the same directory with the name phpfpmbeat.

make

To run Phpfpmbeat with debugging output enabled, run:

./phpfpmbeat -c phpfpmbeat.yml -e -d "*"

To test Phpfpmbeat, run the following command:

make testsuite

alternatively:

make unit-tests
make system-tests
make integration-tests
make coverage-report

The test coverage is reported in the folder ./build/coverage/

To clean up the build directory and generated artifacts, run:

make clean

Thanks to

  • Elastic for their Beat creation tutorial
  • mrkschan for his nginxbeat, which I used as a prototype

TODOs

Integration tests using Docker (in Travis as well)