2025-01-01 18:28:45 -05:00
# ProxDoc - The Proxmox System Doctor
2026-04-14 13:08:10 -04:00
[](https://code.lotusguild.org/LotusGuild/proxDoc/actions?workflow=lint.yml)
2025-01-01 18:28:45 -05:00
ProxDoc is a comprehensive diagnostic tool for Proxmox server health monitoring and system examination.
2026-10-03 01:25:46 -04:00

## ⚡ Quick run
Copy and paste on any Proxmox node (as root). Nothing is installed; the script is fetched and run.
```bash
# Quick health check: services, temperatures, disk SMART, node exporter, Ceph
curl -sL "https://code.lotusguild.org/LotusGuild/proxDoc/raw/branch/main/proxDoc.sh" | bash -s -- --quick
# Full examination (CPU, RAM, DIMMs, storage, network/NICs, HBAs, services, VMs, containers, Ceph)
curl -sL "https://code.lotusguild.org/LotusGuild/proxDoc/raw/branch/main/proxDoc.sh" | bash -s -- --diags
# One area at a time
curl -sL "https://code.lotusguild.org/LotusGuild/proxDoc/raw/branch/main/proxDoc.sh" | bash -s -- --services # vital Proxmox services
curl -sL "https://code.lotusguild.org/LotusGuild/proxDoc/raw/branch/main/proxDoc.sh" | bash -s -- --drives # physical drive-bay map (DriveAtlas)
curl -sL "https://code.lotusguild.org/LotusGuild/proxDoc/raw/branch/main/proxDoc.sh" | bash -s -- --ceph # Ceph health, OSD tree, usage
curl -sL "https://code.lotusguild.org/LotusGuild/proxDoc/raw/branch/main/proxDoc.sh" | bash -s -- --vm-list # VM vitals
curl -sL "https://code.lotusguild.org/LotusGuild/proxDoc/raw/branch/main/proxDoc.sh" | bash -s -- --ct-list # container vitals
curl -sL "https://code.lotusguild.org/LotusGuild/proxDoc/raw/branch/main/proxDoc.sh" | bash -s -- --backup # backup health
curl -sL "https://code.lotusguild.org/LotusGuild/proxDoc/raw/branch/main/proxDoc.sh" | bash -s -- --checks= cpu,ram # pick specific checks
```
## Why this exists
When something is wrong with one of six Proxmox nodes I want the same answer every time, in one command, without remembering which of a dozen tools to run: *are the services up, are the drives healthy, is Ceph happy, is it running hot?* ProxDoc is a single read-only bash script (it never changes system state) that runs those checks and prints a colour-coded report. It is meant to be run straight from the repository with `curl | bash` , so every node always runs the current version.
## Gallery
`--quick` on a live node (`compute-storage-01` ): services, temperatures, SMART summary, node exporter and Ceph status. A Ceph warning (slow BlueStore operations, with the standing `noout` flag set) shows up in amber at the bottom.

<sub>Rendered from real command output with `scripts/render_terminal.py` ; private IPs are masked.</sub>
2025-01-01 18:28:45 -05:00
## Features
- Complete system diagnostics and health checks
2026-01-24 17:18:53 -05:00
- **DriveAtlas integration** for physical drive bay mapping
- **Ceph cluster health** monitoring (OSD tree, pool usage, disk usage)
- **Node Exporter status** check for Prometheus monitoring
- **hwmon daemon status** for hardware monitoring
- **Quick health check** mode for fast assessments
2025-01-01 18:28:45 -05:00
- Temperature monitoring
2026-01-24 17:18:53 -05:00
- Disk health status via SMART
2025-01-01 18:28:45 -05:00
- CPU and RAM information
2026-01-24 17:18:53 -05:00
- Detailed memory DIMM information (slots, speed, manufacturer)
- Motherboard and system information
2025-01-01 18:28:45 -05:00
- Storage information including ZFS pools
2026-01-24 17:18:53 -05:00
- Network diagnostics with ethtool integration
- Detailed NIC information (driver, firmware, link speed)
- HBA/Storage controller detection and details
2025-01-01 18:28:45 -05:00
- Hardware information
- Service status monitoring
- VM and Container status
## Requirements
The script requires the following tools to be installed:
- dmidecode
- lscpu
- ip
- smartctl
- sensors
2026-01-24 17:18:53 -05:00
- lspci
2026-02-06 18:50:28 -05:00
- bc
2026-01-24 17:18:53 -05:00
Optional tools for enhanced diagnostics:
- ethtool (for detailed NIC information including link speed and firmware)
- netstat (for network statistics)
2025-01-01 18:28:45 -05:00
## Usage
2026-01-24 17:22:37 -05:00
Run remotely via curl:
2025-01-01 18:28:45 -05:00
```bash
2026-08-28 22:25:44 -04:00
curl -sL "https://code.lotusguild.org/LotusGuild/proxDoc/raw/branch/main/proxDoc.sh" | bash -s -- [ OPTION]
2025-01-01 18:28:45 -05:00
```
2026-01-24 17:22:37 -05:00
### Examples
2025-07-24 20:16:38 -04:00
```bash
2026-01-24 17:22:37 -05:00
# Full system diagnostics
2026-08-28 22:25:44 -04:00
curl -sL "https://code.lotusguild.org/LotusGuild/proxDoc/raw/branch/main/proxDoc.sh" | bash -s -- --diags
2026-01-24 17:22:37 -05:00
# Quick health check
2026-08-28 22:25:44 -04:00
curl -sL "https://code.lotusguild.org/LotusGuild/proxDoc/raw/branch/main/proxDoc.sh" | bash -s -- --quick
2026-01-24 17:22:37 -05:00
# Check services
2026-08-28 22:25:44 -04:00
curl -sL "https://code.lotusguild.org/LotusGuild/proxDoc/raw/branch/main/proxDoc.sh" | bash -s -- --services
2026-01-24 17:22:37 -05:00
# Show drive bay mapping
2026-08-28 22:25:44 -04:00
curl -sL "https://code.lotusguild.org/LotusGuild/proxDoc/raw/branch/main/proxDoc.sh" | bash -s -- --drives
2025-07-24 20:16:38 -04:00
```
2025-01-01 18:28:45 -05:00
### Available Options
- `--help` : Show the help guide
- `--diags` : Perform full system examination
2026-01-24 17:18:53 -05:00
- `--quick` : Quick health check (services, temps, disks)
- `--drives` : Show physical drive bay mapping (DriveAtlas)
- `--ceph` : Check Ceph cluster health
- `--node-exporter` : Check Node Exporter status
- `--hwmon` : Check hwmon daemon status
- `--services` : Check vital Proxmox services
2025-01-01 18:28:45 -05:00
- `--vm-list` : Check VM vitals
2026-01-24 17:18:53 -05:00
- `--ct-list` : Check container vitals
2025-01-01 18:28:45 -05:00
- `--backup` : Review backup health
2026-02-05 10:56:29 -05:00
- `--checks=LIST` : Run only specific checks (comma-separated)
- Valid checks: cpu, ram, memory, storage, disk, network, hardware, temps, services, ceph, vms, containers
2026-01-24 17:18:53 -05:00
2025-01-01 18:28:45 -05:00
## Output Information
The script provides detailed information about:
- System information and Proxmox version
- CPU model, cores, and frequency
2026-01-24 17:18:53 -05:00
- RAM usage and detailed DIMM information
- Motherboard manufacturer, model, and serial number
2025-01-01 18:28:45 -05:00
- Storage status
- Disk health
- Network configuration
2026-01-24 17:18:53 -05:00
- Detailed NIC information (driver, MAC, speed, firmware)
- HBA/Storage controller details
- Hardware details including PCI devices
2025-01-01 18:28:45 -05:00
- System load
- Service status
- Recent system errors
- VM and container status
## Note
2026-01-24 17:22:37 -05:00
- This script must be run as root
- Designed for Proxmox environments
- Supports Proxmox version 6.0 and above
- No local installation required - runs directly from Gitea
2025-01-01 18:28:45 -05:00
## Version
2026-02-05 10:56:29 -05:00
Current Version: 1.2.0
2026-01-24 17:18:53 -05:00
### Changelog
2026-02-05 10:56:29 -05:00
#### v1.2.0
- Fixed variable quoting in disk iteration loops (security)
- Added input validation with whitelist of valid options
- Added examples to help documentation
- Added timeout protection to smartctl and ceph commands
- Added `--checks=` option for selective diagnostics
- Extracted magic strings into named constants
- Added validation for potentially empty variables
- Standardized error handling with cleanup trap
- Added optional logging infrastructure (PROXDOC_LOGFILE)
- Cached disk list and unit files to reduce command overhead
- Added efficient process wait utility function
- Fixed CPU MHz parsing showing multiple values
- Fixed memory DIMM table not displaying data
- Fixed bonding_masters showing as network interface
2026-01-24 17:18:53 -05:00
#### v1.1.0
- Added DriveAtlas integration (`--drives` ) for physical drive bay mapping
- Added Ceph cluster health monitoring (`--ceph` )
- Added Node Exporter status check (`--node-exporter` )
- Added hwmon daemon status check (`--hwmon` )
- Added quick health check mode (`--quick` )
- Added container list option (`--ct-list` )
- Full diagnostics now include all monitoring checks
- Improved error handling with graceful fallbacks
2026-01-24 17:22:37 -05:00
- Optimized for remote execution via curl
2026-01-24 17:18:53 -05:00
#### v1.0.0
2026-04-14 13:08:10 -04:00
- Initial release
## CI
| Workflow | Purpose | Triggers |
|---|---|---|
| `lint.yml` | shellcheck on all `.sh` files | Every push and PR |
Branch protection is enabled on `main` — the lint check must pass before any PR can merge.