Performance Co-Pilot (PCP) is a powerful, flexible framework for monitoring and managing system-level performance metrics. It provides a suite of tools for collecting, storing, and analyzing performance data.
| File/Directory | Path | Purpose |
|---|---|---|
| Main config | /etc/pcp.conf |
Main PCP configuration |
| PMCD config | /etc/pcp/pmcd/pmcd.conf |
PMCD daemon config |
| PMDA configs | /etc/pcp/pmcd/ |
PMDA configurations |
| PMIE configs | /etc/pcp/pmie/ |
Inference engine configs |
| PMLogger configs | /etc/pcp/pmlogger/ |
Logger configurations |
| PCP logs | /var/log/pcp/ |
PCP log files |
| PCP data | /var/lib/pcp/ |
PCP data storage |
| PCP temp | /var/tmp/pcp/ |
Temporary files |
| PMDA directory | /var/lib/pcp/pmdas/ |
PMDA modules |
| Archive directory | /var/log/pcp/pmlogger/ |
Metric archives |
# /etc/pcp.conf
# PCP installation directory
PCP_DIR=/usr
# PCP configuration directory
PCP_ETC_DIR=/etc/pcp
# PCP log directory
PCP_LOG_DIR=/var/log/pcp
# PCP data directory
PCP_DATA_DIR=/var/lib/pcp
# PCP temporary directory
PCP_TMP_DIR=/var/tmp/pcp
# PCP run directory
PCP_RUN_DIR=/var/run/pcp
# PCP user
PCP_USER=pcp
# PCP group
PCP_GROUP=pcp
# PCP version
PCP_VERSION=5.3.7
# Hostname
PCP_HOST=localhost
# Platform
PCP_PLATFORM=linux
# Architecture
PCP_ARCH=x86_64
# Timezone
PCP_TZ=UTC
# Locale
PCP_LOCALE=C
# System type
PCP_SYSTYPE=linux
# Machine type
PCP_MACHINE=x86_64
# Release
PCP_RELEASE=5.15.0
# Distribution
PCP_DISTRO=Ubuntu
# Distribution version
PCP_DISTRO_VERSION=22.04
# /etc/pcp/pmcd/pmcd.conf
# PMCD port
pmcd.port 44321
# PMCD listen address
pmcd.host 0.0.0.0
# PMCD log file
pmcd.logfile /var/log/pcp/pmcd/pmcd.log
# PMCD pid file
pmcd.pidfile /var/run/pcp/pmcd.pid
# PMCD timeout (seconds)
pmcd.timeout 10
# PMCD max connections
pmcd.max_connections 32
# Enable authentication
pmcd.auth.enabled 0
# Allow remote connections
pmcd.allow_remote 1
# Trusted clients
pmcd.trusted_clients 127.0.0.1
pmcd.trusted_clients 192.168.1.0/24
# PMDA configurations
# Format: name status pipe/binary path arguments
# Linux kernel metrics
linux pipe binary /var/lib/pcp/pmdas/linux/pmdalinux.so -d linux
# Memory metrics
mem pipe binary /var/lib/pcp/pmdas/mem/pmdamem.so -d mem
# Network metrics
network pipe binary /var/lib/pcp/pmdas/network/pmdanetwork.so -d network
# Disk I/O metrics
disk pipe binary /var/lib/pcp/pmdas/disk/pmdadisk.so -d disk
# Process metrics
proc pipe binary /var/lib/pcp/pmdas/proc/pmdaproc.so -d proc
# System metrics
sysinfo pipe binary /var/lib/pcp/pmdas/sysinfo/pmdasysinfo.so -d sysinfo
# SNMP metrics (optional)
#snmp pipe binary /var/lib/pcp/pmdas/snmp/pmdasnmp.so -d snmp
# Redis metrics (optional)
#redis pipe binary /var/lib/pcp/pmdas/redis/pmdaredis.so -d redis
# MySQL metrics (optional)
#mysql pipe binary /var/lib/pcp/pmdas/mysql/pmdamysql.so -d mysql
# Nginx metrics (optional)
#nginx pipe binary /var/lib/pcp/pmdas/nginx/pmdanginx.so -d nginx
# Docker metrics (optional)
#docker pipe binary /var/lib/pcp/pmdas/docker/pmdadocker.so -d docker
# Kubernetes metrics (optional)
#kubernetes pipe binary /var/lib/pcp/pmdas/kubernetes/pmdakubernetes.so -d kubernetes
# /etc/pcp/pmie/control
# PMIE control file
# Format: host enable options
localhost y -c /etc/pcp/pmie/config.default
# Remote hosts
#webserver01 y -c /etc/pcp/pmie/config.web
#dbserver01 y -c /etc/pcp/pmie/config.db
# /etc/pcp/pmie/config.default
# Default PMIE configuration
# Rule: High CPU usage
if (sample.load > 2.0) ->
send mail "admin@example.com" "High load average: ${sample.load}";
# Rule: High memory usage
if (mem.util.free < 10%) ->
send mail "admin@example.com" "Low free memory: ${mem.util.free}%";
# Rule: Disk space low
if (disk.dev.avail < 10%) ->
send mail "admin@example.com" "Low disk space: ${disk.dev.avail}%";
# Rule: Network errors
if (network.interface.errors > 100) ->
send mail "admin@example.com" "Network errors: ${network.interface.errors}";
# /etc/pcp/pmlogger/control
# PMlogger control file
# Format: host primary options archive
localhost n PCP_LOG_DIR/pmlogger/localhost -r -T24h10m -c /etc/pcp/pmlogger/config.default
# Remote hosts
#webserver01 n PCP_LOG_DIR/pmlogger/webserver01 -r -T24h10m -c /etc/pcp/pmlogger/config.default
# /etc/pcp/pmlogger/config.default
# Default pmlogger configuration
# Log all metrics at 60 second intervals
log mandatory on 60 seconds {
kernel.all.load
mem.util.free
mem.util.used
disk.dev.read
disk.dev.write
network.interface.speed
network.interface.in.bytes
network.interface.out.bytes
proc.nprocs
proc.runque
}
# Log specific metrics at 5 minute intervals
log mandatory on 5 minutes {
kernel.all.uptime
disk.dev.total
network.interface.collisions
}
# Log specific metrics at 1 hour intervals
log mandatory on 1 hour {
kernel.all.version
hinv.ncpu
hinv.physmem
}
# Install a PMDA
cd /var/lib/pcp/pmdas/nginx
sudo ./Install
# Remove a PMDA
cd /var/lib/pcp/pmdas/nginx
sudo ./Remove
# List available PMDAs
pmda
# Check PMDA status
pmcd -v
# Custom metric collection
# /etc/pcp/pmcd/pmcd.options
# Collection interval
collector.interval=60
# Buffer size
collector.buffer_size=1024
# Max metrics per request
collector.max_metrics=100
# Timeout for metric requests
collector.timeout=30
#!/bin/bash
# /etc/pcp/pmie/scripts/alert-email.sh
# Email alert script for PMIE
RECIPIENT="$1"
SUBJECT="$2"
MESSAGE="$3"
echo "$MESSAGE" | mail -s "$SUBJECT" "$RECIPIENT"
#!/bin/bash
# /etc/pcp/pmie/scripts/alert-slack.sh
# Slack alert script for PMIE
WEBHOOK_URL="https://hooks.slack.com/services/XXX/YYY/ZZZ"
MESSAGE="$1"
PAYLOAD=$(cat <<EOF
{
"text": "PCP Alert: $MESSAGE"
}
EOF
)
curl -X POST -H 'Content-type: application/json' --data "$PAYLOAD" "$WEBHOOK_URL"
# Check PMCD configuration
pmcd -v
# Check PMIE configuration
pmie -v
# Check pmlogger configuration
pmlogger -v
# Verify PCP installation
pcp -v
# Restart PMCD
sudo systemctl restart pmcd
# Restart PMIE
sudo systemctl restart pmie
# Restart pmlogger
sudo systemctl restart pmlogger
# Check status
sudo systemctl status pmcd
sudo systemctl status pmie
sudo systemctl status pmlogger
# View logs
sudo tail -f /var/log/pcp/pmcd/pmcd.log
# List archives
pmlc -l
# Extract archive data
pmextract -s "sample.load" archive_name > output.txt
# Merge archives
pmmerge -O output merged_archive archive1 archive2
# Remove old archives
find /var/log/pcp/pmlogger -name "*.0" -mtime +30 -delete
# Check PMCD status
systemctl status pmcd
# List available metrics
pmprobe -v
# Get specific metric
pmprobe kernel.all.load
# Check PMCD connections
netstat -tlnp | grep 44321
# Display real-time metrics
pmstat
# Display specific metrics
pminfo -f kernel.all.load
# Display metric values
pmval kernel.all.load
# Display metric description
pmdesc kernel.all.load
# List archive contents
pmlogsummary /var/log/pcp/pmlogger/localhost/*
# Replay archive
pmreplay /var/log/pcp/pmlogger/localhost/*
# Convert archive format
pmlogconf
Running Performance Co-Pilot in regulated environments? We assist with:
Secure your deployment: office@linux-server-admin.com | Contact Page