Analyseur de journaux PostgreSQL avec rapports et graphiques détaillés.
Arguments :
logfile peut désigner un fichier journal, une liste de fichiers ou une commande
shell qui renvoie une liste de fichiers. Pour lire le contenu sur stdin,
utilisez - comme nom de fichier. L’entrée sur stdin ne fonctionne pas avec csvlog.
Options :
-a | --average minutes : nombre de minutes par intervalle des graphiques de
moyenne des requêtes et des connexions. Valeur par défaut : 5 minutes.
-A | --histo-average min: nombre de minutes par intervalle des histogrammes
de requêtes. Valeur par défaut : 60 minutes.
-b | --begin datetime : date/heure de début des données à analyser dans le
journal (horodatage ou heure).
-c | --dbclient host : ne rapporter que les entrées de l’hôte client
indiqué.
-C | --nocomment : supprimer des requêtes les commentaires tels que
/* ... */.
-d | --dbname database : ne rapporter que les entrées de la base de données
indiquée.
-D | --dns-resolv : remplacer les adresses IP clientes par leur nom
DNS. Attention, cela peut fortement ralentir pgBadger.
-e | --end datetime : date/heure de fin des données à analyser dans le
journal (horodatage ou heure).
-E | --explode : scinder le rapport principal en un rapport par base
de données. Les informations globales sans lien avec une base de données
sont ajoutées au rapport de la base postgres.
-f | --format logtype : valeurs possibles : syslog, syslog2, stderr,
jsonlog, csv, pgbouncer, logplex, rds et redshift. À utiliser si pgBadger
ne détecte pas le format du journal.
-G | --nograph : désactiver les graphiques dans la sortie HTML. Les
graphiques sont activés par défaut.
-h | --help : afficher cette aide puis quitter.
-H | --html-outdir path: répertoire des rapports HTML en mode incrémentiel.
Les fichiers binaires restent dans le répertoire défini par -O, --outdir.
-i | --ident name : nom du programme utilisé comme identifiant syslog.
Valeur par défaut : postgres.
-I | --incremental : activer le mode incrémentiel ; les rapports
quotidiens sont générés dans des répertoires séparés. --outdir doit être
défini.
-j | --jobs number : nombre de tâches simultanées pour un seul fichier
journal. Une seule tâche par défaut ou avec le format csvlog.
-J | --Jobs number : nombre de fichiers journaux à analyser en
parallèle. Un seul fichier à la fois par défaut.
-l | --last-parsed file: permettre l’analyse incrémentielle en enregistrant
la dernière date/heure et la dernière ligne analysées. Utile pour examiner
les erreurs depuis la dernière exécution ou produire un rapport quotidien
sur un journal à rotation hebdomadaire.
-L | --logfile-list file: fichier contenant la liste des journaux à
analyser.
-m | --maxlength size : longueur maximale d’une requête ; les requêtes plus
longues sont tronquées. Valeur par défaut : 100000.
-M | --no-multiline : ne pas collecter les instructions multilignes afin
d’éviter du contenu parasite, notamment les erreurs qui produisent un
rapport énorme.
-N | --appname name : ne rapporter que les entrées de l’application
indiquée.
-o | --outfile filename: nom du fichier de sortie. Selon le format :
out.html, out.txt, out.bin ou out.json par défaut. Peut être répété pour
produire plusieurs formats. JSON nécessite le module Perl JSON::XS.
Utiliser - comme nom de fichier pour écrire sur stdout.
-O | --outdir path : répertoire où enregistrer les fichiers de sortie.
-p | --prefix string : valeur exacte de log_line_prefix dans
postgresql.conf. À utiliser uniquement si le préfixe diffère des formes
standard documentées, par exemple avec des champs supplémentaires d’IP
cliente ou d’application. DOIT contenir les séquences temporelles (%t, %m
ou %n) et de processus (%p ou %c). Voir les exemples ci-dessous.
-P | --no-prettify : désactiver la mise en forme des requêtes SQL.
-q | --quiet : ne rien écrire sur stdout, pas même une barre de
progression.
-Q | --query-numbering : numéroter les requêtes avec --dump-all-queries ou
--normalized-only.
-r | --remote-host ip : hôte où exécuter cat sur le journal distant afin de
l’analyser localement.
-R | --retention N : nombre de semaines à conserver en mode
incrémentiel. Valeur par défaut : 0, désactivé. Les anciens répertoires de
semaines et de jours sont supprimés automatiquement du répertoire de
sortie.
-s | --sample number : nombre d’exemples de requêtes à conserver. Valeur
par défaut : 3.
-S | --select-only : ne rapporter que les requêtes SELECT.
-t | --top number : nombre de requêtes à conserver/afficher. Valeur par
défaut : 20.
-T | --title string : modifier le titre de la page HTML du rapport.
-u | --dbuser username : ne rapporter que les entrées de l’utilisateur
indiqué.
-U | --exclude-user username : exclure du rapport les entrées de
l’utilisateur indiqué. Peut être répété.
-v | --verbose : activer le mode détaillé ou de débogage. Désactivé
par défaut.
-V | --version : afficher la version de pgBadger puis quitter.
-w | --watch-mode : ne rapporter que les erreurs, comme logwatch.
-W | --wide-char : encoder les requêtes de la sortie HTML en UTF8 pour
éviter le message Perl "Wide character in print".
-x | --extension : format de sortie : text, html, bin ou json. Valeur
par défaut : html.
-X | --extra-files : en mode incrémentiel, écrire CSS et JS dans des
fichiers séparés du répertoire de sortie.
-z | --zcat exec_path : chemin complet du programme zcat. À utiliser si
zcat, bzcat ou unzip n’est pas dans votre PATH.
-Z | --timezone +/-XX : décalage horaire par rapport à GMT pour ajuster les
dates/heures des graphiques JavaScript. Entier, par exemple 2, ou nombre
décimal, par exemple 2.5.
--anonymize : masquer tous les littéraux des requêtes afin de
cacher les données confidentielles.
--charset : jeu de caractères HTML à utiliser. Valeur par
défaut : utf-8.
--command CMD : commande qui fournit les entrées de journal sur
stdin. pgBadger ouvre un tube vers cette commande et analyse les entrées
qu’elle produit.
--csv-separator : séparateur de champs CSV. Valeur par défaut : ,
--day-report YYYY-MM-DD: générer un rapport HTML pour le jour indiqué.
Nécessite les répertoires de sortie incrémentielle et tous les fichiers de
données binaires requis.
--disable-autovacuum : ne pas générer le rapport d’autovacuum.
--disable-checkpoint : ne pas générer le rapport de
checkpoint/restartpoint.
--disable-connection : ne pas générer le rapport de connexions.
--disable-error : ne pas générer le rapport d’erreurs.
--disable-hourly : ne pas générer le rapport horaire.
--disable-lock : ne pas générer le rapport de verrous.
--disable-query : ne pas générer les rapports de requêtes (les plus
lentes, les plus fréquentes, par utilisateur, par base de données, etc.).
--disable-session : ne pas générer le rapport de sessions.
--disable-temporary : ne pas générer le rapport de fichiers temporaires.
--disable-type : ne pas générer le rapport des requêtes par type,
base de données ou utilisateur.
--dump-all-queries : émettre toutes les requêtes du journal après avoir
remplacé les paramètres liés à leur position respective.
--dump-raw-csv : analyser le journal et exporter les informations au
format CSV. Aucun autre traitement ni rapport.
--enable-checksum : ajouter une somme md5 sous chaque rapport de
requête.
--exclude-appname name : exclure du rapport les entrées de l’application
indiquée, par exemple "pg_dump". Peut être répété.
--exclude-client name : exclure les entrées de l’adresse IP cliente
indiquée. Peut être répété.
--exclude-db name : exclure du rapport les entrées de la base de
données indiquée, par exemple "postgres". Peut être répété.
--exclude-file filename: fichier contenant les expressions régulières des
requêtes à exclure du rapport. Une expression par ligne.
--exclude-line regex : exclure les entrées de journal correspondant à
l’expression régulière. Peut être répété.
--exclude-query regex : exclure les requêtes correspondant à l’expression
régulière, par exemple "^(VACUUM|COMMIT)". Peut être répété.
--exclude-time regex : exclure les horodatages correspondant à
l’expression régulière, par exemple "2013-04-12 .*". Peut être répété.
--explain-url URL : remplacer l’URL de l’outil graphique EXPLAIN.
Valeur par défaut : https://explain.depesz.com/
--histogram-query VAL : utiliser des bornes personnalisées pour
l’histogramme des durées de requête. Bornes par défaut en millisecondes :
0,1,5,10,25,50,100,500,1000,10000
--histogram-session VAL: utiliser des bornes personnalisées pour
l’histogramme des durées de session. Bornes par défaut en millisecondes :
0,500,1000,30000,60000,600000,1800000,3600000,28800000
--include-file filename: fichier contenant les expressions régulières des
requêtes à inclure dans le rapport. Une expression par ligne.
--include-query regex : exclure les requêtes qui ne correspondent pas à
l’expression régulière. Peut être répété, par exemple "(tbl1|tbl2)".
--include-pid PID : ne rapporter que les événements liés au PID de
session (%p). Peut être répété.
--include-session ID : ne rapporter que les événements liés à
l’identifiant de session (%c). Peut être répété.
--include-time regex : inclure uniquement les horodatages correspondant à
l’expression régulière, par exemple "2013-04-12 .*". Peut être répété.
--iso-week-number : en mode incrémentiel, faire commencer les semaines
le lundi selon ISO 8601, numérotées de 01 à 53. La semaine 1 est la
première contenant au moins 4 jours de la nouvelle année.
--keep-comments : conserver les commentaires dans les requêtes
normalisées, afin de distinguer des requêtes ayant la même forme
normalisée.
--journalctl command : remplacer le fichier journal PostgreSQL par un
appel à journalctl, par exemple :
journalctl -u postgresql-9.5
--log-duration : forcer pgBadger à associer les entrées produites
par log_duration = on et log_statement = 'all'.
--log-timezone +/-XX : décalage horaire par rapport à GMT pour ajuster les
dates/heures du journal avant analyse. Cela complique les recherches par
date/heure. Entier, par exemple 2, ou nombre décimal, par exemple 2.5.
--month-report YYYY-MM : générer un rapport HTML cumulatif pour le mois
indiqué. Nécessite les répertoires de sortie incrémentielle et tous les
fichiers de données binaires requis.
--noexplain : ne pas traiter les lignes générées par
auto_explain.
--no-fork : ne créer aucun processus fils, à des fins de
débogage.
--no-process-info : ne pas modifier le titre du processus pour
identifier pgBadger, car certains systèmes ne le prennent pas en charge.
--no-progressbar : désactiver la barre de progression.
--noreport : ne générer aucun rapport en mode incrémentiel.
--no-week : ne pas générer les rapports hebdomadaires en mode
incrémentiel, s’ils prennent trop de temps.
--normalized-only : émettre uniquement les requêtes normalisées dans
out.txt.
--pgbouncer-only : afficher uniquement les menus liés à PgBouncer dans
l’en-tête.
--pid-dir path : répertoire où stocker le fichier PID. Valeur par
défaut : /tmp
--pid-file file : nom du fichier PID qui contrôle les exécutions
simultanées de pgBadger. Valeur par défaut : pgbadger.pid
--pie-limit num : regrouper en une somme les portions de camembert
inférieures à num%.
--prettify-json : mettre en forme la sortie JSON pour améliorer sa
lisibilité.
--rebuild : reconstruire tous les rapports HTML des répertoires
de sortie incrémentielle contenant des données binaires.
--start-monday : en mode incrémentiel, les semaines commencent par
défaut le dimanche. Cette option les fait commencer le lundi.
--tempdir DIR : répertoire des fichiers temporaires. Valeur par
défaut : File::Spec->tmpdir() || '/tmp'
pgBadger est capable d’analyser un fichier journal distant en utilisant une connexion SSH sans mot de passe.
Utilisez -r ou –remote-host pour définir l’adresse IP ou le nom d’hôte du serveur. Il existe également plusieurs options supplémentaires pour contrôler entièrement la connexion SSH.
--ssh-identity file chemin du fichier d’identité à utiliser.
--ssh-option options liste des options -o de la connexion SSH. Options
toujours utilisées :
-o ConnectTimeout=$ssh_timeout
-o PreferredAuthentications=hostbased,publickey
--ssh-port port port SSH de la connexion. Valeur par défaut : 22.
--ssh-program ssh chemin du programme SSH. Valeur par défaut : ssh.
--ssh-timeout second délai d’échec de connexion SSH. Valeur par défaut : 10
secondes.
--ssh-user username nom de connexion. Par défaut : utilisateur qui exécute
pgBadger.
L’option --ssh-sudo préfixe par sudo les commandes distantes qui listent et lisent les fichiers journaux. L’utilisateur SSH distant doit pouvoir exécuter ces commandes avec sudo sans invite interactive.
Le fichier journal à analyser peut également être spécifié à l’aide d’un URI. Les protocoles pris en charge sont http[s] et [s]ftp. La commande curl sera utilisée pour télécharger le fichier, qui sera analysé pendant le téléchargement. Le protocole ssh est également pris en charge et utilisera la commande ssh, de la même manière qu’avec un hôte distant. Voir les exemples ci-dessous.
Codes de retour :
0: succès
1: arrêt sur erreur
2: interruption, par exemple avec Ctrl+C
3: le fichier PID existe déjà ou ne peut pas être créé
4: aucun fichier journal fourni en ligne de commande
Exemples :
pgbadger /var/log/postgresql.log
pgbadger /var/log/postgres.log.2.gz /var/log/postgres.log.1.gz /var/log/postgres.log
pgbadger /var/log/postgresql/postgresql-2012-05-*
pgbadger --exclude-query="^(COPY|COMMIT)" /var/log/postgresql.log
pgbadger -b "2012-06-25 10:56:11" -e "2012-06-25 10:59:11" /var/log/postgresql.log
cat /var/log/postgres.log | pgbadger -
# Préfixe de ligne pour une sortie de journal stderr
pgbadger --prefix '%t [%p]: user=%u,db=%d,client=%h' /pglog/postgresql-2012-08-21*
pgbadger --prefix '%m %u@%d %p %r %a : ' /pglog/postgresql.log
# Préfixe de ligne pour une sortie de journal syslog
pgbadger --prefix 'user=%u,db=%d,client=%h,appname=%a' /pglog/postgresql-2012-08-21*
# Utiliser 8 CPU pour analyser plus rapidement un fichier de 10GB
pgbadger -j 8 /pglog/postgresql-10.1-main.log
Utilisez la notation URI pour le fichier journal distant :
Si vous disposez d’un pg_dump à 23:00 et à 13:00 chaque jour pendant une demi-heure, vous pouvez utiliser pgBadger comme suit pour exclure ces périodes du rapport :
Cette expression exclut chaque heure correspondante en entier, y compris le temps en dehors de la demi-heure de sauvegarde. Restreignez le motif des minutes si seule la période de sauvegarde doit être exclue.
Cela permettra d’éviter d’avoir des instructions COPY, générées par pg_dump, en tête de la liste des requêtes les plus lentes. Vous pouvez également utiliser –exclude-appname “pg_dump” pour résoudre ce problème de manière plus simple.
Vous pouvez également analyser la sortie de journalctl comme si elle était un fichier journal :
Vous n’avez pas besoin de spécifier de fichier journal en ligne de commande, mais si vous avez d’autres fichiers journaux PostgreSQL à analyser, vous pouvez les ajouter comme d’habitude.
Pour reconstruire tous les rapports HTML incrémentaux après coup, procédez comme suit :
Il mettra également à jour tous les fichiers de ressources (JS et CSS). Utilisez -E ou –explode si les rapports ont été générés en utilisant cette option.
pgBadger prend également en charge les journaux PostgreSQL Heroku au format logplex :
Cela enverra les journaux Heroku PostgreSQL à pgBadger via stdin.
pgBadger peut détecter automatiquement les journaux PostgreSQL RDS et CloudWatch en utilisant le format rds :
pgbadger -f rds -o rds_out.html rds.log
Chaque journal CloudSQL PostgreSQL est un journal PostgreSQL relativement classique, mais encapsulé au format JSON. Il est détecté automatiquement par pgBadger, mais en cas de besoin, forcez le format de journalisation en utilisant jsonlog :
Cela ajoutera un lien vers le nom du mois dans la vue calendrier des rapports incrémentiels pour consulter le rapport du mois de mai 2019.
Utilisez -E ou –explode si les rapports ont été générés en utilisant cette option.