Перейти к содержанию

Это многостраничная версия текущего раздела для печати. .

Вернуться к обычному виду страницы.

Документация pgBadger 13.2

Быстрый анализ журналов PostgreSQL и PgBouncer с подробными автономными отчётами
Логотип pgBadger

pgBadger — быстрый автономный анализатор журналов PostgreSQL, написанный на Perl. Он читает журналы PostgreSQL или PgBouncer и формирует подробные результаты в HTML, текстовом, двоичном, JSON-формате либо в виде необработанного CSV. HTML-отчёты автономны, интерактивны, поддерживают масштабирование, и для их просмотра нужен только веб-браузер.

Зачем нужен pgBadger

pgBadger рассчитан на большие журналы и повседневную эксплуатацию:

  • одна программа на Perl, не требующая обязательных модулей за пределами базовой поставки Perl;
  • автоматическое определение форматов ввода stderr, syslog, csvlog, jsonlog, RDS, Cloud SQL, logplex, Redshift и PgBouncer;
  • непосредственное чтение локальных файлов, стандартного ввода, удалённых файлов по SSH, а также URL с HTTP, FTP или SFTP;
  • поддержка сжатых входных данных gzip, bzip2, lz4, xz, zip и zstd;
  • параллельный разбор одного большого файла или множества небольших файлов;
  • ежедневные, еженедельные и создаваемые по запросу ежемесячные инкрементальные отчёты;
  • фильтрация по времени, базе данных, пользователю, клиенту, приложению, процессу, сеансу и шаблону запроса.

Что содержат отчёты

Набор отчётов PostgreSQL охватывает:

  • общую активность и статистику запросов;
  • медленные, частые, наиболее затратные по времени, ожидающие и отменённые запросы;
  • временные файлы, контрольные точки, блокировки, сеансы и соединения;
  • активность autovacuum и autoanalyze по таблицам;
  • ошибки и события по уровню важности и классу;
  • распределения по базе данных, пользователю, клиенту, приложению и типу оператора.

Для входных данных PgBouncer дополнительно отображаются пропускная способность, средняя длительность запросов, число одновременных сеансов, распределения соединений и сеансов, использование резервного пула, а также отчёты о частых ошибках и событиях.

Структура документации

Читайте руководство в следующем порядке или сразу переходите к нужной задаче через боковую панель:

  1. Загрузите и установите pgBadger и его необязательные модули.
  2. Ознакомьтесь с полным справочником командной строки .
  3. Настройте журналирование PostgreSQL с префиксом, пригодным для разбора.
  4. Выберите подходящий режим параллельной обработки .
  5. Безопасно создавайте инкрементальные отчёты .
  6. Выберите формат вывода и изучите локальные примеры .
  7. Следите за историей выпусков , обращайтесь за поддержкой и изучите лицензию .

1 - Загрузка и установка

Официальные выпуски, пакеты, требования и установка из исходного кода

Выбор канала распространения

КаналДля чего использоватьГде находится
Официальный выпускАрхивы исходного кода и примечания к выпускуВыпуски GitHub
Пакет RPMДистрибутивы Linux на базе RPMРепозиторий PostgreSQL Yum
Пакет Debian/UbuntuДистрибутивы Linux на базе APTРепозиторий PostgreSQL Apt
Разрабатываемый исходный кодТекущий код, ещё не вошедший в выпускdarold/pgbadger

Снимок документации на этом сайте основан на дереве исходного кода версии 13.2. Перед загрузкой всегда проверяйте страницу выпусков: локальный снимок намеренно зафиксирован, тогда как исходный проект продолжает выпускать новые версии.

Требования

Для создания HTML-отчётов нужны только:

  • современная поставка Perl;
  • веб-браузер для отображения встроенных диаграмм JavaScript.

Для необязательных возможностей требуются следующие зависимости:

ВозможностьЗависимость
Разбор CSV-журналов PostgreSQLText::CSV_XS
Запись вывода JSONJSON::XS
Чтение входных файлов .gz, .bz2, .lz4, .xz, .zip или .zstсоответствующая утилита zcat, bzcat, lz4cat, xz, unzip или zstdcat

Установите поддержку JSON в Debian или Ubuntu:

$ sudo apt-get install libjson-xs-perl

В системе на базе RPM:

$ sudo yum install perl-JSON-XS

Параметр --zcat позволяет переопределить путь к программе распаковки. Если указать одну пользовательскую команду, смешивать разные форматы сжатия в одном запуске будет нельзя.

Установка из официального архива

Загрузите архив выпуска, затем соберите и установите его стандартными средствами Perl:

$ tar xzf pgbadger-13.2.tar.gz
$ cd pgbadger-13.2
$ perl Makefile.PL
$ make
$ sudo make install

Стандартная схема site устанавливает программу как /usr/local/bin/pgbadger, а страницу руководства — как /usr/local/share/man/man1/pgbadger.1.

Для установки в стиле системного дистрибутива под /usr создайте Makefile следующим образом:

$ perl Makefile.PL INSTALLDIRS=vendor
$ make
$ sudo make install

Исходный проект также поддерживает схему INSTALLDIRS=perl. Перед установкой в управляемую систему проверьте сгенерированные пути.

Установка разрабатываемой версии

$ git clone https://github.com/darold/pgbadger.git
$ cd pgbadger
$ perl Makefile.PL
$ make
$ make test
$ sudo make install

Разрабатываемый код может содержать изменения, ещё не описанные в примечаниях к выпуску. Для воспроизводимой сборки производственного пакета предпочтительнее архив с тегом версии.

Проверка установки

$ pgbadger --version
$ pgbadger --help

Далее перейдите к справочнику командной строки и настройке журналирования PostgreSQL .

2 - Справочник командной строки

Полный синтаксис команд pgBadger, параметры, удалённый ввод, коды возврата и примеры

На этой странице сохранён справочник команд, сгенерированный из зафиксированной версии исходного кода. Имена параметров и текст справки приведены дословно, чтобы их можно было непосредственно сопоставить с выводом pgbadger --help.

Использование и параметры

Использование: pgbadger [options] logfile […]

PostgreSQL log analyzer with fully detailed reports and graphs.

Аргументы:

logfile can be a single log file, a list of files, or a shell command
returning a list of files. If you want to pass log content from stdin
use - as filename. Note that input from stdin will not work with csvlog.

Параметры:

-a | --average minutes : number of minutes to build the average graphs of
                         queries and connections. Default 5 minutes.
-A | --histo-average min: number of minutes to build the histogram graphs
                         of queries. Default 60 minutes.
-b | --begin datetime  : start date/time for the data to be parsed in log
                         (either a timestamp or a time)
-c | --dbclient host   : only report on entries for the given client host.
-C | --nocomment       : remove comments like /* ... */ from queries.
-d | --dbname database : only report on entries for the given database.
-D | --dns-resolv      : client ip addresses are replaced by their DNS name.
                         Be warned that this can really slow down pgBadger.
-e | --end datetime    : end date/time for the data to be parsed in log
                         (either a timestamp or a time)
-E | --explode         : explode the main report by generating one report
                         per database. Global information not related to a
                         database is added to the postgres database report.
-f | --format logtype  : possible values: syslog, syslog2, stderr, jsonlog,
                         csv, pgbouncer, logplex, rds and redshift. Use this
                         option when pgBadger is not able to detect the log
                         format.
-G | --nograph         : disable graphs on HTML output. Enabled by default.
-h | --help            : show this message and exit.
-H | --html-outdir path: path to directory where HTML report must be written
                         in incremental mode, binary files stay on directory
                         defined with -O, --outdir option.
-i | --ident name      : programname used as syslog ident. Default: postgres
-I | --incremental     : use incremental mode, reports will be generated by
                         days in a separate directory, --outdir must be set.
-j | --jobs number     : number of jobs to run at same time for a single log
                         file. Run as single by default or when working with
                         csvlog format.
-J | --Jobs number     : number of log files to parse in parallel. Process
                         one file at a time by default.
-l | --last-parsed file: allow incremental log parsing by registering the
                         last datetime and line parsed. Useful if you want
                         to watch errors since last run or if you want one
                         report per day with a log rotated each week.
-L | --logfile-list file:file containing a list of log files to parse.
-m | --maxlength size  : maximum length of a query, it will be restricted to
                         the given size. Default truncate size is 100000.
-M | --no-multiline    : do not collect multiline statements to avoid garbage
                         especially on errors that generate a huge report.
-N | --appname name    : only report on entries for given application name
-o | --outfile filename: define the filename for the output. Default depends
                         on the output format: out.html, out.txt, out.bin,
                         or out.json. This option can be used multiple times
                         to output several formats. To use json output, the
                         Perl module JSON::XS must be installed, to dump
                         output to stdout, use - as filename.
-O | --outdir path     : directory where out files must be saved.
-p | --prefix string   : the value of your custom log_line_prefix as
                         defined in your postgresql.conf. Only use it if you
                         aren't using one of the standard prefixes specified
                         in the pgBadger documentation, such as if your
                         prefix includes additional variables like client IP
                         or application name. MUST contain escape sequences
                         for time (%t, %m or %n) and processes (%p or %c).
                         See examples below.
-P | --no-prettify     : disable SQL queries prettify formatter.
-q | --quiet           : don't print anything to stdout, not even a progress
                         bar.
-Q | --query-numbering : add numbering of queries to the output when using
                         options --dump-all-queries or --normalized-only.
-r | --remote-host ip  : set the host where to execute the cat command on
                         remote log file to parse the file locally.
-R | --retention N     : number of weeks to keep in incremental mode. Defaults
                         to 0, disabled. Used to set the number of weeks to
                         keep in output directory. Older weeks and days
                         directories are automatically removed.
-s | --sample number   : number of query samples to store. Default: 3.
-S | --select-only     : only report SELECT queries.
-t | --top number      : number of queries to store/display. Default: 20.
-T | --title string    : change title of the HTML page report.
-u | --dbuser username : only report on entries for the given user.
-U | --exclude-user username : exclude entries for the specified user from
                         report. Can be used multiple time.
-v | --verbose         : enable verbose or debug mode. Disabled by default.
-V | --version         : show pgBadger version and exit.
-w | --watch-mode      : only report errors just like logwatch could do.
-W | --wide-char       : encode html output of queries into UTF8 to avoid
                         Perl message "Wide character in print".
-x | --extension       : output format. Values: text, html, bin or json.
                         Default: html
-X | --extra-files     : in incremental mode allow pgBadger to write CSS and
                         JS files in the output directory as separate files.
-z | --zcat exec_path  : set the full path to the zcat program. Use it if
                         zcat, bzcat or unzip is not in your path.
-Z | --timezone +/-XX  : Set the number of hours from GMT of the timezone.
                         Use this to adjust date/time in JavaScript graphs.
                         The value can be an integer, ex.: 2, or a float,
                         ex.: 2.5.
--anonymize            : obscure all literals in queries, useful to hide
--charset              : used to set the HTML charset to be used.
                         Default: utf-8.
--command CMD          : command to execute to retrieve log entries on
                         stdin. pgBadger will open a pipe to the command
                         and parse log entries generated by the command.
--csv-separator        : used to set the CSV field separator, default: ,
--day-report YYYY-MM-DD: create an HTML report over the specified day.
                         Requires incremental output directories and the
                         presence of all necessary binary data files
--disable-autovacuum   : do not generate autovacuum report.
                         confidential data.
--disable-checkpoint   : do not generate checkpoint/restartpoint report.
--disable-connection   : do not generate connection report.
--disable-error        : do not generate error report.
--disable-hourly       : do not generate hourly report.
--disable-lock         : do not generate lock report.
--disable-query        : do not generate query reports (slowest, most
                         frequent, queries by users, by database, ...).
--disable-session      : do not generate session report.
--disable-temporary    : do not generate temporary report.
--disable-type         : do not generate report of queries by type, database
                         or user.
--dump-all-queries     : dump all queries found in the log file replacing
                         bind parameters included in the queries at their
                         respective placeholders positions.
--dump-raw-csv         : parse the log and dump the information into CSV
                         format. No further processing is done, no report.
--enable-checksum      : used to add an md5 sum under each query report.
--exclude-appname name : exclude entries for the specified application name
                         from report.  Example: "pg_dump".  Can be used
                         multiple times.
--exclude-client name  : exclude log entries for the specified client ip.
                         Can be used multiple times.
--exclude-db name      : exclude entries for the specified database from
                         report. Example: "postgres". Can be used multiple
                         times.
--exclude-file filename: path of the file that contains each regex to use
                         to exclude queries from the report. One regex per
                         line.
--exclude-line regex   : exclude any log entry that will match the given
                         regex. Can be used multiple times.
--exclude-query regex  : any query matching the given regex will be excluded
                         from the report. For example: "^(VACUUM|COMMIT)"
                         You can use this option multiple times.
--exclude-time  regex  : any timestamp matching the given regex will be
                         excluded from the report. Example: "2013-04-12 .*"
                         You can use this option multiple times.
--explain-url URL      : use it to override the url of the graphical explain
                         tool. Default: https://explain.depesz.com/
--histogram-query VAL  : use custom inbound for query times histogram.
                        Default inbound in milliseconds:
                     0,1,5,10,25,50,100,500,1000,10000
--histogram-session VAL: use custom inbound for session times histogram.
                        Default inbound in milliseconds:
                     0,500,1000,30000,60000,600000,1800000,3600000,28800000
--include-file filename: path of the file that contains each regex to the
                         queries to include from the report. One regex per
                         line.
--include-query regex  : any query that does not match the given regex will
                         be excluded from the report. You can use this
                         option multiple times. For example: "(tbl1|tbl2)".
--include-pid PID      : only report events related to the session pid (%p).
                         Can be used multiple time.
--include-session ID   : only report events related to the session id (%c).
                         Can be used multiple time.
--include-time  regex  : only timestamps matching the given regex will be
                         included in the report. Example: "2013-04-12 .*"
                         You can use this option multiple times.
--iso-week-number      : in incremental mode, calendar weeks start on
                         Monday and respect the ISO 8601 week number, range
                         01 to 53, where week 1 is the first week that has
                         at least 4 days in the new year.
--keep-comments        : do not remove comments from normalized queries. It
                         can be useful if you want to distinguish between
                         same normalized queries.
--journalctl command   : command to use to replace PostgreSQL logfile by
                         a call to journalctl. Basically it might be:
                            journalctl -u postgresql-9.5
--log-duration         : force pgBadger to associate log entries generated
                         by both log_duration = on and log_statement = 'all'
