Monitoring & Observability

sar, atop, bcc-tools, eBPF, and system performance monitoring on RHEL 10.

sar (sysstat)

# Install sysstat
sudo dnf install -y sysstat

# Enable data collection with systemd timers
sudo systemctl enable --now sysstat-collect.timer sysstat-summary.timer

# Configure retention in /etc/sysconfig/sysstat:
# HISTORY=28  (default: 28 days)

# Real-time CPU usage
sar 1 5

# Memory usage
sar -r 1 5

# Network statistics
sar -n DEV 1 5

# Disk I/O
sar -d 1 5

# I/O wait
sar -q 1 5

# Historical data
sar -f /var/log/sa/sa01

# Today's data
sar

atop

atop provides a comprehensive overview of system resources with per-process details.

# Install atop
sudo dnf install -y atop

# Run interactively
sudo atop

# Run in batch mode (1-second intervals for 60 seconds)
sudo atop 1 60

# Enable logging (hourly)
sudo systemctl enable --now atop-collect.timer

# View historical logs
ls /var/log/atop/
sudo atop -r /var/log/atop/atop_20260501

# Key bindings in atop:
# P/C/M/D/N - toggle per-process CPU/Memory/Disk/Network
# F5 - system overview
# F9 - save buffer to file

bcc-tools & eBPF

# Install bcc-tools
sudo dnf install -y bcc-tools bcc-devel perf

# Top 10 processes by CPU
sudo bpftrace -e 'profile:/hz=99 /pid > 1/ { @cpu[pid, comm] = count(); }'

# Network connections per second
sudo tcpconnect -t 5

# File read/write latency
sudo biolatency 1 5

# Block I/O by device
sudo biosnoop 5

# Trace open() calls
sudo opens

# Profile system-wide CPU usage
sudo profile 5

# List available tools
ls /usr/sbin/* | grep -E '(tcp|file|cpu|mem|block|runq)' | head

Basic Tools

# CPU and memory overview
top
htop

# Disk usage
du -sh /var/
df -h

# I/O wait (vmstat)
vmstat 1 5

# Network connections
ss -s
ss -tulnp

# Process tree
ps auxf

# CPU per core
mpstat -P ALL 1 5

# I/O statistics
iostat -x 1 5

# Memory detail
free -h
cat /proc/meminfo

Prometheus Exporters

# Install node exporter for Prometheus (requires EPEL)
sudo dnf install -y epel-release
sudo dnf install -y prometheus-node-exporter
sudo systemctl enable --now prometheus-node-exporter

# Default endpoint
curl localhost:9100/metrics

# Bind to specific interface
# Edit /etc/sysconfig/prometheus-node-exporter:
# WEB_LISTEN_ADDRESS="10.0.0.5:9100"

# Firewall
sudo firewall-cmd --permanent --add-port=9100/tcp
sudo firewall-cmd --reload