Monitoring

L'activité du plugin peut être surveillée en utilisant les logs de trace mysqlnd, les statistiques mysqlnd, les statistiques du plugin mysqlnd_ms, ainsi que des outils de déboggage PHP externes. L'utilisation des logs de trace devrait être limitée au débogage. Il est recommandé d'utiliser les statistiques du plugin pour la surveillance.

L'écriture d'une trace dans un log est une opération lente. Si vous utilisez un outil de débogage externe PHP, référez-vous au manuel utilisateur de ce dernier concernant les impacts sur les performances ainsi que le type d'informations collectées. Dans la plupart des cas, les outils de débogage externe PHP font des appels à la pile. Un appel à la pile, ou une trace dans les logs sont souvent plus difficiles à interpréter que les statistiques fournies par le plugin.

Les statistiques du plugin indiquent la fréquence d'utilisation d'un noeud du cluster (esclave ou maître), pourquoi le noeud a été utilisé, si les connexions paraisseuses ont été utilisées et si l'injection d'un identifiant global de transaction a été effectuée. Les informations de surveillance fournies permettent à l'utilisateur de vérifier les décisions du plugin et de prévoir les ressources de son cluster suivant leur utilisation. La fonction mysqlnd_ms_get_stats() est utilisée pour accéder aux statistiques. Reportez-vous aux descriptions des fonctions pour une liste des statistiques disponibles.

Les statistiques sont collectées pour chaque processus PHP. Leur scope se limite à un processus PHP. Suivant le modèle de déploiement PHP, un processus peut servir une ou plusieurs requêtes web. Si le modèle CGI est utilisé, un processus PHP ne sert qu'une requête web. Si le modèle FastCGI ou pre-fork serveur web est utilisé, un processus PHP sert habituellement plusieurs requêtes web ; idem dans le cas d'un serveur web threadé. Notez que les threads fonctionnant en parallèle peuvent mettre à jour les statistiques en parallèle. Aussi, si un modèle de déploiement PHP threadé est utilisé, les statistiques peuvent être modifiées par plus d'un script à la fois. Un script ne peut pas être sûr de ne voir que ces propres modifications sur les statistiques.

Exemple #1 Vérification de l'activité du plugin sur un modèle de déploiement non-threadé

<?php
/* La balance de charge suit les règles de la section "myapp" du fichier de configuration du plugin */
$mysqli = new mysqli("myapp", "username", "password", "database");
if (mysqli_connect_errno())
  /* Bien évidemment, votre gestionnaire d'erreur est meilleur... */
  die(sprintf("[%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()));

$stats_before = mysqlnd_ms_get_stats();
if ($res = $mysqli->query("SELECT 'Read request' FROM DUAL")) {
  var_dump($res->fetch_all());
}
$stats_after = mysqlnd_ms_get_stats();
if ($stats_after['use_slave'] <= $stats_before['use_slave']) {
  echo "Suivant les statistiques, la requête en lecture n'a pas été exécutée sur un esclave !";
}
?>

Les statistiques sont aggrégées pour les activités de tous les plugins, et toutes les connexions gérées par le plugin. Il n'est pas possible de savoir le nombre de contribution aux statistiques d'un gestionnaire de connexion en particulier.

L'utilisation de la fonction register_shutdown_function() ou de la directive de configuration auto_append_file de PHP est une façon simple de copier les statistiques dans, par exemple, un fichier de logs, lorsque le script se termine. Au lieu d'utiliser un fichier de logs, il est également possible d'envoyer les statistiques vers un outil de surveillance externe pour l'enregistrement et le rendu.

Exemple #2 Enregistrement des statistiques lorsque le script se termine

<?php
function check_stats() {
  $msg = str_repeat("-", 80) . "\n";
  $msg .= var_export(mysqlnd_ms_get_stats(), true) . "\n";
  $msg .= str_repeat("-", 80) . "\n";
  error_log($msg);
}
register_shutdown_function("check_stats");
?>

LoadingChargement en cours