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

И в самом деле, в постгресе довольно большая куча всяких метрик, все они представлены в виде представлений и функций. С одной стороны это очень удобно, написал 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)


  1. pasha_golub
    02.10.2018 17:00

    Круто! В чем принципиальная разница с github.com/julmon/pg_activity

    Там табличка более презентабельно раскрашена, как по мне. Глазу легче.

    Я так понимаю, что нужны права суперюзера на исследуемую базу?


    1. lesovsky Автор
      02.10.2018 17:26
      +1

      > В чем принципиальная разница с github.com/julmon/pg_activity
      принципиальной разницы нет… подключаемся к постгресу, селектим стату, показываем юзеру.

      Разница есть в наборе фич, pgcenter показывает не только активность, но и стату по остальным вьюхам… таблицы, индексы, функции, размеры, вакуумы, репликация, по pg_stat_statements аж 5 скринов, есть системная стата cpu/mem/swap/iostat/nicstat. просмотр и правка конфигов, просмотр логов (пгцентр сам ищет путь, не надо держать их в уме) и пр. кстати psql можно прям из пгцентра запустить если хочется что-то руками поделать (не надо вторую консоль открывать)

      > Там табличка более презентабельно раскрашена, как по мне. Глазу легче.
      наверно… я про цвета еще не думал, но вот например в новом iostat добавили поддержку цветов, а я ее по старинке отключаю ))) так что на вкус и цвет…

      > Я так понимаю, что нужны права суперюзера на исследуемую базу?
      да частично нужны права, чтобы смотреть текущие запросы например, но можно дать права роли pg_monitor или как там её и оно должно работать.


  1. pasha_golub
    02.10.2018 17:27

    А, еще вопрос. Можно фильтровать активность по юзеру? Мне этого критически не хватает в pg_actvity


    1. lesovsky Автор
      02.10.2018 17:32

      да, можно фильтровать по любому полю… хоткей как в less — "/", есть поддержка регекспов.
      например в приаттаченом скринкасте, демонстрируется фильтрация по базе (celldb) и там показываются statements только для этой базы


  1. gsl23
    03.10.2018 10:18

    Тоже решал задачу мониторинга PG. Остановился на pgwatch2 github.com/cybertec-postgresql/pgwatch2. Очень советую, особенно если много серверов. Собирает централизованно в свою БД (InfluxDB), готовые модули для Grafana, удобно и красиво.


    1. lesovsky Автор
      03.10.2018 10:24

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


  1. zen
    03.10.2018 10:20

    Алексей, а трудно графику добавить? Я gnuplot использую, чтобы глядеть вживую на изменение параметров. Организуй трубу в гнуплот и он в соседнем окне будет показывать бегущий график.


    1. lesovsky Автор
      03.10.2018 10:28

      Олег, про графику я серьезно как-то не думал, т.к. сейчас есть большое обилие графических мониторингов и смысла делать еще один… для рисования графиков в консоли… нууу не знаю, по-моему очень сомнительно )))


  1. bigtrot
    03.10.2018 15:30

    System 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.

    Ссылка на работает


    1. lesovsky Автор
      03.10.2018 15:33

      Спасибо, поправлю, должна вести сюда
      в след. абзаце нашлась еще одна битая ссылка.


  1. neyasytyf
    03.10.2018 15:45

    Есть возможность зафиксировать ширину колонок? А то например поле state у меня не всегда содержит значение «idle in transaction». Получается когда везде «active» и потом где «idle in transaction» все смещается и теряешь фокус.


    1. lesovsky Автор
      03.10.2018 15:46

      пока нет такой возможности, сам с таким сталкиваюсь, слегка раздражает )) так что буду фиксить


  1. bigtrot
    03.10.2018 15:47
    +1

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


    1. lesovsky Автор
      03.10.2018 15:51

      думал над этим, пока не пришел к внутреннему согласию в плане того как это должно быть в интерфейсе… либо через меню где юзер выбирает базу из списка (удобно все имена перед глазами), либо юзер вводит название (проще запилить, но юзеру надо точно помнить имя базы)


      1. bigtrot
        03.10.2018 15:59

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


        1. lesovsky Автор
          03.10.2018 16:01

          о хорошая мысль, взял на заметку