PHP-FPM est en effet capable de fournir un grand nombre d'informations très pertinentes sur son état via une requête HTTP, et cela dans différents formats.

Il faut pour cela attribuer une valeur, comme par exemple /status, à la directive pm.status_path de PHP-FPM via son fichier de configuration.

Une fois cela fait, ainsi qu'éventuellement un peu de configuration au niveau du serveur HTTP pour en limiter l'accès, il n'y a plus qu'à se rendre sur /status avec le navigateur de son choix pour obtenir un rapport sur l'état de PHP-FPM.

pool:                 mon_pool_qui_roxe
process manager:      dynamic
start time:           08/Jul/2013:16:15:13 +0200
start since:          163022
accepted conn:        69031
listen queue:         0
max listen queue:     0
listen queue len:     0
idle processes:       8
active processes:     84
total processes:      92
max active processes: 97
max children reached: 0

Cerise sur le gâteau, il est possible de passer des arguments à cette URL pour obtenir des informations supplémentaires et un format différent.

L'ajout de json, xml ou html permet ainsi d'avoir les données au format correspondant, tandis que l'ajout de full permet d'avoir un état de chacun des sous-processus actuellement actifs de PHP-FPM.

Et évidemment, ces arguments sont cumulables, et l'url /status?json&full permet donc d'avoir un rapport exhaustif de l'état du serveur au format JSON.

Une fois cela compris, il n'y a plus qu'à développer le script JavaScript capable d'exploiter ces informations.

Or, il se trouve qu'en m'amusant avec d3.js, j'ai découvert cubism.js qui permet justement de représenter ce type d'information sous une forme graphique très efficace, du moins une fois que l'on en a compris le principe.

Ainsi est né phpfpm.cubism.js qui est depuis aujourd'hui disponible sur github, même s'il ne s'agit que d'un MVP.

phpfpm.cubism.js

En effet, si le code est parfaitement fonctionnel en l'état, il ne répond pas encore totalement à mon cahier des charges puisqu'il ne gère pas encore les informations relatives aux sous-processus de PHP-FPM.

Cependant, il permet d'avoir très rapidement une idée précise de l'état d'un serveur PHP-FPM puisqu'il suffit d'accéder à l'URL correspondante pour commencer la collecte et l'affichage des données.

La documentation est de plus très succincte même si j'ai fais mon possible pour fournir les informations indispensables à sa mise en place qui est très rapide et n'est pas compliqué, loin s'en faut.

Et pour ceux qui se poserait la question, les graphiques dont le titre est préfixé par ~ permettent de visualiser le différentiel entre les informations collectées à l'instant t et celles obtenues à l'instant t - 1.