Il s'agit de la commande pt-stalkp qui peut être exécutée dans le fournisseur d'hébergement gratuit OnWorks en utilisant l'un de nos multiples postes de travail en ligne gratuits tels que Ubuntu Online, Fedora Online, l'émulateur en ligne Windows ou l'émulateur en ligne MAC OS
PROGRAMME:
Nom
pt-stalk - Collecte des données médico-légales sur MySQL lorsque des problèmes surviennent.
SYNOPSIS
Utilisation : pt-tige [OPTIONS]
pt-stalk attend qu'une condition de déclenchement se produise, puis collecte des données pour aider à diagnostiquer
problèmes. L'outil est conçu pour s'exécuter en tant que démon avec des privilèges root, afin que vous puissiez
diagnostiquer des problèmes intermittents que vous ne pouvez pas observer directement. Vous pouvez également l'utiliser pour
exécuter une commande personnalisée ou collecter des données à la demande sans attendre que le déclencheur
se produire.
LES RISQUES
Percona Toolkit est mature, éprouvé dans le monde réel et bien testé, mais toutes les bases de données
outils peuvent présenter un risque pour le système et le serveur de base de données. Avant d'utiliser cet outil,
s'il te plaît:
· Lire la documentation de l'outil
· Revoir les "BUGS" connus de l'outil
· Tester l'outil sur un serveur hors production
· Sauvegardez votre serveur de production et vérifiez les sauvegardes
DESCRIPTION
Parfois, un problème se produit rarement et pendant une courte période, vous ne donnant aucune chance de voir
le système quand cela se produit. Comment résoudre les problèmes intermittents de MySQL lorsque vous ne pouvez pas
les observer ? C'est pourquoi pt-stalk existe. En plus de l'utiliser quand il y a un connu
problème sur vos serveurs, c'est une bonne idée d'exécuter pt-stalk tout le temps, même lorsque vous
pense que tout va bien. Vous apprécierez les données qu'il collecte lorsqu'un problème survient,
car les problèmes tels que les blocages MySQL ou les pics d'activité ne laissent généralement aucune preuve
à utiliser dans l'analyse des causes profondes.
pt-stalk fait deux choses : il surveille un serveur MySQL et attend une condition de déclenchement pour
se produisent, et il collecte des données de diagnostic lorsque ce déclencheur se produit. Pour éviter les faux positifs
causé par des problèmes de courte durée, la condition de déclenchement doit être vraie au moins "--cycles"
fois avant qu'un "--collect" ne soit déclenché.
Pour utiliser efficacement pt-stalk, vous devez définir un bon déclencheur. Un bon déclencheur est
suffisamment sensible pour tirer de manière fiable en cas de problème, afin que vous ne manquiez aucune chance
Résoudre des problèmes. D'un autre côté, un bon déclencheur n'est pas sujet aux faux positifs, donc
vous ne collectez pas d'informations lorsque le serveur fonctionne normalement.
Les déclencheurs les plus fiables pour MySQL ont tendance à être le nombre de connexions au serveur,
et le nombre de requêtes exécutées simultanément. Ceux-ci sont disponibles dans le SHOW GLOBAL
Commande STATUS en tant que Threads_connected et Threads_running. Parfois, Threads_connected est
pas un indicateur fiable de problème, mais Threads_running l'est généralement. Votre travail, en tant que
l'utilisateur de l'outil, est de définir une condition de déclenchement appropriée pour l'outil. Choisir
soigneusement, car la qualité de vos résultats dépendra du déclencheur que vous choisissez.
Vous définissez le déclencheur avec les "--function", "--variable", "--threshold" et "--cycles"
option. Les valeurs par défaut de ces options définissent un déclencheur raisonnable, mais vous devez
ajustez-les ou modifiez-les en fonction de votre système et de vos besoins particuliers.
Par défaut, l'outil pt-stalk surveille MySQL pour toujours jusqu'à ce que le déclencheur se produise, puis il collecte
données de diagnostic pendant un certain temps, puis se met en veille pour éviter de collecter des données à plusieurs reprises si
le déclencheur reste vrai. L'ordre général des opérations est :
bien que vrai; faire
if --variable from --function > --threshold ; alors
cycles_true++
si cycles_true >= --cycles ; alors
--notifier-par-e-mail
si --collect; ensuite
si --disk-bytes-free et --disk-pct-free ok ; ensuite
(--collect pour --run-time secondes) &
fi
rm fichiers dans --dest antérieurs à --retention-time
fi
itérer++
cycles_true=0
fi
si iter < --iterations ; alors
sommeil --sommeil secondes
d'autre
pause
fi
d'autre
si iter < --iterations ; alors
sommeil -- intervalle de secondes
d'autre
pause
fi
fi
fait
rm old --dest fichiers antérieurs à --retention-time
si le processus --collect est toujours en cours d'exécution ; alors
attendre jusqu'à --run-time * 3 secondes
tuer tous les processus restants --collect
fi
Les données de diagnostic sont écrites dans des fichiers dont les noms commencent par un horodatage, vous pouvez donc
distinguer les échantillons les uns des autres au cas où l'outil collecte des données plusieurs fois. Les
L'outil pt-sift est conçu pour vous aider à parcourir et à analyser les échantillons de données résultants.
Bien que cela semble assez simple, dans la pratique, il existe un certain nombre de subtilités, telles que
détecter quand le disque commence à se remplir afin que l'outil ne provoque pas le serveur
de manquer d'espace disque. Cet outil gère ces types de problèmes potentiels, c'est donc un
bonne idée d'utiliser cet outil au lieu d'écrire quelque chose à partir de zéro et éventuellement
certains des dangers que cet outil est conçu pour éviter.
CONFIGURATION
Vous pouvez utiliser les fichiers de configuration standard de Percona Toolkit pour définir les options de la ligne de commande.
Vous voudrez probablement exécuter l'outil en tant que démon et personnaliser au moins le
"--seuil". Voici un exemple de fichier de configuration pour le déclenchement lorsqu'il y a plus de
20 requêtes exécutées simultanément :
démoniser
seuil=20
Si vous n'exécutez pas l'outil en tant que root, vous devrez alors spécifier plusieurs options, telles que
"--pid", "--log" et "--dest", sinon l'outil échouera probablement à démarrer.
OPTIONS
--demander-passer
Demander un mot de passe lors de la connexion à MySQL.
--collecter
par défaut : oui ; négociable : oui
Collectez les données de diagnostic lorsque le déclencheur se produit. Spécifiez "--no-collect" pour que le
l'outil surveille le système mais ne collecte pas de données.
Voir aussi "--stalk".
--collect-gdb
Collectez les traces de pile GDB. Ceci est réalisé en se connectant à MySQL et en imprimant la pile
traces de tous les fils. Cela va geler le serveur pendant un certain temps, allant
d'une seconde environ à beaucoup plus longtemps sur des systèmes très occupés avec beaucoup de mémoire et de nombreux
threads sur le serveur. Pour cette raison, il est désactivé par défaut. Cependant, si vous
essayez de diagnostiquer un blocage ou un blocage du serveur, le gel du serveur ne provoque aucun
dommages supplémentaires, et les traces de la pile peuvent être vitales pour le diagnostic.
En plus de geler le serveur, il existe également un risque de plantage du serveur ou
fonctionne mal après que GDB s'en détache.
--collect-oprofile
Collecter des données de profil. Ceci est réalisé en démarrant une session oprofile, en la laissant
exécuter pendant le temps de collecte, puis arrêter et enregistrer les données de profil résultantes
dans l'emplacement par défaut du système. Veuillez lire la documentation du profil de votre système pour
en savoir plus à ce sujet.
--collect-strace
Collecter les données de strace. Ceci est réalisé en attachant strace au serveur, qui
faites-le fonctionner très lentement jusqu'à ce que la strace se détache. Les mêmes précautions s'appliquent que celles
répertorié dans --collect-gdb. Vous ne devez pas activer cette option avec
--collect-gdb, car GDB et strace ne peuvent pas s'attacher au processus serveur
en même temps.
--collect-tcpdump
Collectez les données tcpdump. Cette option permet à tcpdump de capturer tout le trafic sur tous
interfaces pour le port sur lequel MySQL écoute. Vous pouvez plus tard utiliser pt-query-
digest pour décoder le protocole MySQL et en extraire un journal du trafic de requêtes.
--config
type : chaîne
Lisez cette liste de fichiers de configuration séparés par des virgules. Si spécifié, cela doit être le premier
option sur la ligne de commande.
--cycles
tapez : entier ; par défaut : 5
Combien de fois "--variable" doit être supérieur à "--threshold" avant le déclenchement
"--collecter". Cela permet d'éviter les faux positifs et rend la condition de déclenchement moins
susceptible de se déclencher lorsque le problème se rétablit rapidement.
--démoniser
Démoniser l'outil. Cela amène l'outil à passer en arrière-plan et à enregistrer ses
sortie comme spécifié dans --log.
--defaults-fichier
forme courte : -F ; type : chaîne
Ne lisez que les options mysql du fichier donné. Vous devez donner un chemin d'accès absolu.
--dest
type : chaîne ; par défaut : /var/lib/pt-stalk
Où enregistrer les données de diagnostic de "--collect". Chaque fois que l'outil collecte des données, il
écrit dans un nouvel ensemble de fichiers, nommés avec l'horodatage système actuel.
--disk-bytes-gratuit
type : taille ; par défaut : 100 M
Ne pas "--collect" si le disque a moins d'espace libre. Cela empêche le
outil de remplir le disque avec des données de diagnostic.
Si le répertoire "--dest" contient un échantillon de données précédemment capturé, l'outil
mesurer sa taille et l'utiliser comme une estimation de la quantité de données susceptibles d'être recueillies
cette fois aussi. Il sera alors encore plus pessimiste, et refusera de collecter
données à moins que le disque ne dispose de suffisamment d'espace libre pour contenir l'échantillon et avoir toujours le
quantité d'espace libre souhaitée. Par exemple, si vous souhaitez 100 Mo d'espace libre et le
l'échantillon de diagnostic précédent a consommé 100 Mo, l'outil ne collectera aucune donnée à moins que le
le disque a 200 Mo d'espace libre.
Les suffixes de valeur de taille valides sont k, M, G et T.
--disk-pct-gratuit
tapez : entier ; par défaut : 5
Ne pas "--collect" si le disque a moins de ce pourcentage d'espace libre. Cela empêche
l'outil de remplir le disque avec des données de diagnostic.
Cette option fonctionne de manière similaire à "--disk-bytes-free" mais spécifie une marge en pourcentage
de sécurité au lieu d'une marge de sécurité d'octets. L'outil honore les deux options et
ne collecte aucune donnée tant que les deux marges ne sont pas satisfaites.
--fonction
type : chaîne ; par défaut : état
Que surveiller pour le déclencheur. La valeur par défaut regarde "SHOW GLOBAL STATUS", mais
vous pouvez également regarder "SHOW PROCESSLIST" et spécifier un fichier avec votre propre code personnalisé.
Cette fonction fournit la valeur de "--variable", qui est ensuite comparée à
"--threshold" pour voir si la condition de déclenchement est remplie. Des options supplémentaires peuvent être
également requis ; voir ci-dessous. Les valeurs possibles sont :
· statut
Regardez "SHOW GLOBAL STATUS" pour le déclencheur. La valeur de "--variable" alors
définit quel compteur d'état est le déclencheur.
· liste des processus
Regardez "SHOW FULL PROCESSLIST" pour le déclencheur. La valeur de déclenchement est le nombre de
processus dont la colonne "--variable" correspond à l'option "--match". Par exemple, pour
déclencher "--collect" lorsque plus de 10 processus sont dans l'état "statistiques",
spécifier:
--function liste de processus \
--variable État \
--statistiques de correspondance \
--seuil 10
De plus, vous pouvez spécifier un fichier qui contient votre fonction de déclenchement personnalisée,
écrit en script shell Unix. Cela peut être un wrapper qui exécute tout ce que vous souhaitez.
Si l'argument de "--function" est un fichier, il est prioritaire sur
fonctions, donc s'il y a un fichier dans le répertoire de travail nommé "status" ou
"processlist", alors l'outil utilisera ce fichier même s'il s'agit de valeurs intégrées valides.
Le fichier fonctionne en fournissant une fonction appelée "trg_plugin", et l'outil simplement
source le fichier et exécute la fonction. Par exemple, le fichier peut contenir :
trg_plugin() {
mysql $EXT_ARGV -e "AFFICHER L'ÉTAT INNODB DU MOTEUR" \
| grep -c "a attendu à"
}
Cet extrait comptera le nombre d'attentes mutex dans InnoDB. Il illustre le
principe général : la fonction doit sortir un nombre, qui est ensuite comparé à
"--seuil" comme d'habitude. La variable $EXT_ARGV contient les options MySQL mentionnées
dans le "SYNOPSIS" ci-dessus.
Le fichier ne doit pas modifier les variables globales existantes de l'outil. Préfixe n'importe quel fichier-
des variables globales spécifiques avec "PLUGIN_" ou les rendre locales.
--Aidez-moi
Imprimer l'aide et quitter.
--hôte
forme courte : -h ; type : chaîne
Hôte auquel se connecter.
--intervalle
tapez : entier ; par défaut : 1
À quelle fréquence vérifier si le déclencheur est vrai, en secondes.
--itérations
tapez : entier
Combien de fois pour "--collecter" les données de diagnostic. Par défaut, l'outil s'exécute pour toujours et
collecte des données à chaque fois que le déclencheur se produit. Spécifiez "--iterations" pour collecter des données a
nombre limité de fois. Cette option est également utile avec "--no-stalk" pour collecter des données
une fois et quitter, par exemple.
--Journal
type : chaîne ; par défaut : /var/log/pt-stalk.log
Imprimez toutes les sorties dans ce fichier une fois démonisé.
--rencontre
type : chaîne
Le modèle à utiliser lorsque vous regardez SHOW PROCESSLIST. Voir "--function" pour plus de détails.
--notifier-par-e-mail
type : chaîne
Envoyez un e-mail à ces adresses pour chaque "--collect".
--le mot de passe
forme courte : -p ; type : chaîne
Mot de passe à utiliser lors de la connexion. Si le mot de passe contient des virgules, elles doivent être échappées
avec une barre oblique inverse : "exam\,ple"
--pid
type : chaîne ; par défaut : /var/run/pt-stalk.pid
Créez le fichier PID donné. L'outil ne démarre pas si le fichier PID existe déjà et
le PID qu'il contient est différent du PID actuel. Cependant, si le fichier PID
existe et que le PID qu'il contient n'est plus en cours d'exécution, l'outil écrasera le PID
fichier avec le PID actuel. Le fichier PID est supprimé automatiquement à la fermeture de l'outil.
--brancher
type : chaîne
Chargez un plugin pour vous connecter à l'outil et étendre ses fonctionnalités. Le fichier spécifié
n'a pas besoin d'être exécutable, et sa première ligne n'a pas besoin d'être une ligne shebang. Ce
n'a besoin de définir qu'une ou plusieurs de ces fonctions Bash :
avant_traîner
Appelé avant de traquer.
avant_collecter
Appelé lorsque le déclencheur se produit, avant d'exécuter un sous-processus "--collect" dans le
fond.
après_collecte
Appelé après avoir exécuté un processus de collecte. Le PID du processus collecteur est
passé comme premier argument. Ce crochet est appelé avant "after_collect_sleep".
après_collect_sleep
Appelé après avoir dormi "--sleep" secondes pour que le processus de collecte se termine. Cette
hook est appelé après "after_collect".
après_intervalle_sommeil
Appelé après avoir dormi "--interval" secondes après chaque vérification de déclenchement.
après_stalk
Appelé après avoir harcelé. Puisque pt-stalk traque pour toujours par défaut, ce crochet est
appelé uniquement si "--iterations" est spécifié.
Par exemple, un plugin très simple qui touche un fichier lorsque "--collect" est déclenché :
avant_collecter() {
toucher /tmp/foo
}
Étant donné que le plugin est entièrement sourcé (importé) dans l'espace de noms de l'outil, soyez
attention à ne pas définir d'autres fonctions ou variables globales qui existent déjà dans le
outil. Vous devez préfixer toutes les fonctions spécifiques au plugin et les variables globales avec
"plugin_" ou "PLUGIN_".
Les plugins ont accès à toutes les options de ligne de commande mais ils ne doivent pas les modifier. Chaque
option est une variable globale comme $OPT_DEST qui correspond à "--dest". Par conséquent,
la variable globale pour chaque option de ligne de commande est "OPT_" plus le nom de l'option dans tous
majuscules avec tirets remplacés par des traits de soulignement.
Les plugins peuvent arrêter l'outil en définissant la variable globale "OKTORUN" sur 1. Dans ce
cas, la variable globale "EXIT_REASON" doit également être définie pour indiquer pourquoi l'outil
a été arrêté.
Les auteurs de plugins doivent garder à l'esprit que le préfixe de destination du fichier actuellement utilisé
doit être accessible via la variable $prefix, plutôt que $OPT_PREFIX.
--Port
forme courte : -P ; tapez : entier
Numéro de port à utiliser pour la connexion.
--préfixe
type : chaîne
Le préfixe du nom de fichier pour les échantillons de diagnostic. Par défaut, tous les fichiers créés par le même
L'instance "--collect" a un préfixe d'horodatage basé sur l'heure locale actuelle, comme
"2011_12_06_14_02_02", qui est le 6 décembre 2011 à 14:02:02.
--temps de rétention
tapez : entier ; par défaut : 30
Nombre de jours pour conserver les échantillons collectés. Tous les échantillons plus anciens seront
purgé.
--Durée
tapez : entier ; par défaut : 30
Combien de temps pour "--collecter" les données de diagnostic lorsque le déclencheur se produit. La valeur est dans
secondes et ne doit pas dépasser "--sleep". Il n'est généralement pas nécessaire de
change ça; si les 30 secondes par défaut ne collectent pas assez de données, une exécution plus longue est
probablement pas utile car le système ou le serveur MySQL est probablement trop occupé pour répondre.
En fait, dans de nombreux cas, une période de collecte plus courte est appropriée.
Cette valeur est utilisée deux autres fois. Après la collecte, le sous-processus de collecte
attendez encore "--run-time" secondes pour que ses commandes se terminent. Certaines commandes peuvent prendre
pendant un certain temps si le système fonctionne très lentement (ce qui peut probablement être le cas étant donné qu'un
la collecte a été déclenchée). Étant donné que les fichiers vides sont supprimés, l'attente supplémentaire donne
commandes le temps de terminer et d'écrire leurs données. La valeur est potentiellement réutilisée
juste avant la sortie de l'outil pour attendre à nouveau la fin des sous-processus de collecte. Dans
dans la plupart des cas, cela ne se produira pas en raison de l'attente supplémentaire susmentionnée. Si cela arrive,
l'outil enregistrera "En attente de N secondes pour que les sous-processus se terminent..." où N est
trois fois "--run-time". Dans les deux cas, après avoir attendu, l'outil tue tous ses
sous-processus.
--dormir
tapez : entier ; par défaut : 300
Combien de temps pour dormir après "--collect". Cela empêche l'outil de déclencher
en continu, ce qui peut poser problème si le processus de collecte est intrusif. Ce
empêche également de remplir le disque ou de collecter trop de données à analyser raisonnablement.
--sommeil-collecte
tapez : entier ; par défaut : 1
Combien de temps pour dormir entre les cycles de boucle de collecte. Ceci est utile avec "--no-stalk" pour
faire de longues collections. Par exemple, pour collecter des données toutes les minutes pendant une heure, spécifiez :
"--no-stalk --run-time 3600 --sleep-collect 60".
--prise
formes courtes; type : chaîne
Fichier socket à utiliser pour la connexion.
--traquer
par défaut : oui ; négociable : oui
Surveillez le serveur et attendez que le déclencheur se produise. Spécifiez "--no-stalk" à collecter
données de diagnostic immédiatement, c'est-à-dire sans attendre que le déclencheur se produise. Tu
vous voulez probablement aussi spécifier des valeurs pour "--interval", "--iterations" et "--sleep".
Par exemple, pour collecter immédiatement des données pendant 1 minute puis quitter, spécifiez :
--no-stalk --run-time 60 --itérations 1
"--cycles", "--daemonize", "--log" et "--pid" n'ont aucun effet avec "--no-stalk".
Les options de sauvegarde, comme "--disk-bytes-free" et "--disk-pct-free", sont toujours
respecté.
Voir aussi "--collect".
--seuil
tapez : entier ; par défaut : 25
La valeur maximale acceptable pour "--variable". "--collect" est déclenché lorsque le
la valeur de "--variable" est supérieure à "--threshold" pour "--cycles" plusieurs fois.
Actuellement, il n'y a aucun moyen de définir un seuil inférieur pour vérifier une "--variable"
valeur trop faible.
Voir aussi "--fonction".
--utilisateur
forme courte : -u ; type : chaîne
Utilisateur pour la connexion si ce n'est pas l'utilisateur actuel.
--variable
type : chaîne ; par défaut : Threads_running
La variable à comparer avec "--threshold". Voir aussi "--fonction".
--verbeux
tapez : entier ; par défaut : 2
Imprimez plus ou moins d'informations pendant l'exécution. Étant donné que l'outil est conçu pour être un
démon de longue durée, le niveau de verbosité par défaut n'imprime que le plus important
informations. Si vous exécutez l'outil de manière interactive, vous souhaiterez peut-être utiliser un
niveau de verbosité.
IMPRESSIONS DE NIVEAU
===== ======================================
Erreurs 0
1 Avertissements
2 déclencheurs correspondants et informations de collecte
3 déclencheurs non correspondants
--version
Imprimer la version de l'outil et quitter.
ENVIRONNEMENT
Cet outil ne nécessite aucune variable d'environnement pour la configuration, bien qu'il puisse être
influencé à travailler différemment par plusieurs variables. Gardez à l'esprit que ce sont
paramètres experts et ne doit pas être utilisé dans la plupart des cas.
Plus précisément, les variables qui peuvent être définies sont :
CMD_GDB
CMD_IOSTAT
CMD_MPSTAT
CMD_MYSQL
CMD_MYSQLADMIN
CMD_OPCONTROL
CMD_OPREPORT
CMD_PMAP
CMD_STRACE
CMD_SYSCTL
CMD_TCPDUMP
CMD_VMSTAT
Par exemple, lors de la collecte, iostat est appelé avec un argument -dx, mais parce que vous avez
une partition NFS, vous avez également besoin de l'indicateur -n. Au lieu de modifier la source, vous pouvez
appeler pt-stalk comme
CMD_IOSTAT="iostat -n" pt-tige ...
qui fera exactement ce dont vous avez besoin. Combiné avec les crochets de plugin, cela vous donne un
contrôle fin de ce que fait l'outil.
SYSTÈME EXIGENCES
Cet outil nécessite Bash v3 ou plus récent. Certaines options nécessitent d'autres programmes :
"--collect-gdb" nécessite "gdb"
"--collect-oprofile" nécessite "opcontrol" et "opreport"
"--collect-strace" nécessite "strace"
"--collect-tcpdump" nécessite "tcpdump"
Utilisez pt-stalkp en ligne en utilisant les services onworks.net