--log-timezone +/-XX   : Set the number of hours from GMT of the timezone
                         that must be used to adjust date/time read from
                         log file before beeing parsed. Using this option
                         makes log search with a date/time more difficult.
                         The value can be an integer, ex.: 2, or a float,
                         ex.: 2.5.
--month-report YYYY-MM : create a cumulative HTML report over the specified
                         month. Requires incremental output directories and
                         the presence of all necessary binary data files
--noexplain            : do not process lines generated by auto_explain.
--no-fork              : do not fork any process, for debugging purpose.
--no-process-info      : disable changing process title to help identify
                         pgbadger process, some system do not support it.
--no-progressbar       : disable progressbar.
--noreport             : no reports will be created in incremental mode.
--no-week              : inform pgbadger to not build weekly reports in
                         incremental mode. Useful if it takes too much time.
--normalized-only      : only dump all normalized queries to out.txt
--pgbouncer-only       : only show PgBouncer-related menus in the header.
--pid-dir path         : set the path where the pid file must be stored.
                         Default /tmp
--pid-file file        : set the name of the pid file to manage concurrent
                         execution of pgBadger. Default: pgbadger.pid
--pie-limit num        : pie data lower than num% will show a sum instead.
--prettify-json        : use it if you want json output to be prettified.
--rebuild              : used to rebuild all html reports in incremental
                         output directories where there's binary data files.
--start-monday         : in incremental mode, calendar weeks start on
                         Sunday. Use this option to start on a Monday.
--tempdir DIR          : set directory where temporary files will be written
                         Default: File::Spec->tmpdir() || '/tmp'

pgBadger может разбирать удалённый файл журнала через SSH-соединение без пароля. Укажите IP-адрес или имя узла с помощью -r либо –remote-host. Для полного управления SSH-соединением предусмотрены дополнительные параметры.

--ssh-identity file      path to the identity file to use.
--ssh-option  options    list of -o options to use for the ssh connection.
                         Options always used:
                             -o ConnectTimeout=$ssh_timeout
                             -o PreferredAuthentications=hostbased,publickey
--ssh-port port          ssh port to use for the connection. Default: 22.
--ssh-program ssh        path to the ssh program to use. Default: ssh.
--ssh-timeout second     timeout to ssh connection failure. Default: 10 sec.
--ssh-user username      connection login name. Defaults to running user.

Файл журнала для разбора также можно указать с помощью URI. Поддерживаются протоколы http[s] и [s]ftp. Для загрузки файла используется команда curl, а разбор выполняется во время загрузки. Также поддерживается протокол ssh: он использует команду ssh так же, как удалённый узел. См. примеры ниже.

Коды возврата:

0: on success
1: die on error
2: if it has been interrupted using ctr+c for example
3: the pid file already exists or can not be created
4: no log file was given at command line

Примеры:

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 -
# Log line prefix with stderr log output
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
# Log line prefix with syslog log output
pgbadger --prefix 'user=%u,db=%d,client=%h,appname=%a' /pglog/postgresql-2012-08-21*
# Use my 8 CPUs to parse my 10GB file faster, much faster
pgbadger -j 8 /pglog/postgresql-10.1-main.log

Для удалённого файла журнала используйте запись URI:

pgbadger http://172.12.110.1//var/log/postgresql/postgresql-10.1-main.log
pgbadger ftp://username@172.12.110.14/postgresql-10.1-main.log
pgbadger ssh://username@172.12.110.14:2222//var/log/postgresql/postgresql-10.1-main.log*

Можно одновременно разбирать локальный журнал PostgreSQL и удалённый файл журнала pgbouncer:

pgbadger /var/log/postgresql/postgresql-10.1-main.log ssh://username@172.12.110.14/pgbouncer.log

Еженедельный отчёт об ошибках с помощью задания cron:

30 23 * * 1 /usr/bin/pgbadger -q -w /var/log/postgresql.log -o /var/reports/pg_errors.html

Создание отчёта каждую неделю в инкрементальном режиме:

0 4 * * 1 /usr/bin/pgbadger -q `find /var/log/ -mtime -7 -name "postgresql.log*"` -o /var/reports/pg_errors-`date +\%F`.html -l /var/reports/pgbadger_incremental_file.dat

Предполагается, что файл журнала и HTML-отчёт также ротируются еженедельно.

Ещё лучше использовать автоматически создаваемые инкрементальные отчёты:

0 4 * * * /usr/bin/pgbadger -I -q /var/log/postgresql/postgresql.log.1 -O /var/www/pg_reports/

Команда создаст отчёт за каждый день и каждую неделю.

В инкрементальном режиме также можно задать число недель, которые следует хранить в отчётах:

/usr/bin/pgbadger --retention 2 -I -q /var/log/postgresql/postgresql.log.1 -O /var/www/pg_reports/

Если pg_dump ежедневно работает по полчаса в 23:00 и 13:00, можно следующим образом исключить эти периоды из отчёта pgBadger:

pgbadger --exclude-time "2013-09-.* (23|13):.*" postgresql.log

Так операторы COPY, создаваемые pg_dump, не окажутся в верхней части списка самых медленных запросов. Эту проблему можно решить проще с помощью –exclude-appname “pg_dump”.

Вывод journalctl также можно разбирать как обычный файл журнала:

pgbadger --journalctl 'journalctl -u postgresql-9.5'

или, что менее эффективно, вызвать его на удалённом узле:

pgbadger -r 192.168.1.159 --journalctl 'journalctl -u postgresql-9.5'

В командной строке не нужно указывать файл журнала, но при наличии других журналов PostgreSQL для разбора их можно добавить обычным способом.

Чтобы впоследствии пересобрать все инкрементальные HTML-отчёты, выполните:

