Анализатор журналов PostgreSQL с подробными отчётами и диаграммами.
Аргументы:
logfile — один файл журнала, список файлов или команда оболочки,
возвращающая список файлов. Чтобы читать журнал из stdin, используйте
имя файла -. Ввод из stdin не поддерживается для csvlog.
Параметры:
-a | --average minutes : Интервал усреднения графиков запросов и соединений в минутах. По умолчанию 5 минут.
-A | --histo-average min: Интервал построения гистограмм запросов в минутах. По умолчанию 60 минут.
-b | --begin datetime : Начальная дата/время данных для разбора журнала (отметка времени или время).
-c | --dbclient host : Включать в отчёт только записи для указанного клиентского узла.
-C | --nocomment : Удалять из запросов комментарии вида /* ... */.
-d | --dbname database : Включать в отчёт только записи для указанной базы данных.
-D | --dns-resolv : Заменять IP-адреса клиентов их DNS-именами. Это может значительно замедлить pgBadger.
-e | --end datetime : Конечная дата/время данных для разбора журнала (отметка времени или время).
-E | --explode : Создавать отдельный отчёт для каждой базы данных. Общие сведения, не относящиеся к
отдельной базе, добавляются в отчёт базы postgres.
-f | --format logtype : Допустимые значения: syslog, syslog2, stderr, jsonlog, csv, pgbouncer, logplex, rds и
redshift. Используйте, если pgBadger не определяет формат журнала автоматически.
-G | --nograph : Отключить диаграммы в HTML-выводе. По умолчанию диаграммы включены.
-h | --help : Показать эту справку и завершить работу.
-H | --html-outdir path: Каталог для HTML-отчётов в инкрементальном режиме. Двоичные файлы остаются в каталоге,
заданном -O, --outdir.
-i | --ident name : Имя программы для идентификатора syslog. По умолчанию postgres.
-I | --incremental : Использовать инкрементальный режим: отчёты по дням создаются в отдельных каталогах.
Требуется --outdir.
-j | --jobs number : Число одновременных заданий для одного файла журнала. По умолчанию и для csvlog
используется одно задание.
-J | --Jobs number : Число параллельно разбираемых файлов журнала. По умолчанию обрабатывается один файл за
раз.
-l | --last-parsed file: Вести запись последних разобранных даты/времени и строки для инкрементального разбора.
Полезно для отслеживания ошибок после предыдущего запуска или ежедневных отчётов из
журнала с еженедельной ротацией.
-L | --logfile-list file: Файл со списком файлов журналов для разбора.
-m | --maxlength size : Максимальная длина запроса: запрос усекается до заданного размера. По умолчанию 100000.
-M | --no-multiline : Не собирать многострочные операторы, чтобы избежать посторонних данных, особенно при
ошибках, создающих огромный отчёт.
-N | --appname name : Включать в отчёт только записи для указанного имени приложения.
-o | --outfile filename: Имя выходного файла. По умолчанию: out.html, out.txt, out.bin или out.json в
зависимости от формата. Повторное указание позволяет вывести несколько форматов. Для
JSON нужен JSON::XS. Для вывода в stdout используйте имя -.
-O | --outdir path : Каталог для сохранения выходных файлов.
-p | --prefix string : Значение собственного log_line_prefix из postgresql.conf. Указывайте только при
использовании нестандартного префикса, например с дополнительными полями IP клиента или
имени приложения. Обязательны заполнители времени (%t, %m или %n) и процесса (%p или
%c). См. примеры ниже.
-P | --no-prettify : Отключить форматирование SQL-запросов.
-q | --quiet : Ничего не печатать в stdout, включая индикатор выполнения.
-Q | --query-numbering : Нумеровать запросы в выводе --dump-all-queries или --normalized-only.
-r | --remote-host ip : Узел для выполнения cat над удалённым журналом. Сам файл разбирается локально.
-R | --retention N : Число недель хранения в инкрементальном режиме. По умолчанию 0 (отключено). Каталоги
более старых недель и дней автоматически удаляются из каталога вывода.
-s | --sample number : Число сохраняемых примеров запросов. По умолчанию 3.
-S | --select-only : Включать в отчёт только запросы SELECT.
-t | --top number : Число сохраняемых и отображаемых запросов. По умолчанию 20.
-T | --title string : Изменить заголовок страницы HTML-отчёта.
-u | --dbuser username : Включать в отчёт только записи для указанного пользователя.
-U | --exclude-user username : Исключать из отчёта записи для указанного пользователя. Можно указывать несколько
раз.
-v | --verbose : Включить подробный или отладочный режим. По умолчанию отключён.
-V | --version : Показать версию pgBadger и завершить работу.
-w | --watch-mode : Включать в отчёт только ошибки, подобно logwatch.
-W | --wide-char : Кодировать HTML-вывод запросов в UTF8, чтобы избежать сообщения Perl
«Wide character in print».
-x | --extension : Формат вывода: text, html, bin или json. По умолчанию html.
-X | --extra-files : В инкрементальном режиме записывать CSS и JS в каталог вывода отдельными файлами.
-z | --zcat exec_path : Полный путь к программе zcat. Используйте, если zcat, bzcat или unzip отсутствуют в
PATH.
-Z | --timezone +/-XX : Смещение часового пояса от GMT в часах для корректировки даты/времени диаграмм
JavaScript. Значение может быть целым, например 2, или дробным, например 2.5.
--anonymize : Скрывать все литералы в запросах для защиты конфиденциальных данных.
--charset : Набор символов HTML. По умолчанию utf-8.
--command CMD : Команда для получения записей журнала через stdin. pgBadger открывает канал к команде и
разбирает созданные ею записи.
--csv-separator : Разделитель полей CSV. По умолчанию ,.
--day-report YYYY-MM-DD: Создать HTML-отчёт за указанный день. Требуются каталоги инкрементального вывода и все
необходимые двоичные файлы данных.
--disable-autovacuum : Не создавать отчёт autovacuum.
--disable-checkpoint : Не создавать отчёт о контрольных точках и точках перезапуска.
--disable-connection : Не создавать отчёт о соединениях.
--disable-error : Не создавать отчёт об ошибках.
--disable-hourly : Не создавать почасовой отчёт.
--disable-lock : Не создавать отчёт о блокировках.
--disable-query : Не создавать отчёты о запросах (самые медленные, самые частые, по пользователям, по
базам данных и т. д.).
--disable-session : Не создавать отчёт о сеансах.
--disable-temporary : Не создавать отчёт о временных файлах.
--disable-type : Не создавать отчёты о запросах по типу, базе данных или пользователю.
--dump-all-queries : Вывести все запросы из журнала, подставляя значения параметров привязки на места
соответствующих заполнителей.
--dump-raw-csv : Разобрать журнал и вывести сведения в CSV. Дальнейшая обработка не выполняется, отчёт
не создаётся.
--enable-checksum : Добавлять контрольную сумму md5 под каждым отчётом о запросе.
--exclude-appname name : Исключать записи указанного приложения. Пример: "pg_dump". Можно указывать несколько
раз.
--exclude-client name : Исключать записи указанного IP клиента. Можно указывать несколько раз.
--exclude-db name : Исключать записи указанной базы данных. Пример: "postgres". Можно указывать несколько
раз.
--exclude-file filename: Путь к файлу регулярных выражений для исключения запросов из отчёта. По одному
выражению на строку.
--exclude-line regex : Исключать записи журнала, совпадающие с регулярным выражением. Можно указывать
несколько раз.
--exclude-query regex : Исключать запросы, совпадающие с регулярным выражением. Пример: "^(VACUUM|COMMIT)".
Можно указывать несколько раз.
--exclude-time regex : Исключать отметки времени, совпадающие с регулярным выражением. Пример: "2013-04-12 .*".
Можно указывать несколько раз.
--explain-url URL : Переопределить URL графического инструмента explain. По умолчанию
https://explain.depesz.com/.
--histogram-query VAL : Задать границы гистограммы длительности запросов. По умолчанию в миллисекундах:
0,1,5,10,25,50,100,500,1000,10000
--histogram-session VAL: Задать границы гистограммы длительности сеансов. По умолчанию в миллисекундах:
0,500,1000,30000,60000,600000,1800000,3600000,28800000
--include-file filename: Путь к файлу регулярных выражений для включения запросов в отчёт. По одному выражению
на строку.
--include-query regex : Исключать запросы, не совпадающие с регулярным выражением. Можно указывать несколько
раз. Пример: "(tbl1|tbl2)".
--include-pid PID : Включать в отчёт только события, связанные с PID сеанса (%p). Можно указывать несколько
раз.
--include-session ID : Включать в отчёт только события, связанные с идентификатором сеанса (%c). Можно
указывать несколько раз.
--include-time regex : Включать только отметки времени, совпадающие с регулярным выражением. Пример:
"2013-04-12 .*". Можно указывать несколько раз.
--iso-week-number : В инкрементальном режиме начинать недели с понедельника и использовать номера недель
ISO 8601 от 01 до 53. Неделя 1 — первая неделя, содержащая не менее 4 дней нового года.
--keep-comments : Не удалять комментарии из нормализованных запросов. Полезно для различения запросов с
одинаковым результатом нормализации.
--journalctl command : Команда journalctl, используемая вместо файла журнала PostgreSQL. Пример:
journalctl -u postgresql-9.5
--log-duration : Принудительно сопоставлять записи журнала, создаваемые одновременно log_duration = on и
log_statement = 'all'.
--log-timezone +/-XX : Смещение от GMT в часах для корректировки даты/времени журнала перед разбором.
Усложняет поиск в журнале по дате/времени. Значение может быть целым, например 2, или
дробным, например 2.5.
--month-report YYYY-MM : Создать накопительный HTML-отчёт за указанный месяц. Требуются каталоги
инкрементального вывода и все необходимые двоичные файлы данных.
--noexplain : Не обрабатывать строки, созданные auto_explain.
--no-fork : Не создавать дочерние процессы; используется для отладки.
--no-process-info : Отключить изменение заголовка процесса для идентификации pgbadger: некоторые системы
его не поддерживают.
--no-progressbar : Отключить индикатор выполнения.
--noreport : Не создавать отчёты в инкрементальном режиме.
--no-week : Не создавать еженедельные отчёты в инкрементальном режиме. Полезно, если создание
занимает слишком много времени.
--normalized-only : Вывести только все нормализованные запросы в out.txt.
--pgbouncer-only : Показывать в заголовке только меню, относящиеся к PgBouncer.
--pid-dir path : Каталог для файла PID. По умолчанию /tmp.
--pid-file file : Имя файла PID для управления одновременными запусками pgBadger. По умолчанию
pgbadger.pid.
--pie-limit num : Объединять данные круговой диаграммы со значением ниже num%.
--prettify-json : Форматировать вывод JSON для удобства чтения.
--rebuild : Пересобрать все HTML-отчёты в каталогах инкрементального вывода, где сохранились
двоичные файлы данных.
--start-monday : По умолчанию недели в инкрементальном режиме начинаются с воскресенья. Этот параметр
меняет начало недели на понедельник.
--tempdir DIR : Каталог для временных файлов. По умолчанию File::Spec->tmpdir() || '/tmp'.
pgBadger может разбирать удалённый файл журнала через SSH-соединение без пароля.
Укажите IP-адрес или имя узла с помощью -r либо –remote-host. Для полного
управления SSH-соединением предусмотрены дополнительные параметры.
--ssh-identity file Путь к файлу ключа аутентификации.
--ssh-option options Список параметров -o для SSH-соединения.
Всегда используются:
-o ConnectTimeout=$ssh_timeout
-o PreferredAuthentications=hostbased,publickey
--ssh-port port Порт SSH для соединения. По умолчанию 22.
--ssh-program ssh Путь к программе SSH. По умолчанию ssh.
--ssh-timeout second Тайм-аут установления SSH-соединения. По умолчанию 10 секунд.
--ssh-user username Имя пользователя для входа. По умолчанию текущий пользователь.
Параметр --ssh-sudo добавляет sudo перед удалёнными командами перечисления и чтения файлов журнала. Пользователь SSH на удалённом узле должен иметь возможность выполнять эти команды через sudo без интерактивного запроса.
Файл журнала для разбора также можно указать с помощью URI. Поддерживаются
протоколы http[s] и [s]ftp. Для загрузки файла используется команда curl, а разбор
выполняется во время загрузки. Также поддерживается протокол ssh: он использует
команду ssh так же, как удалённый узел. См. примеры ниже.
Коды возврата:
0: успешное завершение
1: завершение с ошибкой
2: прерывание, например по Ctrl+C
3: файл PID уже существует или не может быть создан
4: в командной строке не указан файл журнала
Примеры:
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 -
# Префикс строки журнала при выводе в stderr
pgbadger --prefix '%t [%p]: user=%u,db=%d,client=%h' /pglog/postgresql-2012-08-21*
pgbadger --prefix '%m %u@%d %p %r %a : ' /pglog/postgresql.log
# Префикс строки журнала при выводе в syslog
pgbadger --prefix 'user=%u,db=%d,client=%h,appname=%a' /pglog/postgresql-2012-08-21*
# Ускорить разбор файла 10GB с помощью 8 CPU
pgbadger -j 8 /pglog/postgresql-10.1-main.log
Для удалённого файла журнала используйте запись URI:
Это выражение исключает каждый совпавший час целиком, включая время вне получасового дампа. Уточните шаблон минут, если требуется исключить только интервал выполнения дампа.
Так операторы COPY, создаваемые pg_dump, не окажутся в верхней части списка
самых медленных запросов. Эту проблему можно решить проще с помощью
–exclude-appname “pg_dump”.
Вывод journalctl также можно разбирать как обычный файл журнала:
Журнал Heroku PostgreSQL будет передаваться в pgbadger через стандартный ввод.
pgBadger может автоматически определять журналы RDS и CloudWatch PostgreSQL
в формате rds:
pgbadger -f rds -o rds_out.html rds.log
Каждый журнал Cloud SQL PostgreSQL представляет собой довольно обычный журнал
PostgreSQL, заключённый в формат JSON. pgBadger определяет его автоматически,
но при необходимости принудительно задайте формат jsonlog:
Она добавит в календарное представление инкрементальных отчётов ссылку
с названием месяца для просмотра отчёта за май 2019 года.
Укажите -E или –explode, если отчёты создавались с этим параметром.