Постгресовая стата без нервов и напрягов

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

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

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

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



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

    Ну и конечно, жду фидбеков и баг-репортов. Всем хорошего дня!
    Поделиться публикацией
    Комментарии 19
      +1
      Круто! В чем принципиальная разница с github.com/julmon/pg_activity

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

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

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

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

        > Я так понимаю, что нужны права суперюзера на исследуемую базу?
        да частично нужны права, чтобы смотреть текущие запросы например, но можно дать права роли pg_monitor или как там её и оно должно работать.
        0
        А, еще вопрос. Можно фильтровать активность по юзеру? Мне этого критически не хватает в pg_actvity
          +1
          да, можно фильтровать по любому полю… хоткей как в less — "/", есть поддержка регекспов.
          например в приаттаченом скринкасте, демонстрируется фильтрация по базе (celldb) и там показываются statements только для этой базы
          0
          Тоже решал задачу мониторинга PG. Остановился на pgwatch2 github.com/cybertec-postgresql/pgwatch2. Очень советую, особенно если много серверов. Собирает централизованно в свою БД (InfluxDB), готовые модули для Grafana, удобно и красиво.
            0
            пгцентр не совсем про мониторинг, основная цель это показать/посмотреть что сейчас происходит в постгресе, то есть это скорее дополнение к уже имеющемуся мониторингу. Есть конечно функция для дампа статы, но у нее тоже нет задачи заменить мониторинг.
            0

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

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

              Ссылка на работает
                0
                Спасибо, поправлю, должна вести сюда
                в след. абзаце нашлась еще одна битая ссылка.
                0
                Есть возможность зафиксировать ширину колонок? А то например поле state у меня не всегда содержит значение «idle in transaction». Получается когда везде «active» и потом где «idle in transaction» все смещается и теряешь фокус.
                  0
                  пока нет такой возможности, сам с таким сталкиваюсь, слегка раздражает )) так что буду фиксить
                    0
                    переделал выравнивание, если есть желание посмотреть, то можно взять из dev ветки
                      0
                      С git слабо знаком, в dev ветке только исходники и их нужно скомпилировать или есть возможность скачать скомпилированный вариант?
                        0
                        ну да, это dev ветка, с нее бинарники не билдятся.
                        нужно скомпилироваться самому, по идее у вас должен стоять только go-1.11, а дальше так:
                        git clone -b dev https://github.com/lesovsky/pgcenter
                        cd pgcenter && make
                    +1
                    Была бы удобна опция переключения между базами в работающей программе.
                      0
                      думал над этим, пока не пришел к внутреннему согласию в плане того как это должно быть в интерфейсе… либо через меню где юзер выбирает базу из списка (удобно все имена перед глазами), либо юзер вводит название (проще запилить, но юзеру надо точно помнить имя базы)
                        0
                        в контексте стиля приложения, думается — название базы должно вводиться с автодополением
                          0
                          о хорошая мысль, взял на заметку

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

                    Самое читаемое