rm /path/to/reports/*.js
rm /path/to/reports/*.css
pgbadger -X -I -O /path/to/reports/ --rebuild

При этом обновятся и все файлы ресурсов (JS и CSS). Укажите -E или –explode, если отчёты изначально создавались с этим параметром.

pgBadger также поддерживает журналы Heroku PostgreSQL в формате logplex:

heroku logs -p postgres | pgbadger -f logplex -o heroku.html -

Журнал Heroku PostgreSQL будет передаваться в pgbadger через стандартный ввод.

pgBadger может автоматически определять журналы RDS и CloudWatch PostgreSQL в формате rds:

pgbadger -f rds -o rds_out.html rds.log

Каждый журнал CloudSQL Postgresql представляет собой довольно обычный журнал PostgreSQL, заключённый в формат JSON. pgBadger определяет его автоматически, но при необходимости принудительно задайте формат `jsonlog`:

pgbadger -f jsonlog -o cloudsql_out.html cloudsql.log

То же относится и к расширению jsonlog: формат JSON отличается, но pgBadger умеет разбирать оба варианта.

pgBadger также поддерживает журналы, создаваемые оператором CloudNativePG Postgres для Kubernetes:

pgbadger -f jsonlog -o cnpg_out.html cnpg.log

Чтобы создать накопительный отчёт за месяц, используйте команду:

pgbadger --month-report 2919-05 /path/to/incremental/reports/

Она добавит в календарное представление инкрементальных отчётов ссылку с названием месяца для просмотра отчёта за май 2019 года. Укажите -E или –explode, если отчёты создавались с этим параметром.

3 - Настройка журналирования PostgreSQL

Настройка журналирования запросов, log_line_prefix, локали и вспомогательной статистики для pgBadger

pgBadger может отобразить только те сведения, которые PostgreSQL записывает в журнал. Начните с префикса, пригодного для разбора, и продуманной политики журналирования операторов, а затем добавьте эксплуатационные события, которые требуется анализировать.

Минимальное журналирование запросов

Чтобы включить текст и длительность запросов, включите журналирование операторов по длительности:

log_min_duration_statement = 0

Значение 0 записывает каждый завершённый оператор. На загруженном сервере выберите более высокий порог в миллисекундах, чтобы контролировать объём журнала. Прежде чем включать низкий порог в производственной среде, измерьте накладные расходы и рост хранилища.

Если нужны только длительность и число запросов, но не их текст, используйте:

log_min_duration_statement = -1
log_duration = on

Если нужны отчёты о самых медленных запросах и суммарном времени запросов, предпочтителен log_min_duration_statement.

Обязательные поля префикса

Пользовательский log_line_prefix должен включать оба следующих элемента:

  • поле времени: %t, %m или %n;
  • поле процесса или сеанса: %p или %c.

Минимальный префикс stderr:

log_line_prefix = '%t [%p]: '

Более информативный префикс записывает пользователя, базу данных, приложение и клиента:

log_line_prefix = '%t [%p]: user=%u,db=%d,app=%a,client=%h '

Эквивалентный префикс для назначения syslog не содержит поля времени и процесса, которые уже предоставляет syslog:

log_line_prefix = 'user=%u,db=%d,app=%a,client=%h '

Также поддерживается другой порядок ключей:

log_line_prefix = '%t [%p]: db=%d,user=%u,app=%a,client=%h '

Если pgBadger не распознаёт ваш префикс, передайте его точное значение через --prefix. Не упрощайте и не перепечатывайте его иначе, чем в postgresql.conf.

Включите те классы событий, которые должны появиться в отчёте:

log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
log_autovacuum_min_duration = 0
log_error_verbosity = default

Эти параметры могут значительно увеличить объём журнала. В частности, log_temp_files = 0 и log_autovacuum_min_duration = 0 записывают каждое подходящее событие; скорректируйте их в соответствии с рабочей нагрузкой и доступным объёмом хранения.

Серверные сообщения должны быть на английском языке

Синтаксический анализатор распознаёт сообщения сервера PostgreSQL на английском языке. Используйте один из вариантов:

lc_messages = 'en_US.UTF-8'

или:

lc_messages = 'C'

Локали наподобие fr_FR.UTF-8 не поддерживаются анализатором исходного проекта.

Не допускайте конфликтующих параметров операторов

Не включайте одновременно log_min_duration_statement, log_duration и log_statement = 'all'. Одно выполнение может попасть в журнал несколько раз, что завышает счётчики pgBadger и сильно увеличивает объём журнала.

ЦельРекомендуемый параметр
Текст запроса и время выполненияlog_min_duration_statement = 0 или выбранный порог
Только длительность и количествоlog_min_duration_statement = -1, log_duration = on
Расширенный аудит операторовРассматривайте log_statement как отдельную политику журналирования; не сочетайте все три параметра для статистики pgBadger

После перезагрузки конфигурации PostgreSQL изучите несколько реальных записей журнала, прежде чем запускать большой анализ. Убедитесь, что отметка времени, идентификатор процесса/сеанса, пользователь, база данных, приложение и клиент соответствуют выбранному формату.

4 - Параллельная обработка

Выбор между параллельной обработкой частей одного журнала и множества журналов

pgBadger поддерживает два взаимодополняющих режима многопроцессной обработки. Выбирайте режим по структуре входных данных, а не просто по числу процессоров.

ПараметрЕдиница параллельной обработкиЛучше всего подходит дляОсновное ограничение
-j N / --jobs Nчасти одного файла журналаодин большой журнал с произвольным доступомна границах частей небольшое число запросов может быть продублировано или пропущено
-J N / --Jobs Nцелые файлы журналовмножество независимых журналовполезно только при достаточном числе файлов для постоянной загрузки рабочих процессов

Разделение одного большого файла с -j

$ pgbadger -j 8 /var/log/postgresql/postgresql.log

Алгоритм исходного проекта делит каждый файл на N диапазонов байтов, создаёт по одному процессу синтаксического анализа на диапазон, записывает временную двоичную статистику, а затем объединяет её в итоговый отчёт.

for each log file
    divide the file into N chunks
    find each chunk's start and end offsets
    fork N parsers at those offsets
    write one temporary binary statistics file per parser
wait for the workers
merge the binary files and build the report

Поскольку записи журнала и многострочные операторы не совпадают точно с границами диапазонов байтов, примерно до N запросов на файл могут быть усечены, пропущены или — что происходит чаще — учтены дважды на границах частей. Используйте этот режим для сводного анализа очень больших файлов, но не в процессах, где требуется точный экспертный подсчёт каждой записи.

Обработка множества файлов с -J

$ pgbadger -J 8 /var/log/postgresql/postgresql-*.log

Каждый рабочий процесс получает целый файл, поэтому в этом режиме отсутствует проблема границ частей. Он наиболее полезен при сотнях небольших файлов и достаточной мощности процессора и подсистемы ввода-вывода. Документация исходного проекта также разрешает использовать -J для независимых сжатых файлов; разделение одного файла с -j требует несжатых входных данных с произвольным доступом.

Эталонные измерения исходного проекта

В руководстве исходного проекта приведены следующие результаты для узла с 8 процессорами. Рассматривайте их как сравнение двух алгоритмов, а не как прогноз для современного оборудования.

Один файл размером 9,5 ГБ:

Параметр1 CPU2 CPU4 CPU8 CPU
-j1h41m1850m2525m3915m58
-J1h41m1854m2841m1634m45

Двести файлов по 10 МБ, всего 2 ГБ:

Параметр1 CPU2 CPU4 CPU8 CPU
-j20m159m565m204m20
-J20m159m495m002m40

Практическое правило: используйте -j для нескольких больших файлов, а -J — для множества небольших. Если входные данные и платформа позволяют, оба режима можно сочетать, но такую комбинацию следует измерить: пропускная способность хранилища может стать ограничением разбора журналов раньше, чем процессор.

Ограничения и временные файлы

  • -j недоступен для сжатого ввода или CSV и использует создание дочерних процессов, поэтому этот режим не работает в Windows.
  • Путь удалённого ввода исходного проекта не поддерживает разбор удалённых CSV.
  • При параллельном анализе в выбранном временном каталоге (по умолчанию — системном) создаются файлы с именами вида tmp_pgbadgerXXXX.bin.
  • Не удаляйте эти файлы во время работы pgBadger. С помощью --tempdir разместите их в хранилище достаточного объёма.
  • Начните с умеренного числа рабочих процессов и следите за загрузкой процессора, скоростью чтения, использованием временного пространства и затраченным временем.

5 - Инкрементальные отчёты

Создание ежедневных и еженедельных отчётов, управление хранением, пересборка вывода и добавление месячных сводок

Инкрементальный режим сохраняет разобранную статистику в двоичном виде, а затем строит по одному HTML-отчёту на день, накопительный отчёт на неделю и связывающий их календарный индекс. Он предназначен для регулярной обработки ротируемых журналов без повторного учёта одних и тех же записей.

Создание ежедневных и еженедельных отчётов

Запускайте pgBadger после ежедневной ротации журнала и укажите постоянный каталог вывода:

crontab
0 4 * * * /usr/bin/pgbadger -I -q /var/log/postgresql/postgresql.log.1 -O /var/www/pg_reports/

Параметр -I включает инкрементальный режим, а -O выбирает каталог для двоичного состояния, календарного индекса и сгенерированных отчётов. pgBadger самостоятельно ведёт инкрементальное состояние в этом каталоге, поэтому --last-parsed не нужен, если только вы намеренно не хотите хранить файл состояния в другом месте.

Чтобы выводить HTML в отдельный каталог, сохраняя двоичное состояние в исходном каталоге, используйте:

$ pgbadger -I -O /var/lib/pgbadger/data -H /var/www/pg_reports postgresql.log.1

Считайте двоичные файлы исходными данными для будущих пересборок. Создавайте их резервные копии или сохраняйте исходные журналы, если возможность повторного создания отчётов важна.

Срок хранения

Оставляйте только выбранное число недель:

$ pgbadger --incremental --retention 8 \
    --outdir /var/www/pg_reports \
    /var/log/postgresql/postgresql.log.1

Каталоги старых недель и дней удаляются автоматически. Прежде чем применять политику к единственной истории отчётов, проверьте её на непроизводственной копии.

Раздельная запись общих ресурсов

По умолчанию HTML-отчёты включают JavaScript и CSS внутрь файла. В каталоге с большим числом инкрементальных отчётов параметр -X / --extra-files записывает общие ресурсы отдельно и уменьшает дублирование в выводе:

$ pgbadger -X -I -O /var/www/pg_reports postgresql.log.1

Все отчёты и каталог ресурсов соответствующей версии необходимо перемещать вместе.

Пересборка существующих отчётов

После обновления pgBadger или исправления генератора отчётов пересоберите HTML из сохранённых двоичных данных:

$ rm /var/www/pg_reports/*.js
$ rm /var/www/pg_reports/*.css
$ pgbadger -X -I -O /var/www/pg_reports --rebuild

Если исходные отчёты создавались отдельно по базам данных, снова укажите -E / --explode.

Используйте длинный параметр --rebuild. В текущем справочнике команд -R означает --retention; если принять -R за сокращение для пересборки, будет применён неверный параметр.

Добавление месячного отчёта

Ежедневные и еженедельные отчёты создаются автоматически. Месячное агрегирование запускается явно, поскольку для большой истории оно может быть ресурсоёмким:

$ pgbadger -X --month-report 2026-07 /var/www/pg_reports/

Созданный месяц добавляется в календарный индекс. Повторный запуск команды пересобирает отчёт за этот месяц из доступных двоичных данных. Для истории по отдельным базам данных снова укажите -E:

$ pgbadger -E -X --month-report 2026-07 /var/www/pg_reports/

Полный справочник команд также описывает --day-report YYYY-MM-DD, --no-week, --noreport, --start-monday и --iso-week-number для более специализированных расписаний.

Откройте включённый пример инкрементального отчёта , чтобы без подключения к сети изучить календарь, ссылки на недели и иерархию ежедневных отчётов.

6 - Форматы вывода

Выбор вывода HTML, текста, двоичных данных, JSON или необработанного CSV и объединение промежуточных файлов

pgBadger выбирает формат вывода по расширению имени файла либо по параметру -x / --extension. Укажите -o / --outfile несколько раз, чтобы создать несколько форматов из одного результата разбора.

ФорматОбычное расширениеОптимальное применение
HTML.htmlинтерактивный, удобный для чтения отчёт с диаграммами
Текст.txtпросмотр в терминале и простое архивирование
Двоичный.binобъединяемая промежуточная статистика и пересборка отчётов
JSON.jsonинтеграция с другим ПО; требует JSON::XS
Необработанный CSVвыбранный файл выводапострочное извлечение с --dump-raw-csv

HTML и текст

По умолчанию результат записывается в out.html:

$ pgbadger postgresql.log -o report.html

Обычно HTML включает сценарии, стили, шрифты и данные отчёта, необходимые для автономного просмотра. Параметр -X / --extra-files выносит общие JavaScript и CSS из инкрементальных отчётов; храните эти ресурсы рядом с деревом HTML.

Чтобы явно создать текстовый файл:

$ pgbadger -x text -o report.txt postgresql.log

Укажите - вместо имени выходного файла, чтобы записать поддерживаемый формат в стандартный вывод.

Двоичные промежуточные данные

Двоичный вывод отделяет разбор от представления. Создавайте почасовые приращения из одного растущего суточного журнала:

$ pgbadger --last-parsed .pgbadger_last_state \
    -o sunday/hour01.bin \
    /var/log/pgsql/postgresql-Sun.log

Объедините один или несколько двоичных файлов в новый отчёт:

$ pgbadger -o sunday.html sunday/*.bin

Если сервер создаёт отдельный файл журнала каждый час, формируйте по одному двоичному файлу на каждую ротацию, а затем при необходимости пересобирайте накопительный HTML:

$ pgbadger -o day1/hour01.bin postgresql-2026-08-15_01.log
$ pgbadger -o day1/hour02.bin postgresql-2026-08-15_02.log
$ pgbadger -o day1/hour03.bin postgresql-2026-08-15_03.log
$ pgbadger -o day1.html day1/*.bin

Храните вместе только двоичные файлы совместимых версий pgBadger. Перед обновлением каталога долгоживущих отчётов проверьте в примечаниях к выпуску совместимость инкрементального формата.

JSON

Вывод JSON предназначен для программных потребителей, например конвейеров мониторинга и отчётности:

$ pgbadger -o report.json postgresql.log

Сначала установите JSON::XS. Если размер файла и время создания вторичны, добавьте --prettify-json для удобства чтения.

Необработанный и ориентированный на запросы экспорт

Справочник команд также описывает специализированные способы экспорта:

  • --dump-raw-csv разбирает журнал и записывает построчный CSV без построения отчёта;
  • --csv-separator меняет разделитель необработанного CSV;
  • --dump-all-queries выводит каждый запрос после подстановки параметров привязки;
  • --normalized-only записывает нормализованные запросы;
  • --query-numbering нумерует текстовый вывод, ориентированный на запросы.

Эти режимы могут включать SQL приложения, идентификаторы, пользователей, адреса клиентов или литеральные значения. Проверяйте результат перед передачей другим и используйте --anonymize, если для предполагаемого анализа литералы не нужны.

7 - Примеры отчётов

Полные, содержащие только ошибки и инкрементальные отчёты pgBadger из локального снимка сайта

Примеры были созданы pgBadger 11.8 в мае 2022 года. Исходные примеры хранятся на этом сайте, поэтому навигация, диаграммы, стили и сценарии отчётов доступны без обращения к серверу исходного проекта.

ПримерЧто он демонстрируетЛокальная копия
Полный отчётАктивность PostgreSQL вместе со статистикой PgBouncerОткрыть полный отчёт
Инкрементальный отчётКалендарный индекс, еженедельное агрегирование и ежедневные страницыОткрыть индекс инкрементальных отчётов
Ошибки и событияОтчёт, ограниченный ошибками и эксплуатационными событиямиОткрыть отчёт об ошибках

Полный отчёт

Полный отчёт — автономный HTML-документ. С помощью верхней панели навигации можно изучить общую статистику, запросы, сеансы, соединения, временные файлы, контрольные точки, активность autovacuum, блокировки и диаграммы, относящиеся к PgBouncer.

Данные предназначены для демонстрации и не являются актуальным эталоном производительности. Значения, версии PostgreSQL и встроенный интерфейс pgBadger соответствуют дате создания отчёта.

Инкрементальная иерархия

В инкрементальном примере сохранена полная структура ссылок:

report/
├── index.html
├── 2012/
│   ├── week-49/index.html
│   ├── week-50/index.html
│   └── 12/06 … 12/index.html
└── 11/
    ├── pgbadger.min.css
    ├── pgbadger.min.js
    └── bundled chart and UI assets

Верхний индекс содержит ссылки на два еженедельных и семь ежедневных отчётов. Все относительные ссылки сохранены, поэтому перенос одного только index.html нарушит работу примера; переносите всё дерево каталогов целиком.

Безопасность и конфиденциальность

Реальные отчёты могут раскрывать текст SQL, значения параметров, имена баз данных и пользователей, названия приложений, адреса клиентов, сведения об ошибках и характер рабочей нагрузки. Перед публикацией отчёта:

  • используйте --anonymize, если литеральные значения не нужны;
  • применяйте фильтры включения и исключения до создания отчёта;
  • проверяйте окончательный HTML или экспортированные данные, а не только командную строку;
  • защищайте местоположение отчёта так же тщательно, как эксплуатационные журналы.

8 - История выпусков

Полная история изменений pgBadger с 9.x по 13.x, упорядоченная по исходному ChangeLog

Официальный сайт публикует новости о выпусках прямо на главной странице. Эта страница заканчивается версией 12.4 и по ошибке повторяет версии 11.1–11.3 с противоречащими друг другу датами. В этой редакции канонической записью служит зафиксированный ChangeLog исходного проекта: удалены только эти повторные представления и добавлены последующие выпуски 13.x. Записи приведены полностью и в каждой серии упорядочены от новых к старым.

СерияВключённые версииПервый и последний выпускСтраница
13.x13.0–13.22024-12-08 – 2025-12-29Читать о 13.x
12.x12.0–12.42022-09-13 – 2023-12-25Читать о 12.x
11.x11.0–11.82019-06-25 – 2022-04-08Читать о 11.x
10.x10.0–10.32018-09-09 – 2019-02-14Читать о 10.x
9.x9.0–9.22016-09-02 – 2017-07-27Читать о 9.x

Архивы и дополнительные файлы доступны в разделе выпусков GitHub . Даты выпусков в этом разделе относятся к истории исходного проекта, а не ко времени загрузки данного снимка документации.

8.1 - Примечания к выпускам pgBadger 13.x

Полные примечания исходного проекта к серии выпусков pgBadger 13.x

Здесь полностью сохранена история изменений pgBadger 13.x из исходного проекта, от новых версий к старым.

v13.2 · 2025-12-29

Это выпуск pgBadger с исправлениями проблем и патчами, предложенные пользователями после предыдущего выпуска.

  • Исправлена нормализация, некорректно обрабатывавшая сбалансированные строки в одинарных кавычках с экранированными кавычками внутри. Спасибо Bertrand Bourgier за сообщение.
  • Исправлены требования к заполнителям в документации.
  • Исправлен случай, когда примеры строк журнала с ошибками не попадали в отчёт. Спасибо john doe за сообщение.
  • Исправлена возможная проблема приоритета между ! и %s. Спасибо Luca Santarelli и Philipp Trulson за сообщение.
  • Код pgFormatter обновлён до версии 5.9.
  • Добавлено действие GitHub CI для тестирования при отправке коммитов.
  • Исправлен разбор заполнителя %r в log_line_prefix. Спасибо nike7o0 за сообщение.
  • Исправлено предупреждение о неинициализированном значении. Спасибо Ales Zeleny за сообщение.
  • Документация по параметрам SSH для разбора журналов Postgres дополнена примерами. Спасибо Ulrich Konrad за патч.
  • Добавлена команда –ssh-sudo для запуска команд по SSH через sudo. Спасибо Andrew Jackson за патч.
  • Исправлена возможная проблема приоритета между ! и строковым eq. Спасибо Adrien Nayrat за сообщение.
  • Исправлен разбор статистики pgbouncer. Спасибо mrgtt за сообщение.

v13.1 · 2025-03-16

Это выпуск pgBadger с исправлениями проблем, о которых пользователи сообщили после предыдущего выпуска, и добавляет новые возможности:

  • Добавлен новый отчёт о пропускной способности vacuum с диаграммой vacuum по таблицам, потребляющим больше всего процессорного времени. В таблице показано время ввода-вывода для чтения и записи по каждой таблице, а также затраченное на таблицу процессорное время. Спасибо Ales Zeleny за запрос функции. Этот патч также добавляет замороженные страницы и кортежи в отчёт Vacuums per Table.
  • Добавлен параметр –no-fork, полностью отключающий создание дочерних процессов при отладке. Спасибо Ales Zeleny за запрос функции.
  • В необработанный вывод CSV добавлены миллисекунды. Спасибо Henrietta Dombrovskaya за запрос функции.
  • При обработке нескольких файлов в примеры отчётов добавлено имя файла журнала. Спасибо Adrien Nayrat за запрос функции.

Полный список изменений и благодарностей:

  • Исправлен разбор параметров привязки. Спасибо Thomas Kotzian за патч.
  • Фильтр запросов применяется к многострочным запросам. Спасибо Benjamin Jacobs за патч.
  • Обновлён результат теста с учётом изменений в хранении имени файла журнала.
  • Исправлено различие уровней сообщений ERROR и LOG в выводе JSON. Спасибо Philippe Viegas за сообщение.
  • Удалён импорт неэкспортируемого метода tmpdir из File::Temp. Спасибо kmoradha за сообщение.

v13.0 · 2024-12-08

Это основной выпуск pgBadger, исправляющий проблемы, о которых пользователи сообщили после предыдущего выпуска, и добавляющий новые возможности:

  • Добавлены два новых параметра для переопределения границ гистограмм запросов и сеансов. –histogram-query VAL : use custom inbound for query times histogram. Default inbound in milliseconds: 0,1,5,10,25,50,100,500,1000,10000 –histogram-session VAL : use custom inbound for session times histogram. Default inbound in milliseconds: 0,500,1000,30000,60000,600000,1800000,3600000,28800000 Спасибо JosefMachytkaNetApp за запрос функции.
  • Добавлена поддержка плана auto_explain для журналов форматов csv и json. Спасибо zxwsbg и Alexander Rumyantsev за сообщение.
  • В события добавлены три ранее не учитывавшихся сообщения LOG: unexpected EOF, incomplete startup packet и detected deadlock while waiting for. Спасибо dottle за сообщение.

Проблемы обратной совместимости:

  • Изменён способ хранения событий уровня LOG, отображаемых в отчётах Events. Некоторые из них по-прежнему отображались и учитывались как ошибки, а не как записи уровня LOG. Теперь они хранятся и отображаются как EVENTLOG, что отличает их от запросов. Это изменение нарушает обратную совместимость при использовании pgbadger в инкрементальном режиме: смешанное поведение будет наблюдаться только в течение недели обновления. Спасибо Matti Linnanvuori за сообщение.

Исправления ошибок:

  • Исправлено отсутствие запросов, приводящих к наибольшему числу отмен из-за statement_timeout.
  • Обновлены регрессионные тесты.
  • Исправлено форматирование плана explain, извлечённого из журнала формата csv.
  • Исправлено отсутствие данных autovacuum из jsonlog в отчётах Average Autovacuum Duration, Tuples removed per table и почасовых vacuum в отчёте об активности autovacuum. Спасибо Ales Zeleny за патч.
  • Исправлена непривязанная строка, которая не сопоставлялась с затратными по времени запросами привязки. Спасибо Henrietta Dombrovskaya за сообщение. Исправлено использование неинициализированного значения при сопоставлении с шаблоном. Спасибо Junior Dias за патч.
  • Параметр –csv-separator применяется к необработанному экспорту CSV. Разделитель по умолчанию — точка с запятой (;). Спасибо Henrietta Dombrovskaya за запрос функции.
  • В необработанном выводе csv пустые параметры и имя приложения больше не заключаются в двойные кавычки.
  • Запросы, содержащие точку с запятой, заключаются в двойные кавычки в необработанном выводе csv. Спасибо Henrietta Dombrovskaya за сообщение.

8.2 - Примечания к выпускам pgBadger 12.x

Полные примечания исходного проекта к серии выпусков pgBadger 12.x

Здесь полностью сохранена история изменений pgBadger 12.x из исходного проекта, от новых версий к старым.

v12.4 · 2023-12-25

Это выпуск pgBadger с исправлениями проблем, о которых пользователи сообщили после предыдущего выпуска.

  • Исправлен отчёт pgbouncer для версии 1.21. Спасибо Ales Zeleny за патч.
  • Число параллельных процессов Perl больше не может превышать число файлов. Спасибо maliangzhu за сообщение.
  • Исправлен регрессионный тест, не работавший с версии 12.3. Спасибо ieshin за сообщение.
  • Исправлены случаи, когда записи LOG учитывались как записи уровня ERROR. Спасибо Matti Linnanvuori за сообщение.

v12.3 · 2023-11-27

Это выпуск pgBadger с исправлениями проблем, о которых пользователи сообщили после предыдущего выпуска. Он также добавляет новые возможности:

  • Добавлен параметр –include-pid, позволяющий включать в отчёт только события, связанные с PID сеанса (%p). Его можно указывать несколько раз. Спасибо Henrietta Dombrovskaya за запрос функции.
  • Добавлен параметр –include-session, позволяющий включать в отчёт только события, связанные с идентификатором сеанса (%c). Его можно указывать несколько раз. Спасибо Henrietta Dombrovskaya за запрос функции.
  • Добавлен параметр –dump-raw-csv, который только разбирает журнал и выводит сведения в формате CSV. Дальнейшая обработка не выполняется, отчёт не создаётся. Спасибо Henrietta Dombrovskaya за запрос функции.

Полный список изменений и благодарностей:

  • pgFormatter обновлён до версии 5.5.
  • Исправлена конечная дата разбора в формате jsonlog. Спасибо jw1u1 за сообщение.
  • Исправлена опечатка в «Sessions per application». Спасибо fairyfar за патч.
  • Исправлена ошибка диаграммы «INSERT/UPDATE/DELETE Traffic». Спасибо fairyfar за патч.
  • Исправлен разбор непривязанных строк с запросами привязки. Спасибо youxq за сообщение.
  • Исправлен отчёт Analyze per table для новых версий PG. Спасибо Jean-Christophe Arnu за патч.
  • Исправлен анализатор записей syslog, когда отметка времени syslog содержит миллисекунды. Спасибо Pavel Rabel за сообщение.

v12.2 · 2023-08-20

Это выпуск pgBadger с исправлениями проблем, о которых пользователи сообщили после предыдущего выпуска. Он также добавляет две возможности:

  • Добавлена поддержка максимальной, средней и минимальной длительности autovacuum. Спасибо Francisco Reinolds за патч.
  • Добавлена поддержка среднего времени ожидания pgbouncer. Спасибо Francisco Reinolds за патч.

Полный список изменений и благодарностей:

  • Исправлен повреждённый вывод HTML, когда имя приложения содержит <…>. Спасибо Fabio Geiss за сообщение.
  • Исправлено неверное сопоставление непривязанных строк при применении фильтра по базе данных. Спасибо jcasanov за сообщение.
  • Исправлен разбор префикса logplex.
  • Исправлено обнаружение непривязанных строк logplex.
  • Исправлен разбор строки system usage: CPU: ... от autovacuum. Спасибо Francisco Reinolds за патч.
  • При выводе в stdout каталог вывода больше не добавляется в начало пути.
  • Унифицирована подпись Average Query Duration. Спасибо Francisco Reinolds за патч.
  • Обновлена документация по новым параметрам pgbadger. Спасибо Francisco Reinolds за патч.
  • Исправлен случай, когда разбор не прерывался, хотя ни один файловый дескриптор открыть не удалось. Спасибо vp за сообщение.
  • В справку добавлены сведения об обязательных заполнителях журнала %p/%t. Спасибо Christophe Courtois за патч.
  • Исправлен параметр –retention. Спасибо Bertrand Bourgier за патч.
  • Восстановлена удалённая коммитом 0e5c7d5 очистка каталога вывода при заданном каталоге вывода HTML. Спасибо Bertrand Bourgier за сообщение.
  • Исправлено расширение вывода, когда каталог назначения содержит символ, требующий экранирования в регулярном выражении. Спасибо Bertrand Bourgier за патч.
  • Для порта Windows вызовы POSIX::strftime("%s", ….) заменены вызовом localtime. Спасибо Bertrand Bourgier за патч.
  • Исправлена очистка каталога вывода HTML. Спасибо Bertrand Bourgier за патч.
  • Для URL explain по умолчанию используется https. Спасибо Philipp Trulson за патч.

v12.1 · 2023-03-20

Это выпуск pgBadger с исправлениями проблем, о которых пользователи сообщили за предыдущие шесть месяцев.

Полный список изменений и благодарностей:

  • Исправлен разбор многострочных параметров. Спасибо Bekir Niyaz за сообщение.
  • Исправлен сбой нормализации запроса с ::tsrange. Спасибо Philippe Griboval за сообщение.
  • В отчёт событий добавлены точка согласованности и начало логического декодирования для записей журнала слота.
  • Поддержан дополнительный формат «ns + часовой пояс» в отметке времени. Спасибо Ronan Dunklau за сообщение.
  • Исправлено распознавание %m при использовании записи с T. Спасибо Ronan Dunklau за сообщение.
  • Добавлен разбор журналов, создаваемых CloudNativePG. Спасибо codrut panea за патч.
  • Исправлен неиспользуемый параметр –outdir при создании отчёта. Спасибо Frederic Guiet за сообщение.
  • README обновлён последними изменениями документации. Спасибо Manisankar за сообщение.
  • Исправлена опечатка в примерах pgbadger. Спасибо Shinichi Hashiba за патч.

v12.0 · 2022-09-13

Этот основной выпуск pgBadger исправляет проблемы, о которых пользователи сообщили за предыдущие пять месяцев. Как обычно, добавлены новые возможности и улучшения:

  • Удалена поддержка вывода Tsung.
  • Повышена производительность pgbadger при подстановке сотен параметров привязки.
  • Удалён параметр -n | –nohighlight, который не используется после обновления до pgFormatter 4.
  • Для отправки плана auto_explain на explain.depesz.com используется метод POST, что позволяет избежать ограничения длины параметров GET.
  • Параметры –exclude-query и –include-query применяются к трассировкам bind/parse.
  • В документацию добавлена ссылка на примеры отчётов pgBadger.

Полный список изменений и благодарностей:

  • Исправлен сбой месячных отчётов с сообщением «log file … must exists». Спасибо Jaume Sabater за сообщение.
  • Исправлено отладочное сообщение о начале разбора pgbouncer при вводе из stdin. Спасибо aleszeleny за сообщение.
  • Удалена поддержка вывода Tsung.
  • Значительно повышена производительность pgbadger при подстановке параметров привязки: при сотнях параметров pgbadger мог работать бесконечно. Спасибо Monty Mobile за сообщение.
  • Исправлена документация о кодах возврата pgBadger и неверные коды возврата в нескольких местах. Спасибо Jaume Sabater за сообщение.
  • Исправлено несколько опечаток. Спасибо David Gilman за патч.
  • Удалён параметр -n | –nohighlight, который не используется после обновления до pgFormatter 4. Спасибо Elena Indrupskaya за сообщение.
  • Внесено множество исправлений в документацию pgbadger. Спасибо Elena Indrupskay из Postgres Pro за патч.
  • Параметры –log-timezone и –timezone теперь поддерживают получасовой сдвиг: значение может быть целым, например 2, или дробным, например 2.5. Спасибо Mujjamil-K за запрос функции.
  • Для –exclude-app и –exclude-client разрешены регулярные выражения. Спасибо rdnkrkmz за запрос функции.
  • Разрешено использование –explain-url с предыдущим коммитом и восстановлено ограничение на текстовый формат explain.
  • Для отправки плана auto_explain на explain.depesz.com используется метод POST, что позволяет избежать ограничения длины параметров GET. Спасибо hvisage за сообщение.
  • Параметры –exclude-query и –include-query применяются к трассировкам bind/parse. Спасибо Alec Lazarescu за сообщение.
  • Исправлен разбор статистики autovacuum из журналов RDS. Спасибо David Gilman за сообщение.
  • Исправлена передача формата журнала при разборе удалённого журнала. Спасибо spookypeanut за сообщение.
  • В документацию добавлена ссылка на примеры отчётов pgBadger.
  • Исправлены отчёты Session per user. Спасибо vitalca за сообщение.
  • Исправлен разбор jsonlog из PG15.
  • Исправлен текстовый отчёт об ошибках/событиях. Спасибо Michael Banck за патч.
  • Исправлена опечатка в регулярном выражении normalize_error(). Спасибо Michael Banck за патч.

8.3 - Примечания к выпускам pgBadger 11.x

Полные примечания исходного проекта к серии выпусков pgBadger 11.x

Здесь полностью сохранена история изменений pgBadger 11.x из исходного проекта, от новых версий к старым.

v11.8 · 2022-04-08

Этот выпуск pgBadger исправляет проблемы, о которых пользователи сообщили за предыдущие три месяца, и в особенности две ошибки обнаружения новых записей журнала в инкрементальном режиме.

  • Исправлено обнаружение новых записей журнала по отметке времени, когда в log_line_prefix использовались миллисекунды (%m) или эпоха (%n).
  • Исправлено обнаружение новых записей в локальном файле без использования многопроцессной обработки.

Полный список изменений и благодарностей:

  • Полностью пересмотрено и упрощено обнаружение изменений файла журнала.
  • Сообщения “could not (receive|send) data (from|to) client” включены в отчёты Events. Спасибо Adrien Nayrat за сообщение.
  • Исправлена ошибка разбора, когда имя подготовленного запроса содержит символ ‘:’. Спасибо aleszeleny за сообщение.
  • Исправлено обнаружение новых записей журнала по отметке времени с миллисекундами (%m) или эпохой (%n). Спасибо aleszeleny за сообщение.
  • Исправлено обнаружение новых записей в локальном файле без многопроцессной обработки. Спасибо aleszeleny за сообщение.
  • Исправлено обнаружение новых записей в удалённых файлах по SSH. Спасибо Luca Ferrari за сообщение.
  • Устранён мусор в имени пользователя в отчёте “Connections per user”. Спасибо caseyandgina за сообщение.
  • Исправлена команда SSH при использовании URI: ранее параметры SSH отсутствовали. Спасибо Luca Ferrari за сообщение.
  • Добавлена обработка заполнителя queryid %Q. Спасибо Adrien Nayrat за патч.
  • Исправлена опечатка в сообщении об ошибке. Спасибо Luca Ferrari за патч.
  • Сообщение “server process was terminated by signal” включено в отчёт Events. Спасибо Avi Vallarapu за сообщение.
  • В документации исправлено имя файла в команде еженедельного инкрементального отчёта. Спасибо Theophile Helleboid за патч.
  • В t/04_advanced.t исправлен тест syslog. Спасибо Christoph Berg за патч.

v11.7 · 2022-01-23

Этот выпуск pgBadger исправляет проблемы, о которых пользователи сообщили за предыдущие пять месяцев, и содержит ряд улучшений:

  • Добавлен параметр –no-progressbar, скрывающий индикатор выполнения, но сохраняющий остальной вывод.
  • Добавлен параметр –day-report для пересборки HTML-отчёта за указанный день. Он аналогичен –month-report, но работает только для одного дня. Требуются каталоги инкрементального вывода и все необходимые файлы двоичных данных. Значение — дата в формате YYYY-MM-DD.
  • Улучшен разбор журналов Heroku logplex и cloudsql json.

Полный список изменений и благодарностей:

  • Обновлены руководство для участников и Makefile.PL, что улучшает согласованность, ясность и зависимости. Спасибо diffuse за патч.
  • Исправлено использование файла последнего разбора (–last-parsed) в двоичном режиме. Спасибо wibrt за сообщение.
  • Добавлен регрессионный тест использования –last-parsed и исправлен тест отчёта только о временных файлах.
  • Исправлен заголовок диаграммы сеансов по узлам. Спасибо Norbert Bede за сообщение.
  • Исправлен номер недели при расчёте еженедельных отчётов с включёнными –iso-week-number и –incremental. Спасибо hansgv за сообщение.
  • Добавлен –no-progressbar, скрывающий индикатор выполнения и сохраняющий остальной вывод. Спасибо seidlmic за запрос функции.
  • Ограничен чрезмерный вывод строк неизвестного формата в режиме отладки для многострочного jsonlog.
  • Исправлен разбор однострочного журнала cloudsql json. Спасибо Thomas Leclaire за сообщение.
  • Исправлена сводка временных файлов при одном лишь log_temp_files.
  • Отладочное сообщение с -v теперь выводится даже при -q или –quiet.
  • Исправлено автоматическое распознавание файла jsonlog.
  • Исправлен разбор файла журнала cloudsql. Спасибо Luc Lamarle за сообщение.
  • Исправлено извлечение PID в parse_json_input. Спасибо Francois Scala за патч.
  • Добавлен параметр –day-report со значением даты в формате YYYY-MM-DD для пересборки HTML-отчёта за указанный день. Спасибо Thomas Leclaire за запрос функции.
  • Исправлен счётчик запросов в индикаторе выполнения. Спасибо Guillaume Lelarge за сообщение.
  • Исправлены неполные запросы в отчётах самых затратных bind и prepare.
  • Исправлена нормализация идентификатора объекта: в некоторых случаях числа заменялись на ?.
  • Исправлены неформатированные нормализованные запросы с комментарием в начале.
  • Исправлена многострочность формата stderr при использовании –dbname. Спасибо Guillaume Lelarge за сообщение.
  • Исправлено отсутствие отчётов в инкрементальном режиме с –dbname. Спасибо Dudley Perkins за сообщение.
  • Несовместимый двоичный файл больше не вызывает аварийное завершение: pgBadger переходит к следующему файлу. Спасибо Thomas Leclaire за предложение.
  • Анализатор pgbadger адаптирован к изменению формата Heroku logplex. Спасибо François Pietka за сообщение.

v11.6 · 2021-09-04

Этот выпуск pgBadger исправляет проблемы, о которых пользователи сообщили за предыдущие семь месяцев, и содержит ряд улучшений:

  • Добавлено распознавание нового в PG14 Query Id из log_line_prefix. Спасибо Florent Jardin за сообщение.
  • Добавлены расширенные регрессионные тесты с исключением БД и функцией explode. Спасибо MigOps Inc за патч.
  • При использовании –explode создание отчётов выполняется несколькими процессами. Спасибо MigOps Inc за патч и Thomas Leclaire за запрос функции.
  • В инкрементальный режим добавлен –iso-week-number: календарные недели начинаются с понедельника и соответствуют нумерации ISO 8601 от 01 до 53, где неделя 1 — первая неделя, содержащая не менее 4 дней нового года. Спасибо Alex Muntada за запрос функции.
  • Добавлен параметр командной строки –keep-comments, сохраняющий комментарии в нормализованных запросах. Он полезен для различения одинаковых нормализованных запросов. Спасибо Stefan Corneliu Petrea за запрос функции.
  • Пропускаются строки INFO, добавленные в журнал PostgreSQL сторонним ПО. Спасибо David Piscitelli за сообщение.
  • Добавлена совместимость с журналом PostgresPro, где после длительности оператора указаны число строк и размер в байтах. Спасибо panatamann за сообщение.
  • Разбирается время с T, что позволяет использовать отметки времени journalctl. Спасибо Graham Christensen за патч.
  • Улучшен порт для Windows. Спасибо Bertrand Bourgier за патчи.

Важное примечание:

  • Ожидается, что в следующем основном выпуске –iso-week-number станет режимом по умолчанию, а –start-monday будет удалён, поскольку неделя всегда будет начинаться с понедельника. Ради упрощения кода будет удалена возможность начинать еженедельные отчёты с воскресенья.

Полный список изменений и благодарностей:

  • Устранено дублирование предупреждения: “database … must be vacuumed within … transactions”. Спасибо Christophe Courtois за сообщение.
  • Исправлено использование неинициализированной переменной. Спасибо phiresky за сообщение.
  • Улучшено распознавание query id: он может быть отрицательным и считываться из csvlog.
  • Исправлен случай, когда последний файл в инкрементальном режиме всегда разбирался повторно. Спасибо Thomas Leclaire за сообщение.
  • Регулярное выражение формата syslog теперь поддерживает индикатор строки сеанса как из одного целого числа, так и из двух чисел через дефис. Спасибо Timothy Alexander за патч.
  • Параметр –exclude-db исправлен так, чтобы соответствующий отчёт всё равно создавался для журнала json. Спасибо MigOps Inc за патч и Thomas Leclaire за сообщение.
  • Добавлен регрессионный тест для ошибочной версии Storable.
  • Исправлено неинициализированное значение в итераторе подстановки при создании еженедельного отчёта в инкрементальном режиме. Спасибо Thomas Leclaire, Michael Vitale, Sumeet Shukla и Stefan Corneliu Petrea за сообщение.
  • Добавлен параметр ‘g’ для замены всех параметров привязки. Спасибо Nicolas Lutic и Sebastien Lardiere за патч.
  • Улучшена документация. Спасибо Stefan Petrea за патч.
  • Исправлен расчёт часового пояса времени изменения журнала. Спасибо Stefan Petrea за патч.
  • Исправлена фильтрация журнала по начальному/конечному времени.
  • Исправлено неверное сопоставление непривязанных строк многострочных запросов с фильтром по базе данных. Спасибо Abhishek Mehta за сообщение.
  • Исправлены отчёты инкрементального режима, когда параметр –dbname частично игнорировался с параметром “explode” (-E). Спасибо lrevest за сообщение.
  • Обновлены ресурсы JavaScript.
  • Исправлено отображение меню перед переходом в компактный режим при уменьшении экрана. Спасибо Guillaume Lelarge за сообщение.
  • Исправлена поддержка многострочных значений параметров привязки в журнале.
  • К предыдущему патчу применено то же исправление, что и в pgFormatter.
  • Исправлен ещё один случай неинициализированного значения в итераторе подстановки из кода pgFormatter. Спасибо Christophe Courtois за сообщение.
  • Исправлена нормализация запросов. Спасибо Jeffrey Beale за патч.
  • При использовании –dump-all-queries все операторы завершаются точкой с запятой. Спасибо Christian за сообщение.
  • Исправлены опечатка и инициализация типа EOL при нескольких файлах журналов.
  • Добавлено автоматическое определение типа EOL для исправления смещения LAST_PARSED при двухбайтовом EOL в Windows. Спасибо Bertrand Bourgier за патч.
  • Исправлен перенос get_day_of_week() на Windows, где strftime %u не поддерживается. Спасибо Bertrand Bourgier за патч.
  • Исправлен порт для Windows: утилита Perl pl2bat.bat создавала повреждённый pgbadger.bat из-за способа чтения DATA в pgbadger. Спасибо Bertrand Bourgier за патч.
  • Исправлен фильтр начального/конечного времени и добавлен регрессионный тест фильтров отметок времени. Спасибо Alexis Lahouze и plmayekar за сообщение.
  • Исправлено использование неинициализированного значения при сопоставлении с шаблоном, появившееся после обновления pgFormatter. Спасибо arlt за сообщение.

v11.5 · 2021-02-18

Этот выпуск pgBadger исправляет проблемы, о которых пользователи сообщили за предыдущие три месяца, и содержит ряд улучшений:

  • Добавлен отчёт о времени простоя сеансов, рассчитанном по формуле: “total sessions time - total queries time / number of sessions Для достоверного значения должны быть включены log_connection и log_disconnection, а log_min_duration_statement = 0, чтобы журналировались все запросы. Это помогает оценить потерянное время простоя и понять, полезен ли режим транзакций в пулере. Отчёт находится на вкладке “Sessions” раздела “Global Stats” и на вкладке “Sessions” почасовых отчётов “General Activity”.
  • Добавлена анонимизация числовых значений с заменой на 4 случайные цифры.
  • Обновлён форматировщик SQL на базе pgFormatter 5.0.

Полный список изменений и благодарностей:

  • Исправлен разбор многострочного оператора cloudsql. Спасибо Jon Young за сообщение.
  • Добавлен регрессионный тест анонимизации.
  • Исправлена анонимизация, нарушенная усечением maxlength. Спасибо artl за сообщение.
  • Добавлена анонимизация параметров в отчётах о затратных prepare и bind. Спасибо arlt за сообщение.
  • Добавлена поддержка микросекунд в префиксе строки журнала logplex. Спасибо Ross Gardiner за сообщение.
  • Добавлен отчёт о времени простоя сеансов. Спасибо Guillaume Lelarge за запрос функции.
  • Завершён патч поддержки многострочности в формате jsonlog.

v11.4 · 2020-11-24

Этот выпуск pgBadger исправляет проблемы, о которых пользователи сообщили за предыдущие четыре месяца, улучшает поддержку сведений журнала PostgreSQL 13 и добавляет новые возможности:

  • В отчёт “Vacuums per table” добавлены полные сведения autovacuum: использование буферов (попадания, промахи, загрязнения), пропуски из-за закрепления, пропуски замороженных страниц и использование WAL (записи, полные образы страниц, байты). В отчёт “Tuples removed per table” добавлены оставшиеся кортежи, ещё не удаляемые кортежи и оставшиеся страницы. Эти сведения доступны только на вкладке “Table”.
  • Добавлен новый отчёт о распределении причин запуска контрольных точек.
  • Добавлено определение имени приложения из трассировок разрешённого соединения.

Полный список изменений и благодарностей:

  • Исправлена опечатка в сообщении об ошибке. Спасибо Vidar Tyldum за патч.
  • Исправлена ошибка порта Windows “can not load incompatible binary data”. Спасибо Eric Brawner за сообщение.
  • Исправлена опечатка в параметре –html-outdir в справке и документации pgbadger. Спасибо Vidar Tyldum за патч.
  • Исправлено автоматическое распознавание формата jsonlog/cloudsql. Спасибо Jon Young за сообщение.
  • Исправлен разбор журнала CSV из PG v13. Спасибо Kanwei Li за сообщение и Kaarel Moppel за патч.
  • Исправлена сортировка запросов в отчёте о запросах, создающих больше всего временных файлов. Спасибо Sebastien Lardiere за сообщение.
  • В режиме отладки добавлена запись версии pgbadger.

v11.3 · 2020-07-26

Этот выпуск pgBadger исправляет несколько проблем, о которых пользователи сообщили за предыдущие четыре месяца. Он также добавляет новые возможности и параметры командной строки:

  • Добавлено автоматическое распознавание отметки времени UTC, чтобы не применять часовой пояс к диаграммам.
  • Добавлена поддержка формата журнала GCP CloudSQL json.
  • Добавлен параметр –dump-all-queries: pgBadger выводит все запросы в текстовый файл без создания отчёта — только полный список операторов, найденных в журнале PostgreSQL. Параметры привязки вставляются в запросы на соответствующие позиции.
  • Добавлен параметр -Q | –query-numbering для нумерации запросов в выводе при использовании –dump-all-queries или –normalized-only.
  • Добавлен параметр командной строки –tempdir для выбора каталога временных файлов. Он полезен в системах, где запись в /tmp запрещена.
  • Добавлен параметр командной строки –ssh-port для задания порта SSH, отличного от 22. В записи URI порт SSH указывается в форме: ssh://192.168.1.100:2222//var/log/postgresql-11.log

Полный список изменений и благодарностей:

  • Исправлены инкрементальные отчёты для формата журнала jsonlog/cloudsql. Спасибо Ryan DeShone за сообщение.
  • Добавлено автоматическое распознавание отметки времени UTC, чтобы не применять к диаграммам автоматически определённый часовой пояс. Для времени UTC JavaScript применит локальный часовой пояс. Спасибо Brett Stauner за сообщение.
  • Исправлен инкрементальный разбор журналов journalctl, который не работал со второго запуска. Спасибо Paweł Koziol за патч.
  • Исправлен путь к файлу ресурсов при использовании -X и -E. Спасибо Ryan DeShone за сообщение.
  • Исправлен отчёт General Activity о запросах чтения/записи. Спасибо alexandre-sk5 за сообщение.
  • Добавлено отладочное сообщение, когда параллельный режим не используется.
  • Исправлена логика elsif при определении размера файла и лишний пробел, добавлявшийся в команду journalctl с параметром –since. Спасибо Pawel Koziol за патч.
  • Исправлена ошибка “not a valid file descriptor”. Спасибо Pawel Koziol за сообщение.
  • Исправлен инкрементальный режим с файлами RDS. Спасибо Ildefonso Camargo, nodje и John Walsh за сообщение.
  • Добавлен параметр -Q | –query-numbering для нумерации запросов в выводе с –dump-all-queries или –normalized-only. Это облегчает извлечение многострочных запросов из файла вывода внешним сценарием. Спасибо Shantanu Oak за запрос функции.
  • Исправлен разбор журналов cloudsql json при включённом log_min_duration_statement. Спасибо alexandre-sk5 за сообщение.
  • Исправлен неверный ключ хеша пользователей в журнале RDS. Спасибо vosmax за сообщение.
  • Исправлена ошибка изменения несоздаваемого значения массива. Спасибо John Walsh и Mark Fletcher за сообщение.
  • Добавлена поддержка формата журнала GCP CloudSQL json; формат журнала (-f) — jsonlog. Спасибо Thomas Poindessous за запрос функции.
  • Добавлен параметр –dump-all-queries: pgBadger выводит все запросы в текстовый файл без создания отчёта — полный список операторов из журнала PostgreSQL. Параметры привязки вставляются на соответствующие позиции. Уникальные запросы не сортируются, записываются все запросы. Спасибо Shantanu Oak за запрос функции.
  • Добавлена документация параметра –dump-all-queries.
  • Исправлен отчёт vacuum для новой версии PG. Спасибо Alexey Timanovsky за сообщение.
  • Добавлен параметр командной строки –no-process-info, запрещающий менять заголовок процесса для идентификации pgbadger, поскольку некоторые системы этого не допускают. Спасибо Akshay2378 за сообщение.
  • Добавлен параметр командной строки –tempdir для выбора каталога временных файлов. Значение по умолчанию: File::Spec->tmpdir() || ‘/tmp’ Это полезно в системах, где запись в /tmp запрещена. Спасибо Akshay2378 за сообщение.
  • Исправлены неподдерживаемые имена сжатых файлов с пробелами и/или скобками. Спасибо Alexey Timanovsky за сообщение.
  • Добавлен параметр командной строки –ssh-port для задания порта SSH, отличного от 22. В записи URI порт SSH указывается в форме: ssh://192.168.1.100:2222//var/log/postgresql-11.log Спасибо Augusto Murri за запрос функции.

v11.2 · 2020-03-11

Этот выпуск pgBadger исправляет несколько проблем, о которых пользователи сообщили за предыдущие шесть месяцев. Он также добавляет новые возможности:

  • Добавлены поддержка и автоматическое распознавание формата журнала AWS Redshift.

  • Добавлена поддержка нового формата журнала pgbouncer 1.11.

  • Добавлена обработка форматов сжатия zstd и lz4.

  • В инкрементальном режиме построение статистики полностью отделено от построения HTML-отчёта без необходимости читать файл журнала. Например, pgbadger можно запускать каждый час следующим образом:

    pgbadger -I -O "/out-dir/data" --noreport /var/log/postgresql*.log
    

    Команда только создаёт двоичные файлы данных в “/out-dir/data”. Затем, например, каждую ночь можно создавать отчёты за прошедший день в отдельном каталоге /out-dir/reports:

    pgbadger -I -l "/out-dir/data/LAST_PARSED" -H "/out-dir/reports" /out-dir/data/2020/02/19/*.bin
    

    Для этого нужно указать путь к сведениям о последнем разборе, путь для записи HTML-отчётов и файл двоичных данных за день.

Также добавлены новые параметры командной строки:

  • Добавлен параметр командной строки –explain-url для переопределения URL графического инструмента explain. URL по умолчанию:

    http://explain.depesz.com/?is_public=0&is_anon=0&plan=
    

    Это позволяет использовать локальную установку PgExplain или другой инструмент. pgBadger добавит экранированный план в текстовом формате в конец URL.

  • Добавлен параметр –no-week, запрещающий pgbadger строить еженедельные отчёты в инкрементальном режиме. Он полезен, если это занимает слишком много времени и ресурсов.

  • Добавлен параметр командной строки –command для задания команды, которую pgBadger выполнит, чтобы получить записи журнала через стандартный ввод. pgBadger откроет канал к команде и разберёт созданные ею записи журнала. Например:

    pgbadger -f stderr –command ‘cat /var/log/postgresql.log’

    Это равнозначно запуску pgbadger с непосредственной передачей файла журнала в качестве аргумента. Параметр полезен, если файл журнала требуется менять на лету либо записи извлекаются программой или создаются из базы данных. Например:

    pgbadger -f csv –command ‘psql dbname -c “COPY jrn_log TO STDOUT (FORMAT CSV)”’

  • Добавлен параметр командной строки –noexplain, запрещающий pgBadger разбирать и отображать план explain, записанный в журнал расширением auto_explain. Он полезен для PostgreSQL версии ниже 9.0, где наличие плана explain в журнале приводит к повреждённым отчётам pgBadger.

Обратная совместимость:

  • По умолчанию pgBadger усекает запросы до 100000 символов. Это условное значение можно изменить параметром –maxlength. Ранее запросы не усекались, что могло приводить к чрезмерному расходу ресурсов. Ограничение размера по умолчанию безопаснее и в большинстве случаев не приводит к усечению. Однако запросы длиннее 25000 символов форматироваться не будут.

Полный список изменений и благодарностей:

  • Исправлен неработавший параметр –exclude-client. Спасибо John Walsh за сообщение.
  • Добавлен регрессионный тест разбора журнала RDS и –exclude-client.
  • Исправлен индикатор выполнения для журнала pgbouncer. Для журналов pgbouncer подпись “queries” заменена на “stats”.
  • Добавлен параметр командной строки –explain-url для переопределения URL графического инструмента explain. Спасибо Christophe Courtois за запрос функции.
  • Добавлена поддержка нового формата журнала pgbouncer 1.11. Спасибо Dan Aksenov за сообщение.
  • Добавлена обработка форматов сжатия zstd и lz4. Спасибо Adrien Nayrat за патч.
  • Добавлены поддержка и автоматическое распознавание формата журнала AWS Redshift. Спасибо Bhuvanesh за запрос функции.
  • Обновлена документация формата журнала Redshift.
  • Добавлен параметр –no-week, запрещающий pgbadger строить еженедельные отчёты в инкрементальном режиме. Спасибо cleverKermit17 за запрос функции.
  • Исправлено сопоставление пути файла с шаблоном, нарушавшее работу pgBadger в Windows.
  • Исправлена задача #554 о кириллице и других кодированных параметрах операторов, которые неверно отображались в HTML-отчёте даже с пользовательской кодировкой. Регрессия появилась после исправления известной ошибки Perl “Wide character in print”. Тот патч отменён, а для возврата такого поведения добавлен параметр –wide-char. Добавьте его в команду pgbadger, если видите сообщение “Wide character in print”. Добавлен регрессионный тест с кириллицей и французской кодировкой. Спасибо 4815162342lost и yethee за сообщение.
  • В документации указано, что lc_messages = ’en_US.UTF-8’ также допустимо. Спасибо nodje за сообщение.
  • Обновлена документация –maxlength: размер усечения по умолчанию теперь равен 100000 вместо отсутствия усечения. Спасибо nodje за сообщение.
  • Исправлен расчёт срока хранения на границе года. Спасибо Fabio Pereira за патч.
  • Исправлен разбор формата журнала rds. Спасибо Kadaffy Talavera за сообщение.
  • При отсутствии новых записей журнала в инкрементальном режиме пустой индексный файл больше не создаётся. Спасибо Kadaffy Talavera за сообщение.
  • Обновлена устаревшая документация. Спасибо Eric Hanson за патч.
  • Параметр командной строки исправлен с -no-explain на -noexplain. Спасибо Indrek Toom за патч.
  • Если totalsize определить невозможно, используется размер файла по умолчанию. Спасибо Adrien Nayrat за патч.
  • Исправлены даты в примерах. Спасибо Greg Clough за патч.
  • В оставшемся тесте используется регулярное выражение расширений сжатых файлов, а расширение .bin выделено в отдельное условие.
  • Добавлена обработка форматов сжатия zstd и lz4. Спасибо Adrien Nayrat за патч.
  • Исправлен оставшийся вызов SIGUSR2 в Windows. Спасибо inrap за сообщение.
  • Исправлен индикатор выполнения для файла журнала неопределённого размера.
  • Добавлен параметр командной строки –command для задания команды, которую pgBadger выполнит, чтобы получить записи журнала через стандартный ввод. Спасибо Justin Pryzby за запрос функции.
  • Добавлен параметр командной строки –noexplain, запрещающий pgBadger разбирать и отображать план explain, записанный в журнал расширением auto_explain. Это полезно для PostgreSQL версии ниже 9.0, где наличие плана explain в журнале приводит к повреждённым отчётам pgBadger. Спасибо Massimo Sala за запрос функции.
  • Исправлен разбор журнала RDS, когда префикс задан в командной строке. Спасибо Bing Zhao за сообщение.
  • Исправлен инкрементальный режим с форматом журнала rds. Спасибо Bing Zhao за сообщение.
  • Исправлен ещё один возможный сбой разбора журнала rds. Спасибо James van Lommel и Simon Dobner за сообщение.
  • Исправлена классификация операторов и добавлен регрессионный тест. Спасибо alexanderlaw за сообщение.
  • Исправлена анонимизация одиночных символов в предложении IN. Спасибо Massimo Sala за сообщение.
  • Исправлен разбор строк журнала RDS без сведений о клиенте/пользователе/БД. Спасибо Konrad за сообщение.

v11.1 · 2019-09-16

Этот выпуск pgBadger исправляет несколько проблем, о которых пользователи сообщили за три месяца. Он также добавляет новые возможности и отчёты:

  • Добавлен отчёт о первых N запросах, занимающих больше всего времени на этапе prepare или parse.
  • Добавлен отчёт о первых N запросах, занимающих больше всего времени на этапе bind.
  • Добавлен отчёт о длительности этапов prepare/bind/execute запросов. Он отображается на новой вкладке “Duration” отчёта Global Stats. Пример: Total query duration: 6m16s Prepare/parse total duration: 45s564ms Bind total duration: 4m46s Execute total duration: 44s71m Также исправлен прежний показатель “Total query duration”, который отражал только суммарную длительность execute.
  • Добавлена автоматически распознаваемая поддержка форматов журналов RDS и CloudWatch. Если pgbadger не может определить формат автоматически, используйте -f rds.
  • Добавлен параметр конфигурации –month-report для построения ежемесячных инкрементальных отчётов.
  • Восстановлена поддержка операционной системы Windows.

Также исправлены ошибки и улучшены возможности.

  • В README.md добавлена автоматически создаваемая Markdown-документация с помощью pod2markdown. Если команда отсутствует, файл просто не создаётся. Спасибо Derek Yang за патч.
  • Действие WITH преобразуется в CTE; исправлена регрессия прошлого выпуска.
  • Исправлена поддержка операционной системы Windows.
  • Добавлена поддержка форматов журналов RDS и CloudWatch; если pgbadger не определяет формат автоматически, используйте -f rds. Спасибо peruuparkar за запрос функции.
  • Исправлен параметр -f | –format: при сбое автоматического определения формата он применялся не ко всем файлам из списка параметров, а брался из первого разобранного файла. Спасибо Levente Birta за сообщение.
  • В исходном файле документации ссылка на pgBadger v7.x заменена на v11. Спасибо Will Buckner за патч.
  • Ограничена высота отображения самых частых запросов, чтобы огромные запросы не занимали всю страницу. Спасибо ilias ilisepe1 за патч.
  • Исправлен выход запросов и подробностей за границы в Slowest individual queries.
  • Исправлены URI SSH для файлов, каталогов и подстановочных знаков. Спасибо tbussmann за патч.
  • Исправлены примеры URI в документации. Спасибо tbussmann за патч.
  • При использовании –rebuild скрывается сообщение о файле вывода по умолчанию.
  • В вывод usage() добавлена дополнительная новая строка, чтобы документация POD не повреждалась при сборке.
  • В документацию повторно добавлено описание –exclude-client. Спасибо Christoph Berg за сообщение.

v11.0 · 2019-06-25

Этот выпуск pgBadger добавляет несколько важных возможностей и исправляет проблемы, о которых пользователи сообщили за предыдущие четыре месяца. Новые возможности:

  • Запросы, относящиеся к курсорам (DECLARE,CLOSE,FETCH,MOVE), объединены в новый тип запросов CURSOR.

  • Добавлен список запросов bind, создающих больше всего временных файлов. Требуется включить log_connection и log_disconnection.

  • Добавлен параметр командной строки –exclude-client для исключения записей журнала с указанным IP-адресом клиента. Его можно указывать несколько раз.

  • В фильтрах –begin и –end разрешено указывать только время.

  • Добавлен параметр -H, –html-dir для выбора отдельного пути записи HTML- отчётов в инкрементальном режиме. Двоичные файлы остаются в каталоге, заданном параметром -O, –outdir.

  • Добавлен параметр -E | –explode для разделения основного отчёта на один отчёт для каждой базы данных. Общие сведения, не относящиеся к конкретной базе, добавляются в отчёт базы postgres.

  • В инкрементальный режим добавлены отчёты по отдельным базам данных. Для каждой базы создаётся подкаталог со своими инкрементальными отчётами.

  • Добавлена поддержка формата PostgreSQL logplex от Heroku. Журнал можно разобрать командой:

    heroku logs -p postgres | pgbadger -f logplex -o heroku.html -

  • Если запрос превышает 10 КБ, сначала все постоянные строковые параметры ограничиваются 30 символами, а затем запрос усекается до 10 КБ. Это не позволяет pgbadger тратить чрезмерное время или зависать на очень длинных запросах, например при вставке bytea. Предел 10 КБ настраивается параметром командной строки –maxlength. Запрос нормализуется или усекается до maxlength лишь после этой первой попытки уменьшить размер.

Новый выпуск нарушает обратную совместимость со старыми двоичными файлами и файлами JSON. Поэтому инкрементальный режим не сможет читать старые двоичные файлы. Если вы хотите обновить pgBadger и сохранить старые отчёты, выполняйте обновление в начале новой недели, иначе еженедельный отчёт будет повреждён. pgBadger выведет предупреждение и пропустит старый двоичный файл.

Также исправлены ошибки и улучшены возможности.

  • Добавлено предупреждение о версии, несовместимый двоичный файл пропускается.
  • Форматировщик кода обновлён до pgFormatter 4.0.
  • Исправлено зависание pgbadger в Windows. Спасибо JMLessard за сообщение.
  • Сценарий tools/pgbadger_tools обновлён для совместимости с новым двоичным форматом файлов pgBadger v11.
  • Добавлен список запросов bind, создающих больше всего временных файлов. Сбор возможен, только если в postgresql.conf включены log_connection и log_disconnection. Спасибо Ildefonso Camargo за запрос функции.
  • Исправлено автоматическое определение часового пояса. Спасибо massimosala за исправление.
  • Удалены оставшиеся диаграммы при использовании –nograph.
  • При использовании –normalized-only принудительно применяется расширение .txt.
  • Исправлен отчёт auto vacuum/analyze для формата logplex. Спасибо Konrad zichul за сообщение.
  • Исправлено использование индикатора выполнения в Windows. Спасибо JMLessard за сообщение.
  • Для хранения времени журнала используется $prefix_vars{'t_time'}. Спасибо Luca Ferrari за патч.
  • Из справки и документации вызовов pgbadger удалена команда perl. Спасибо Luca Ferrari за патч.
  • В begin и end можно использовать время без даты. Спасибо Luca Ferrari за патч.
  • В README внесены небольшие орфографические и грамматические исправления. Спасибо ofni yratilim за патч.
  • Исправлены удалённые пути с SSH. Спасибо Luca Ferrari за патч.
  • Регрессионный тест обновлён для новой структуры, появившейся с отчётами по БД.
  • Исправлены дробные секунды во всех параметрах begin и end. Спасибо Luca Ferrari за патч.
  • Исправлен URL документации. Спасибо Kara Mansel за сообщение.
  • Исправлен разбор auto_explain. Добавлены сведения о том, что параметр -U можно указывать несколько раз. Спасибо Douglas J Hunley за сообщение.
  • Внесено множество улучшений в HTML/CSS отчётов. Спасибо Pierre Giraud за патчи.
  • Обновлён файл ресурсов.
  • Добавлен регрессионный тест формата logplex.
  • Добавлена поддержка формата PostgreSQL logplex от Heroku. Такие журналы можно разбирать следующим образом: heroku logs -p postgres | pgbadger -f logplex -o heroku.html - или, если вывод уже сохранён в файл: pgbadger heroku.log Формат logplex определяется автоматически, как и другие поддерживаемые форматы. pgBadger понимает следующий стандартный log_line_prefix: database = %d connection_source = %r sql_error_code = %e или сокращённый вариант: sql_error_code = %e Сообщите о других стандартных log_line_prefix. Префикс всегда можно задать параметром pgbadger -p | –prefix: pgbadger –p ‘base = %d source = %r sql_state = %e’ heroku.log например. Спасибо Anthony Sosso за запрос функции.
  • Исправлена справка pgbadger по использованию URI.
  • Исправлена подстановка в URI SSH, нарушенная предыдущим патчем. Спасибо Tobias Bussmann за сообщение.
  • Разрешены URI с пробелом в пути к файлу журнала. Спасибо Tobias Bussmann за сообщение.
  • Исправлены примеры URI в документации. Спасибо Tobias Bussmann за патч.
  • t/02_basics.t больше не завершается ошибкой, если тест syslog длится более 10 секунд. Спасибо Christoph Berg за патч.

8.4 - Примечания к выпускам pgBadger 10.x

Полные примечания исходного проекта к серии выпусков pgBadger 10.x

Здесь полностью сохранена история изменений pgBadger 10.x из исходного проекта, от новых версий к старым.

v10.3 · 2019-02-14

Это выпуск pgBadger с исправлениями нескольких проблем автоматического определения формата журнала и ещё одну ошибку разбора журнала pgBouncer, о которых сообщили пользователи. Также добавлена новая возможность:

Параметр -o | --outfile теперь можно указывать несколько раз, чтобы одной
командой вывести результат в нескольких форматах. Например:
    pgbadger -o out.html -o out.json /log/pgsql-11.log
создаст два отчёта в форматах HTML и JSON и сохранит их в соответствующих
файлах.

Также исправлены ошибки и улучшены возможности.

  • Исправлены статистические отчёты с фильтром по базе данных, пользователю, клиенту или приложению: некоторые запросы не попадали в отчёт.
  • Исправлено автоматическое распознавание стандартного префикса строки журнала pg>=10.
  • Исправлено автоматическое распознавание файла журнала с «нестандартным» префиксом. Если –prefix содержит %t, %m или %n и %p либо %c, выбирается формат stderr. Спасибо Alex Danvy за сообщение.
  • Удалён лишний пробел в конце строки.
  • Добавлен минимальный тест анализатора syslog.
  • Исправлен вызов autodetect_format().
  • При использовании maxlength оператор усекается. Спасибо Thibaud Madelaine за патч.
  • Добавлен тест нескольких форматов вывода.
  • Параметр -o | –outfile теперь можно указывать несколько раз, чтобы одной командой вывести результат в нескольких форматах. Например: pgbadger -o out.txt -o out.html -o - -x json /log/pgsql-11.log Здесь pgbadger создаст два отчёта в текстовом формате и HTML, сохранит их в соответствующих файлах и выведет отчёт JSON в стандартный вывод. Спасибо Nikolay за запрос функции.
  • Определение формата вывода и назначение имени выходного файла перенесены в отдельную функцию set_output_extension().
  • Исправлена ещё одна ошибка разбора журнала pgBouncer. Спасибо Douglas J. Hunley за сообщение.

v10.2 · 2018-12-27

Это выпуск pgBadger с исправлениями проблем, о которых пользователи сообщили за предыдущие три месяца. Также добавлены новые возможности:

  • Добавлена поддержка формата журнала Stats из pgbouncer 1.8.
  • Добавлена автоматическая корректировка часового пояса диаграмм JavaScript.

Добавлены новые параметры командной строки:

  • Добавлен параметр –exclude-db для построения отчёта обо всём, кроме указанной базы данных.

  • Добавлена загрузка удалённого файла журнала PostgreSQL по HTTP или FTP. Журнал разбирается во время загрузки командой curl и не сохраняется на диск. При удалённом разборе по SSH файл журнала PostgreSQL можно указать аргументом URI командной строки.

        ssh://localhost/postgresql-10-main.log
        http://localhost/postgresql-10-main.log.gz
        ftp://localhost/postgresql-10-main.log
    

    Для протоколов HTTP и FTP формат журнала нужно указать в конце URI:

        http://localhost/postgresql-10-main.log:stderr
    

    Можно указать несколько URI файлов журналов для разбора. Это полезно, когда журнал pgbouncer находится на удалённом узле, а журналы PostgreSQL — на локальном.

    С протоколом SSH также можно использовать подстановочные знаки, как в удалённом режиме, например: ssh://localhost/postgresql-10-main.log*

    Старый синтаксис разбора удалённого журнала с параметром -r по-прежнему работает, но устарел и может быть удалён в будущих версиях.

Также исправлены ошибки и улучшены возможности.

  • Скорректировано завершение индикатора выполнения для файлов с оценочным размером (сжатых bz2 и удалённых сжатых файлов).
  • Обновлён год в уведомлении об авторских правах.
  • Добавлены сведения о записи URI для разбора удалённых журналов.
  • По завершении разбора удалённого сжатого файла индикатор принудительно достигает 100%.
  • Из запросов в отчётах о временных файлах извлекаются сведения о вызовах функций PL/pgSQL и добавляются в блок подробностей.
  • Исправлен индикатор выполнения для файлов csv.
  • Исправлено чтение двоичного файла как входного файла вместо журнала.
  • HTML-вывод запросов кодируется в UTF8 во избежание сообщения “Wide character in print”. Спасибо Colin ’t Hart за сообщение.
  • Для пикового расстояния добавлена пара ключ/значение Checkpoints distance.
  • Исправлены разбор pgbouncer и отчёты о пропускной способности запросов. Спасибо Levente Birta за сообщение.
  • Для формата ввода исправлено использование csvlog вместо csv.
  • Добавлена поддержка формата журнала Stats из pgbouncer 1.8. Спасибо Levente Birta за сообщение.
  • Добавлено предупреждение об отключении параллельной обработки с csvlog. Спасибо cstdenis за сообщение.
  • В справку по -j и -J добавлены сведения о принудительном одном процессе для формата csvlog. Спасибо cstdenis за сообщение.
  • Исправлена ошибка неизвестного формата строки в многострочном журнале при инкрементальном анализе по SSH. Спасибо Wooyoung Cho за сообщение.
  • В команду curl добавлен параметр -k (–insecure) для загрузки журналов с сервера с самоподписанным сертификатом.
  • Добавлена автоматическая корректировка часового пояса диаграмм JavaScript. Спасибо Massimino Sala за запрос функции.
  • Добавлена загрузка файла журнала по HTTP средствами pgBadger, например: /usr/bin/pgbadger http://www.mydom.com/postgresql-10.log
  • Файл разбирается во время загрузки командой curl.
  • Исправлена документация. Спасибо 0xflotus за патч.
  • После дополнительной очистки кода повторно применено исправление отсутствующей подстановки параметров привязки. Спасибо Bernhard J. M. Grun за сообщение.
  • Добавлен параметр –exclude-db для отчёта обо всём, кроме указанной базы данных. Параметр можно указывать несколько раз.

v10.1 · 2018-09-12

Это выпуск pgBadger с исправлениями отчётов в инкрементальном режиме и многопроцессную обработку с параметром -j. Разбор журнала из стандартного ввода также был нарушен. Если вы используете v10.0, обновитесь сейчас.

  • Добавлен тест анализатора журнала pgbouncer.
  • Немного повышена производительность.
  • Исправлена ошибка недопустимого файлового дескриптора в строке 12314 pgbadger.
  • Удалён нежелательный перевод строки в индикаторе выполнения при запуске.
  • Файлы CircleCI удалены из проекта.
  • Удалены зависимости bats и jq для набора тестов; их заменили Test::Simple и JSON::XS.
  • Добавлено больше тестов, особенно для инкрементального режима и ввода из stdin, нарушенного в версии 10.0.
  • Синхронизированы pgbadger, POD и README, исправлены синтаксические ошибки. Спасибо Christoph Berg за патч.
  • Добавлена документация по установке модуля Perl JSON::XS из репозиториев apt и yum.
  • Исправлен URI CSS в инкрементальном режиме. Спасибо Floris van Nee за сообщение.
  • Исправлена критическая ошибка при поиске журнала в STDIN. Спасибо Jacek Szpot за сообщение.
  • Исправлено использование SED при сборке в OSX. Спасибо Steve Newson за патч.
  • Исправлено недопустимое деление на ноль в инкрементальном режиме. Спасибо aleszeleny за сообщение.
  • SQL::Beautify заменён версией 3.1 pgFormatter::Beautify.

v10.0 · 2018-09-09

Это основной выпуск pgBadger, добавляющий новые возможности и исправляющий все проблемы, о которых пользователи сообщили после предыдущего выпуска.

  • Добавлена поддержка формата файла журнала pgbouncer syslog.
  • Добавлена поддержка всех форматов auto_explain (text, xml, json и yaml).
  • Добавлена поддержка заполнителя %q в log_line_prefix.
  • Добавлен формат jsonlog расширения Michael Paquier; pgbadger сможет разобрать такой журнал с -f jsonlog.
  • Форматировщик SQL заменён версией 3.0 pgFormatter.

Добавлены новые параметры командной строки:

  • Добавлен параметр –prettify-json для форматирования вывода JSON.
  • Добавлен параметр –log-timezone +/-XX, задающий число часов смещения часового пояса от GMT для корректировки даты/времени из журнала перед разбором. Если часовой пояс клиента отличается, возможно, всё равно потребуется скорректировать часовой пояс диаграммы с помощью -Z.
  • Добавлен параметр –include-time, позволяющий выбрать нужные интервалы вместо исключения всех ненужных интервалов через –exclude-time.

Проект pgBadger и авторские права переданы от Dalibo автору и официальному сопровождающему проекта. Обновите ссылки:

Я хочу поблагодарить замечательную команду Dalibo за многолетний вклад в pgBadger, особенно Damien Clochard и Jean-paul Argudo за помощь в продвижении pgBadger.

  • Исправлено отсутствие расстояния и оценки контрольных точек в инкрементальном режиме. Спасибо aleszeleny за сообщение.
  • Исправлен заголовок отчёта одновременных сеансов pgbouncer. Спасибо Jehan Guillaume De Rorthais за сообщение.
  • Добавлена поддержка формата журнала pgbouncer syslog. Спасибо djester за запрос функции.
  • Исправлена ошибка при пустом удалённом журнале. Спасибо Parasit Hendersson за сообщение.
  • Исправлен тест двоичного формата. Двоичный файл нужно генерировать, поскольку он зависит от платформы. Спасибо Michal Nowak за сообщение.
  • Исправлен случай создания пустого плана explain.
  • Исправлен разбор автоматически распознанного стандартного формата с префиксом в командной строке.
  • Из Makefile.PL удалена зависимость от команды git.
  • Обновлена документация изменений параметров и удаления части [%l-1] из обязательного префикса.
  • Исправлен разбор системного использования vacuum/analyze в PostgreSQL 10. Спасибо Achilleas Mantzios за патч.
  • Исправлена таблица Temporary File Activity.
  • Удалена зависимость от git при установке.
  • Добавлен параметр –log-timezone +/-XX, задающий число часов смещения от GMT для корректировки даты/времени из журнала перед разбором. Он затрудняет поиск по дате/времени, поскольку время будет отличаться от записанного в журнале. Если часовой пояс клиента отличается, возможно, всё равно придётся корректировать часовой пояс диаграмм с помощью -Z. Спасибо xdexter за запрос функции и Julien Tachoire за патч.
  • Добавлена поддержка формата вывода auto_explain json. Спасибо dmius за сообщение.
  • Исправлены анализатор auto_explain и двойной учёт запросов. Спасибо zam6ak за сообщение.
  • Регулярное выражение контрольных точек адаптировано к сообщениям журнала PostgreSQL 10. Спасибо Edmund Horner за патч.
  • В описание -f | –format добавлены сведения о формате jsonlog.
  • Исправлена нормализация запросов, чтобы не создавать дубликаты запросов bind. Значения теперь нормализуются в один ?, а не в 0 для чисел и две одинарные кавычки для строк. Спасибо vadv за сообщение.
  • Исправлен подсчёт уровней журнала. Спасибо Jean-Christophe Arnu за сообщение.
  • pgbadger приведён в большее соответствие с проверкой голых имён подпрограмм B::Lint.
  • Устранены замечания perlcritic.
  • Добавлен параметр –prettify-json для форматирования вывода JSON. По умолчанию весь вывод занимает одну строку.
  • Исправлен отчёт распределения Events.
  • Исправлена ошибка –prefix при нескольких %% в log_line_prefix. Спасибо svb007 за сообщение.
  • Добавлен параметр –log-timezone +/-XX, задающий число часов смещения от GMT для корректировки даты/времени из журнала перед разбором. Он затрудняет поиск по дате/времени, поскольку время будет отличаться от записанного в журнале. Если часовой пояс клиента отличается, возможно, всё равно придётся корректировать диаграммы с помощью -Z. Спасибо xdexter за запрос функции.
  • INDEXES удалено из списка ключевых слов, а BUFFERS добавлено.
  • Исправлена нормализация запросов с курсорами.
  • Удалены Dockerfile и документация docker run. pgBadger поставляется как один сценарий Perl без зависимостей и работает на любой платформе. Запускать pgbadger в Docker не имеет смысла: если вы не хотите ничего устанавливать, просто скопируйте файл pgbadger в нужное место и запустите его.
  • Исправлена повреждённая сетка при отсутствии активности временных файлов. Спасибо Pierre Giraud за патч.
  • В документацию добавлено предупреждение о log_min_duration_statement в сравнении с log_duration + log_statement. Спасибо Julien Tachoire за патч.
  • Смещение часового пояса применяется к столбчатым диаграммам. Спасибо Julien Tachoire за патч.
  • При ошибке для того же PID удаляются текущие сведения о временном файле. Спасибо Julien Tachoire за патч.
  • В примерах последовательно используется app= и поддерживается appname=. В некоторых примерах префикса использовалось appname=, но код не распознавал этот токен. Теперь во всех примерах используется app=, а appname= добавлен в анализатор префикса. Спасибо Christoph Berg за патч.
  • Исправлено длинное имя параметра -J: должно быть –Jobs вместо –job_per_file. Спасибо Chad Trabant за сообщение и Etienne Bersac за патч.
  • Файлы blib игнорируются. Спасибо Etienne Bersac за патч.
  • Добавлены тесты согласованности. Спасибо damien clochard за патч.
  • Документация обновлена: stderr не является значением -f по умолчанию. Спасибо Christophe Courtois за патч.
  • POD и README всегда обновляются. Спасибо Etienne Bersac за патч.
  • Добавлены регрессионные тесты. Спасибо Etienne Bersac за патч.
  • Добавлена конфигурация editorconfig. Спасибо Etienne Bersac за патч.
  • Временные файлы vi удалены из gitignore. Спасибо Etienne Bersac за патч.
  • Добавлен параметр –include-time, позволяющий выбрать нужные интервалы, вместо исключения всех ненужных. Это удобно для просмотра одного-двух дней из недельных журналов: несколько –exclude-time заменяются одним –include-time. Спасибо Wesley Bowman за патч.
  • Проверяется синтаксис POD. Спасибо Etienne Bersac за патч.
  • Для документирования тестов добавлен HACKING. Спасибо Etienne Bersac за патч.
  • Удалён устаревший параметр –bar-graph. Спасибо Etienne Bersac за патч.
  • Удалён вводящий в заблуждение .perltidyrc. Файл датирован 2012 годом, а код pgbadger далёк от соответствия ему; унифицированный diff perltidy занимает 10 тысяч строк. Спасибо Etienne Bersac за патч.
  • Исправлено использование неинициализированного значения при форматировании SQL. Спасибо John Krugger и Jean-paul Argudo за сообщения.

8.5 - Примечания к выпускам pgBadger 9.x

Полные примечания исходного проекта к серии выпусков pgBadger 9.x

Здесь полностью сохранена история изменений pgBadger 9.x из исходного проекта, от новых версий к старым.

v9.2 · 2017-07-27

Этот выпуск pgBadger с исправлениями добавляет несколько новых возможностей.

  • Добавлен отчёт о расстоянии и оценке контрольных точек.
  • В форматировщик кода SQL добавлена поддержка ключевых слов AWS Redshift.
  • В удалённый режим добавлено автоматическое определение формата журнала, позволяющее удалённо разбирать журнал pgbouncer вместе с журналом PostgreSQL.

Также исправлены ошибки и улучшены возможности.

  • Исправлены отчёты с гистограммой, не отображавшей данные выше последнего диапазона.
  • Исправлен разбор journalctl без шаблона номера строки журнала ([%l-n]). Спасибо Christian Schmitt за сообщение.
  • Добавлен отчёт о расстоянии и оценке контрольных точек. Спасибо jjsantam за запрос функции.
  • Дополнено описание действий сценария обновления файлов CSS и JavaScript tools/updt_embedded_rsc.pl.
  • Если все файлы журналов пусты, предупреждение не выводится, код завершения — 0.
  • В build_log_line_prefix_regex() исправлено отсутствие %n при поиске в %regex_map. Спасибо ghosthound за патч.
  • Уровень ошибки “FATAL: cannot use CSV” изменён на WARNING. Спасибо kong1man за сообщение.
  • Исправлено предупреждение об использовании неинициализированного значения. Спасибо Payal за сообщение.
  • Permission denied добавлено в нормализацию ошибок.
  • pgbadger обновлён до последнего коммита pgFormatter 5bdc018.
  • Добавлена поддержка ключевых слов AWS Redshift. Спасибо cavanaug за запрос функции.
  • Исправлено отсутствие запроса в отчёте о временных файлах, если запрос был отменён. Спасибо Fabrizio de Royes Mello за сообщение.
  • Запрос с параметрами привязки нормализуется с заменой на ?.
  • Добавлена проверка, предотвращающая конечное время раньше начального. Спасибо Christophe Courtois за патч.
  • Исправлено множество опечаток и грамматических ошибок. Название ‘pgBadger’ используется для программы, но не двоичного файла; применяются официальные написания PgBouncer, GitHub и CSS. Файл POD синхронизирован с README. Спасибо Euler Taveira за патч.
  • Исправлено меню: при –disable-type проверка top_cancelled_info и закрытие списка должны находиться внутри проверки disable_type. Заодно выровнена проверка disable_lock. Спасибо Euler Taveira за патч.
  • Исправлено использование неинициализированного значения. Спасибо johnkrugger за сообщение.
  • Удалена попытка читать удалённый файл журнала при автоматическом определении формата. Спасибо clomdd за сообщение.
  • В удалённый режим добавлено автоматическое определение формата для разбора журнала pgbouncer вместе с журналом PostgreSQL.
  • Исправлено неверное увеличение числа сеансов после проверки строки журнала. Спасибо Achilleas Mantzios за сообщение.
  • Незначительно переформатировано описание pgBadger.
  • Удалены повторяющиеся сведения из документации. Спасибо cscatolini за патч.

v9.1 · 2017-01-24

Этот выпуск pgBadger с исправлениями добавляет несколько новых возможностей.

  • Добавлен отчёт о распределении классов ошибок, когда SQLState доступен в log_line_prefix (см. заполнитель %e).
  • Форматировщик SQL обновлён до кода pgFormatter v1.6.
  • Улучшена нормализация сообщений об ошибках.
  • Добавлен параметр –normalized-only для создания текстового файла со всеми найденными в журнале нормализованными запросами и их количеством.
  • Разрешено использовать %c (идентификатор сеанса) вместо %p (PID) как уникальный идентификатор сеанса.
  • Сообщения об ожидании блокировок добавлены в отчёты событий.
  • Добавлен параметр –start-monday, начинающий календарную неделю с понедельника, а не с воскресенья по умолчанию.

Также исправлены ошибки и улучшены возможности.

  • Добавлен отчёт о распределении классов ошибок, когда SQLState доступен в префиксе строки журнала. Спасибо jacks33 за запрос функции.
  • Исправлен глобальный инкрементальный индекс при изменении размера. Спасибо clomdd за сообщение.
  • Заполнитель %i для тега команды в log_line_prefix теперь допускает пробел.
  • Исправлены параметры –exclude-line и удаление устаревшего каталога при включённом хранении с –noreport.
  • Исправлена опечатка в “vacuum activity table”. Спасибо Nicolas Gollet за патч.
  • Исправлен отчёт autovacuum. Спасибо Nicolas Gollet за патч.
  • Исправлены автор логотипа pgbadger — Damien Cazeils — и английский текст комментариев. Спасибо Thibaut Madelaine за патч.
  • В параметр -f добавлены сведения о формате журнала pgbouncer. Спасибо clomdd за сообщение.
  • В документацию добавлены сведения о –normalized-only.
  • Исправлен повреждённый отчёт даты и времени из предыдущего патча.
  • Исправлено сопоставление длительности и запроса при log_duration=on и log_statement=all. Спасибо Eric Jensen за сообщение.
  • Исправлена нормализация сообщений о рекомендательных блокировках. Спасибо Thibaut Madelaine за сообщение.
  • Исправлен отчёт вывода auto_explain. Спасибо fch77700 за сообщение.
  • Устранено нежелательное автоматическое определение формата журнала по записи из stdin. Спасибо Jesus Adolfo Parra за сообщение.
  • Открывающая круглая скобка добавлена в стоп-символы регулярного выражения поиска клиента БД в префиксе, чтобы поддержать строку клиента PostgreSQL с исходным портом. Спасибо Jon Nelson за патч.
  • Исправлены орфографические ошибки. Спасибо Jon Nelson за патч.
  • Разрешено использовать %c (идентификатор сеанса) вместо %p (PID) как уникальный идентификатор сеанса. Спасибо Jerryliuk за сообщение.
  • pgbadger может разбирать стандартный log_line_prefix, вероятно используемый в 10.0: ‘%m [%p] '
  • Восстановлена отсутствовавшая первая строка с вызовом интерпретатора.
  • Исправлено отсутствие значений Avg в отчёте CSV. Спасибо Yosuke Tomita за сообщение.
  • Исправлено сообщение об ошибке в методе autodetect_format().
  • Добавлен –start-monday, начинающий календарную неделю с понедельника вместо воскресенья. Спасибо Joosep Mae за запрос функции.
  • Исправлен параметр –histo-average. Спасибо Yves Martin за сообщение.
  • Из документации удалена форма множественного числа –ssh-option. Спасибо mark-a-s за сообщение.
  • Исправлен фильтр –exclude-time; переписан код пропуска нежелательных строк и обновления индикатора выполнения. Спасибо Michael Chesterton за сообщение.
  • Исправлена поддержка заполнителя %r в префиксе вместо %h.

v9.0 · 2016-09-02

Этот основной выпуск pgBadger переносит интерфейс на Bootstrap 3 и обновляет версии всех файлов ресурсов (CSS и JavaScript). Также исправлены ошибки и улучшены возможности.

Возможно сохранение обратной совместимости со старыми инкрементальными отчётами.

  • Исходный код и лицензии файлов ресурсов теперь находятся в отдельном подкаталоге. Добавлен сценарий обновления их минифицированных версий, встроенных в сценарий pgbadger. Спасибо Christoph Berg за помощь и запрос функции.

  • Если включён log_connection, а log_line_prefix не содержит пользователя, базы данных и узла, предпринимается попытка определить их из строк соединения.

    Расширены регулярные выражения для автоматического определения имени базы данных, пользователя, IP-адреса клиента и имени приложения. Теперь они такие:

    db => qr/(?:db|database)=([^,]*)/;
    user => qr/(?:user|usr)=([^,]*)/;
    client => qr/(?:client|remote|ip|host)=([^,]*)/;
    appname => qr/(?:app|application)=([^,]*)/;
    
  • Добавлена обратная совместимость инкрементального режима со старыми версиями pgbadger: для новых файлов CSS и JavaScript создаётся подкаталог, названный номером основной версии pgbadger.

  • Увеличен логотип pgbadger, который выглядел слишком маленьким с новым размером шрифта.

  • Нормализованы подробные сведения во всех отчётах.

  • Удалён повторяющийся значок копирования в отчёте блокировок.

  • Восстановлена отсутствовавшая диаграмма гистограммы времени сеансов. Спасибо Guillaume Lelarge за сообщение.

  • Добавлен файл LICENSE с лицензиями файлов ресурсов. Спасибо Christoph Berg за патч.

  • В библиотеку jqplot добавлен патч, устраняющий бесконечный цикл при попытке загрузить некоторые диаграммы. Спасибо Julien Tachoires за помощь в решении проблемы.

  • Сценарий tools/updt_embedded_rsc.pl применяет патч к файлу ресурсов resources/jquery.jqplot.js и не сообщает об ошибке, если патч уже применён.

  • Удалена последняя одиночная запятая в конце набора данных круговой диаграммы. Спасибо Julien Tachoires за сообщение.

  • Изменено отображение нормализованной ошибки.

  • Удалены неиспользуемые и автоматически создаваемые файлы.

  • Обновлены все файлы ресурсов (JS и CSS), создан каталог с исходным кодом библиотек JavaScript, используемых в pgbadger. Новый сценарий tools/updt_embedded_rsc.pl создаёт минифицированные версии этих файлов и встраивает их в pgbadger. Он также встраивает открытый шрифт TrueType FontAwesome.otf в файл fontawesome.css.

9 - Поддержка и участие в разработке

Сообщение об ошибках, запрос новых функций, отправка исправлений и профессиональная поддержка PostgreSQL

pgBadger развивается как открытый проект. Сообщения об ошибках, предложения функций, исправления документации и патчи принимаются через репозиторий исходного проекта на GitHub.

Ошибки и запросы функций

  1. Обновитесь до самой новой выпущенной версии и убедитесь, что проблема сохраняется.
  2. Поищите готовый ответ среди открытых задач и закрытых задач .
  3. Сведите проблему к минимальному безопасному фрагменту журнала и командной строке, на которых она всё ещё воспроизводится.
  4. Удалите учётные данные, конфиденциальный SQL, значения параметров, имена узлов, адреса и деловые данные.
  5. Создайте новую задачу , указав версию pgBadger, операционную систему, формат ввода, точные параметры, наблюдаемый и ожидаемый результаты.

При аварийном завершении или ошибке синтаксического анализатора приложите только минимальный очищенный набор строк журнала, необходимый для воспроизведения проблемной границы. Полный производственный журнал или сгенерированный отчёт почти никогда не следует публиковать в общедоступной задаче.

Отправка патча

Проект содержит файл .editorconfig, обеспечивающий единообразные отступы. Если изменение влияет на видимое пользователю поведение, синхронно обновляйте справку команд, POD и сгенерированную документацию Markdown.

В исходном проекте документация обновляется так:

$ perl Makefile.PL
$ make README

doc/pgBadger.pod — основной развёрнутый источник. Команда pgbadger --help формирует краткую справку, а файлы README являются сгенерированными представлениями. Перед отправкой запроса на слияние запустите соответствующие тесты.

Коммерческая поддержка

Лицензия проекта pgBadger не предусматривает обязательств по сопровождению или поддержке. Для платной помощи с журналированием PostgreSQL, анализом производительности или автоматизацией отчётов обратитесь к каталогу профессиональных услуг PostgreSQL .

10 - Лицензия и благодарности

Условия лицензии PostgreSQL, авторство и включённые сторонние компоненты

pgBadger — свободное программное обеспечение с открытым исходным кодом, распространяемое по лицензии PostgreSQL. Его можно бесплатно использовать, копировать, изменять и распространять при условии сохранения уведомлений об авторских правах и лицензии.

Лицензия PostgreSQL

Copyright (c) 2012-2026, Gilles Darold

Permission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and without a written agreement is hereby granted, provided that the above copyright notice and this paragraph and the following two paragraphs appear in all copies.

IN NO EVENT SHALL Darold BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF Darold HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Darold SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN “AS IS” BASIS, AND Darold HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.

Авторы и создатели дизайна

  • pgBadger — оригинальная работа Gilles Darold.
  • Логотип pgBadger — оригинальная работа Damien Cazeils.
  • Дизайн pgBadger версии 4.x создан компанией «Art is code».
  • Сайт создан Gilles Darold.
  • Участники проекта упомянуты в разных частях исходного ChangeLog.

Встроенные ресурсы и ресурсы отчётов

В pgBadger встроена изменённая версия модуля Perl SQL::Beautify. Авторские права © 2009 Jonas Kramer; модуль опубликован по лицензии Artistic License 2.0.

Ресурсы сгенерированных отчётов сопровождаются собственными уведомлениями, в том числе:

КомпонентЛицензия
bean.js, Bootstrap, jQuery, UnderscoreMIT
jqPlotMIT или GPL-2.0 по выбору пользователя
Шрифт Font AwesomeSIL Open Font License 1.1
CSS Font AwesomeMIT

Локальный снимок исходного кода сохраняет полный файл resources/LICENSE из исходного проекта. Включённые примеры отчётов являются историческими сгенерированными артефактами и сохраняют исходные встроенные уведомления и версии ресурсов.

Снимок документации

Эта редакция pig.center преобразует исходную документацию в страницы Hugo, добавляет навигацию и средства чтения на нескольких языках и сохраняет точный текст справки команд и ChangeLog там, где важна дословность. Исходная документация pgBadger остаётся под лицензией PostgreSQL; оригинальные названия проектов, сведения об авторстве и ссылки на исходный проект сохранены.