Prometheus удобен, пока речь идёт о кластере и десятках экспортёров. На одном сервере он часто избыточен: отдельная база, отдельный сборщик, отдельный набор демонов. Performance Co-Pilot (PCP) решает ту же задачу иначе — метрики собирает локальный демон, история пишется в компактные архивы, а алерты считаются на месте. Посмотрим, как это работает и где PCP уместнее.

Архитектура: кто за что отвечает

В PCP несколько независимых процессов. pmcd — коллектор: он опрашивает PMDA (агенты метрик) и отдаёт значения по запросу. pmlogger — архиватор: периодически снимает метрики и пишет их в файл. pmie — движок правил, который считает выражения и выполняет действия. pmproxy — REST-шлюз для Grafana, pmseries и Prometheus.

PMDA бывают разные: pmdalinux даёт метрики ядра, pmdaproc — процессы, pmdapostgresql — базу, pmdanvidia — видеокарту. Всё это ставится пакетами и не требует отдельного экспортёра на каждый сервис.

Установка и запуск

sudo apt update
sudo apt install pcp pcp-gui
sudo systemctl enable --now pmcd pmlogger pmproxy
systemctl status pmcd --no-pager

В Fedora и RHEL пакеты называются pcp и pcp-system-tools. После установки проверьте, что pmcd слушает порт 44321, а pmproxy — 44322. Наружу эти порты выставлять не нужно: доступ к метрикам должен быть только из доверенной сети или через обратный прокси.

ss -lntp | grep -E '44321|44322'
pmprobe -v hinv.ncpu
pminfo -f kernel.all.load
pmval -t 1sec -s 3 mem.util.available

pminfo -f показывает текущие значения метрики. Если команда отвечает ошибкой соединения, демон не запущен или узел, указанный в -h, недоступен.

Смотрим метрики: pminfo, pmval, pmstat

Пространство имён PCP иерархическое, как дерево: kernel, mem, network, disk, proc. Найти нужное помогает pminfo с шаблоном.

pminfo mem
pminfo -f mem.util.available
pmval -t 1sec -s 5 kernel.all.load
pmstat -t 1sec -s 5

pmval печатает одну метрику с заданным интервалом, pmstat показывает сводку в духе vmstat. Для разового снимка хватает pmval -s 1. Единицы измерения PCP хранит вместе с метрикой, поэтому mem.util.available выводится в байтах, а не в условных единицах.

pmrep: отчёты и готовые наборы

pmrep — основной инструмент для таблиц. Он умеет выбирать метрики, менять единицы и подставлять заголовки. Есть и готовые наборы, описанные в конфигурации.

pmrep -t 1sec -s 5 kernel.all.load 'mem.util.used'
pmrep :vmstat -t 2sec -s 3
ARCH=$(ls -t /var/log/pcp/pmlogger/$(hostname)/ | grep -E '^[0-9]{8}\.[0-9]{2}\.[0-9]{2}$' | head -n 1)
pmrep -a /var/log/pcp/pmlogger/$(hostname)/$ARCH -t 10sec -s 3 kernel.all.load

Флаг -a указывает архив для воспроизведения — тот же отчёт можно построить за прошлую неделю. Наборы вроде :vmstat и :sar экономят время: не нужно помнить десятки имён. Список доступных наборов смотрите в pmrep.conf и в справке pmrep(1).

Архивы pmlogger: история без сервера

По умолчанию pmlogger пишет в /var/log/pcp/pmlogger/<host>/ по конфигурации /var/lib/pcp/config/pmlogger/config.default. Содержимое можно расширить своим набором метрик и запустить отдельный экземпляр.

sudo pmlogconf -c /var/lib/pcp/config/pmlogger/config.local
sudo pmlogger -c /var/lib/pcp/config/pmlogger/config.local -t 10sec /tmp/pcp-test
pmdumplog -l /tmp/pcp-test
pmlogsummary /tmp/pcp-test kernel.all.load

pmlogconf создаёт конфигурацию с разумным набором по умолчанию, pmlogger запускается на переднем плане — остановите его через Ctrl+C. pmdumplog -l покажет метаданные архива, pmlogsummary — минимум, максимум и среднее. Это удобно, когда нужно доказать, что проблема была ночью, а не «кажется».

Для регулярной ротации служит pmlogger_daily: она сжимает старые архивы и удаляет лишние по политике хранения. Проверьте таймер pmlogger_daily.timer — в некоторых дистрибутивах он включается отдельно.

pmproxy, pmseries и Grafana

pmproxy отдаёт метрики по HTTP и умеет складывать их в Redis для языка запросов pmseries. Это не обязательный компонент: для точечной диагностики достаточно pmval.

sudo systemctl enable --now redis-server
pmseries --load "{source.path: \"/var/log/pcp/pmlogger/$(hostname)\"}"
pmseries 'kernel.all.load'
curl -s http://localhost:44322/metrics | head

Эндпоинт /metrics совместим с форматом Prometheus, поэтому PCP можно подключить как источник к уже существующему мониторингу — без установки экспортёра на каждый хост. В Grafana есть плагин PCP Data Source, который работает через pmproxy.

Алерты на хосте: pmie

pmie считает правила локально и не зависит от сети. Правило — это условие и действие: запись в syslog, запуск скрипта, отправка письма.

kernel.all.load #'1 minute' > 4 -> syslog "high load";
mem.util.available < 500 Mbyte -> shell "/usr/local/bin/low-mem.sh";
disk.dev.write_bytes > 100 Mbyte/sec -> syslog "disk write burst";

Файлы правил кладут в /etc/pcp/pmie/ и подключают через control-файл в /etc/pcp/pmie/control.d/, затем включают pmie. Перед боевым запуском проверьте выражение вручную: pmie -t 1sec -v /etc/pcp/pmie/rules.local. Ошибка в единицах измерения встречается чаще, чем ошибка в логике.

Диагностика и типичные проблемы

  • pminfo не видит метрику — не установлен соответствующий PMDA или он не запущен. Проверьте ls /var/lib/pcp/pmdas/ и systemctl status pmcd.
  • Архив не растёт — pmlogger не запущен или конфигурация пуста; смотрите /var/log/pcp/pmlogger/pmlogger.log.
  • Высокая нагрузка от pmlogger — слишком частый интервал или сотни метрик. Уменьшите частоту и набор.
  • Grafana не видит данные — проверьте pmproxy, Redis и доступность /metrics.

Полезно держать под рукой справочники pcp(1), pminfo(1) и pmrep(1): они устанавливаются вместе с пакетом, а примеры в них точнее большинства статей.

PCP или Prometheus

Prometheus сильнее в кластерах: централизованный сбор, готовые дашборды, огромная экосистема. PCP выигрывает на отдельном хосте и в задачах, где нужен точный исторический разбор: меньше движущихся частей, низкие накладные расходы, архив можно увезти с сервера и открыть локально. Часто их используют вместе: pmproxy отдаёт /metrics, а Prometheus забирает данные и хранит их централизованно.

Итог

PCP — не «убийца Prometheus», а другой инструмент с другой моделью: локальный сбор, архивы и правила на хосте. Начните с pminfo и pmval, затем настройте pmlogger и проверьте архив через pmrep -a. Если данные нужны в Grafana, добавьте pmproxy. Такой набор даёт полную картину состояния сервера без отдельной инфраструктуры мониторинга.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте