Skip to main content

Metrics

Runix collects per-process and system-wide resource metrics.

Implementation​

Located at internal/metrics/:

FileResponsibility
collector.goCollector — periodic per-process metric collection via /proc
system.goGetSystemMetrics() — system-wide memory, CPU load, uptime
prometheus.goWritePrometheus() — Prometheus text exposition format output

Per-Process Metrics​

The Collector periodically reads /proc/[pid]/stat for each tracked process:

MetricSourceDescription
pidTrackingOS process ID
cpu_percent/proc/[pid]/stat fields 14-15CPU usage percentage
mem_bytes/proc/[pid]/stat field 24 (RSS)Resident memory in bytes
mem_percentComputedMemory as percentage of total
threads/proc/[pid]/stat field 20Thread count
fds/proc/[pid]/fd/Open file descriptor count
collected_atTimestampWhen metrics were collected

Collection Flow​

  1. Collector.Start(interval) begins a goroutine that ticks at the given interval
  2. On each tick, collectAll() reads metrics for all tracked PIDs
  3. Results are stored in a mutex-protected map
  4. Callers use Get(pid) or GetAll() to read the latest values

Tracking​

  • Track(pid) — Add a PID to the tracking set
  • Untrack(pid) — Remove a PID from the tracking set

System Metrics​

GetSystemMetrics() reads system-wide metrics from /proc:

MetricSource
total_memory/proc/meminfo → MemTotal
free_memory/proc/meminfo → MemAvailable
used_memoryComputed: total - free
cpu_load_1/proc/loadavg field 1
cpu_load_5/proc/loadavg field 2
cpu_load_15/proc/loadavg field 3
uptime_seconds/proc/uptime field 1
process_count/proc/loadavg field 4

Prometheus Format​

WritePrometheus() outputs metrics in Prometheus text exposition format:

# HELP runix_process_count Number of processes by state.
# TYPE runix_process_count gauge
runix_process_count{state="running"} 3
runix_process_count{state="stopped"} 1

runix_process_restarts_total{name="api",namespace="default"} 0
runix_process_restarts_total{name="worker",namespace="default"} 2

runix_process_uptime_seconds{name="api",namespace="default"} 3600
runix_process_memory_bytes{name="api",namespace="default"} 47185920
runix_process_cpu_percent{name="api",namespace="default"} 2.30

runix_process_count_total 4

Platform Support​

PlatformSupport
LinuxFull — reads /proc filesystem
macOSNot supported — returns empty metrics
WindowsNot supported — returns empty metrics

The collector checks runtime.GOOS and returns zero-value metrics on non-Linux platforms.

What's Next​