И в самом деле, в постгресе довольно большая куча всяких метрик, все они представлены в виде представлений и функций. С одной стороны это очень удобно, написал SELECT и получил данные. С другой стороны, такая периодическая писанина слегка утомляет.
В тот же раз, мне нужно было не просто так разово посмотреть на какую-то стату, мне нужно было отслеживать её изменение. Не помню что это было точно, возможно надо было смотреть на изменение лага репликации, или с какой частотой вызывался какой-то конкретный запрос…
Так вот, поймав себя на мысли что мне мне хватает инструмента я начал поиски утилит под свою задачу, но увы, не нашел ничего того что мне бы зашло. Так появился pgCenter.
Изначально это была консольная утилита и задумывалась она как простая в использовании штука, которая в top-подобном интерфейса выводила бы изменения постгресовой статистики. Однако учитывая, что во время траблшутинга постгреса нужно еще иметь перед глазами системные метрики, туда добавилась еще и системная статистика… cpu, память, своп, утилизация дисков и сетевых интерфейсов. Уже потом добавились другие админские функции, типа просмотр конфигурации и правка конфигов, работа с логами, возможность отстрела запросов и клиентов. В общем, постепенно количество функций росло… да и пользователи предлагали разные идеи как сделать инструмент еще лучше. Сегодня после некоторой разработки, я наконец готов представить новый релиз, в котором pgCenter очень сильно изменился.
Основное и пожалуй самое главное изменение, это то что pgCenter теперь написан на Go. Изначально он был на С, но честно говоря, на Go мне проще реализовывать идеи и добавлять новые функции. Другая положительная особенность это дистрибуция — исполняемый файл представляет собой один бинарник которые нужно лишь скачать, распаковать и можно пользоваться.
Другое большое нововведение это то что pgСenter это теперь не только top-like viewer для статистики. Теперь статистику можно дампить в локальные файлы и затем просматривать при необходимости. Применяется когда нет вменяемого мониторинга или надо пособирать статку в процессе бенчмаркинга на временной виртуалке или контейнере. В итоге, получилась штука которая напоминает оракловый statspack или например sar из пакета sysstat. При этом не нужно ничего городить на уровне базы, никаких дополнительных функций и т.п.
По итогу получилось 3 утилитки в одном бинарнике и все они вызываются как отдельные подкоманды наподобие того как это выглядит в git или perf.
На этом крупные новшества заканчиваются и остаются небольшие улучшения. В основном они связаны с top просмотрщиком:
- Теперь по умолчанию вместо статистики по базам, показывается статистика активности — кто подключен, какие запросы исполняет, как долго и так далее. Опыт показывает что чаще всего нужно оценить именно текущую активность, поэтому пожалуй имеет смысл сразу показывать именно эту стату.
- В activity статистике теперь можно видеть и фоновые процессы (добавлено в postgres 10), и idle клиентов которые ничего не делают (включается по хоткею). Раньше idle не показывались вообще, ввиду их бесполезности, но мало вдруг кому надо.
- Статистика связанная с таблицами раньше показывалась двумя отдельными представлениями, теперь вся статистика объединена и показывается в одном представлении.
- Функция фильтрации теперь поддерживает регулярные выражения, и можно более гибко задавать параметры того, чего именно хочется видеть… имена таблиц, индексов, функций, запросов и т.п.
Вполне вероятно что я забыл упомянуть еще какие-то фичи, но самые интересные на мой взгляд я перечислил.
Вот вроде бы и все, всех тех кто уже пользуется утилитой призываю обновиться, а всех кто слышит впервые, призываю попробовать или посмотреть небольшое демо.
Есть еще презентация с доклада, хотя там описывается старая версия, но имеет смысл взглянуть тоже.
Ну и конечно, жду фидбеков и баг-репортов. Всем хорошего дня!
Комментарии (16)
pasha_golub
02.10.2018 17:27А, еще вопрос. Можно фильтровать активность по юзеру? Мне этого критически не хватает в pg_actvity
lesovsky Автор
02.10.2018 17:32да, можно фильтровать по любому полю… хоткей как в less — "/", есть поддержка регекспов.
например в приаттаченом скринкасте, демонстрируется фильтрация по базе (celldb) и там показываются statements только для этой базы
gsl23
03.10.2018 10:18Тоже решал задачу мониторинга PG. Остановился на pgwatch2 github.com/cybertec-postgresql/pgwatch2. Очень советую, особенно если много серверов. Собирает централизованно в свою БД (InfluxDB), готовые модули для Grafana, удобно и красиво.
lesovsky Автор
03.10.2018 10:24пгцентр не совсем про мониторинг, основная цель это показать/посмотреть что сейчас происходит в постгресе, то есть это скорее дополнение к уже имеющемуся мониторингу. Есть конечно функция для дампа статы, но у нее тоже нет задачи заменить мониторинг.
zen
03.10.2018 10:20Алексей, а трудно графику добавить? Я gnuplot использую, чтобы глядеть вживую на изменение параметров. Организуй трубу в гнуплот и он в соседнем окне будет показывать бегущий график.
lesovsky Автор
03.10.2018 10:28Олег, про графику я серьезно как-то не думал, т.к. сейчас есть большое обилие графических мониторингов и смысла делать еще один… для рисования графиков в консоли… нууу не знаю, по-моему очень сомнительно )))
bigtrot
03.10.2018 15:30System statistics
pgcenter top also provides system usage information based on statistics from procfs filesystem:
load average and CPU usage time (user, system, nice, idle, iowait, software and hardware interrupts, steal);
memory and swap usage, amount of cached and dirty memory, writeback activity;
storage devices statistics: iops, throughput, latencies, average queue and requests size, devices utilization;
network interfaces statistics: throughput in bytes and packets, different kind of errors, saturation and utilization.
In case of connecting to remote Postgres there is possibility to use additional SQL functions used for retrieving /proc statistics from remote host. For more information see details here.
Ссылка на работает
neyasytyf
03.10.2018 15:45Есть возможность зафиксировать ширину колонок? А то например поле state у меня не всегда содержит значение «idle in transaction». Получается когда везде «active» и потом где «idle in transaction» все смещается и теряешь фокус.
lesovsky Автор
03.10.2018 15:46пока нет такой возможности, сам с таким сталкиваюсь, слегка раздражает )) так что буду фиксить
bigtrot
03.10.2018 15:47+1Была бы удобна опция переключения между базами в работающей программе.
lesovsky Автор
03.10.2018 15:51думал над этим, пока не пришел к внутреннему согласию в плане того как это должно быть в интерфейсе… либо через меню где юзер выбирает базу из списка (удобно все имена перед глазами), либо юзер вводит название (проще запилить, но юзеру надо точно помнить имя базы)
pasha_golub
Круто! В чем принципиальная разница с github.com/julmon/pg_activity
Там табличка более презентабельно раскрашена, как по мне. Глазу легче.
Я так понимаю, что нужны права суперюзера на исследуемую базу?
lesovsky Автор
> В чем принципиальная разница с github.com/julmon/pg_activity
принципиальной разницы нет… подключаемся к постгресу, селектим стату, показываем юзеру.
Разница есть в наборе фич, pgcenter показывает не только активность, но и стату по остальным вьюхам… таблицы, индексы, функции, размеры, вакуумы, репликация, по pg_stat_statements аж 5 скринов, есть системная стата cpu/mem/swap/iostat/nicstat. просмотр и правка конфигов, просмотр логов (пгцентр сам ищет путь, не надо держать их в уме) и пр. кстати psql можно прям из пгцентра запустить если хочется что-то руками поделать (не надо вторую консоль открывать)
> Там табличка более презентабельно раскрашена, как по мне. Глазу легче.
наверно… я про цвета еще не думал, но вот например в новом iostat добавили поддержку цветов, а я ее по старинке отключаю ))) так что на вкус и цвет…
> Я так понимаю, что нужны права суперюзера на исследуемую базу?
да частично нужны права, чтобы смотреть текущие запросы например, но можно дать права роли pg_monitor или как там её и оно должно работать.