______ _ __
/ ____/___ __________(_)___ _ _____ _____/ /_
/ / / __ \/ ___/ ___/ / __ \ | / / _ \/ ___/ __/
/ /___/ /_/ / / (__ ) / / / / |/ / __(__ ) /_
\____/\____/_/ /____/_/_/ /_/|___/\___/____/\__/
Diagnostic Tool for Proxmox VE (Made in Italy)
# Check available releases at: https://github.com/Corsinvest/cv4pve-diag/releases
# Download specific version (replace VERSION with actual version number)
wget https://github.com/Corsinvest/cv4pve-diag/releases/download/VERSION/cv4pve-diag-linux-x64.zip
unzip cv4pve-diag-linux-x64.zip
# Run diagnostic
./cv4pve-diag --host=YOUR_HOST --username=root@pam --password=YOUR_PASSWORD execute- Native C# implementation
- Cross-platform (Windows, Linux, macOS)
- API-based operation (no root access required)
- Cluster support with automatic analysis
- High availability with multiple host support
- Comprehensive checks for VMs and Containers
- Storage monitoring and capacity analysis
- Node health verification
- Replication status checking
- Backup configuration validation
- Multiple output formats (Text, HTML, JSON, Markdown)
- Severity levels (Critical, Warning, Info)
- Customizable settings via configuration files
- Issue filtering with ignore rules
- Export capabilities for automation
- API token support (Proxmox VE 6.2+)
- SSL validation options
- Custom settings management
- Ignored issues tracking
- Comprehensive logging and status reporting
# Check available releases and get the specific version number
# Visit: https://github.com/Corsinvest/cv4pve-diag/releases
# Download specific version (replace VERSION with actual version like v1.9.0)
wget https://github.com/Corsinvest/cv4pve-diag/releases/download/VERSION/cv4pve-diag-linux-x64.zip
# Alternative: Get latest release URL programmatically
LATEST_URL=$(curl -s https://api.github.com/repos/Corsinvest/cv4pve-diag/releases/latest | grep browser_download_url | grep linux-x64 | cut -d '"' -f 4)
wget "$LATEST_URL"
# Extract and make executable
unzip cv4pve-diag-linux-x64.zip
chmod +x cv4pve-diag
# Optional: Move to system path
sudo mv cv4pve-diag /usr/local/bin/# Check available releases at: https://github.com/Corsinvest/cv4pve-diag/releases
# Download specific version (replace VERSION with actual version)
Invoke-WebRequest -Uri "https://github.com/Corsinvest/cv4pve-diag/releases/download/VERSION/cv4pve-diag.exe-win-x64.zip" -OutFile "cv4pve-diag.zip"
# Extract
Expand-Archive cv4pve-diag.zip -DestinationPath "C:\Tools\cv4pve-diag"
# Add to PATH (optional)
$env:PATH += ";C:\Tools\cv4pve-diag"# Check available releases at: https://github.com/Corsinvest/cv4pve-diag/releases
# Download specific version (replace VERSION with actual version)
wget https://github.com/Corsinvest/cv4pve-diag/releases/download/VERSION/cv4pve-diag-osx-x64.zip
unzip cv4pve-diag-osx-x64.zip
chmod +x cv4pve-diag
# Move to applications
sudo mv cv4pve-diag /usr/local/bin/cv4pve-diag --host=192.168.1.100 --username=root@pam --password=your_password executecv4pve-diag --host=192.168.1.100 --api-token=diagnostic@pve!token1=uuid-here execute# Store password in file
cv4pve-diag --host=192.168.1.100 --username=root@pam --password=file:/etc/cv4pve/password execute
# First run: prompts for password and saves to file
# Subsequent runs: reads password from file automaticallyExecute Diagnostics
cv4pve-diag --host=pve.domain.com --username=root@pam --password=secret execute# HTML output
cv4pve-diag --host=pve.domain.com --username=root@pam --password=secret --output=Html execute
# JSON output for automation
cv4pve-diag --host=pve.domain.com --api-token=diag@pve!token=uuid --output=Json execute
# Markdown format
cv4pve-diag --host=pve.domain.com --username=root@pam --password=secret --output=Markdown executeSettings Management
# Generate default settings file
cv4pve-diag --host=pve.domain.com --username=root@pam --password=secret create-settings
# This creates settings.json with customizable diagnostic rules# Run diagnostics with custom settings
cv4pve-diag --host=pve.domain.com --username=root@pam --password=secret --settings-file=settings.json executeIgnore Issues
# Generate ignored issues template
cv4pve-diag --host=pve.domain.com --username=root@pam --password=secret create-ignored-issues
# This creates ignored-issues.json# Run diagnostics with ignored issues
cv4pve-diag --host=pve.domain.com --username=root@pam --password=secret --ignored-issues-file=ignored-issues.json execute
# Show ignored issues in separate table
cv4pve-diag --host=pve.domain.com --username=root@pam --password=secret --ignored-issues-file=ignored-issues.json --ignored-issues-show executeExport Data
# Export diagnostic data to JSON file
cv4pve-diag --host=pve.domain.com --username=root@pam --password=secret export-collectParameter Files for Complex Setups
# /etc/cv4pve/production.conf
--host=pve-cluster.company.com
--api-token=diagnostic@pve!production=uuid-here
--settings-file=/etc/cv4pve/settings.json
--ignored-issues-file=/etc/cv4pve/ignored-issues.json
--validate-certificatecv4pve-diag @/etc/cv4pve/production.conf execute --output=Html| Permission | Purpose | Scope |
|---|---|---|
| VM.Audit | Read VM/CT information | Virtual machines |
| Datastore.Audit | Check storage capacity | Storage systems |
| Pool.Audit | Access pool information | Resource pools |
| Sys.Audit | Node system information | Cluster nodes |
Creating API Tokens
# Follow Proxmox VE documentation for:
# - API token creation with proper privilege separation
# - Permission assignment for required roles
# - Required permissions: VM.Audit, Datastore.Audit, Pool.Audit, Sys.Audit
# Refer to official Proxmox VE API documentation for detailed stepscv4pve-diag --host=pve.local --api-token=diagnostic@pve!diag-token=uuid-from-creation executeCustomize Diagnostic Rules
The settings file allows you to customize thresholds and rules for diagnostics:
{
"Node": {
"Cpu": { "Warning": 70, "Critical": 80 },
"Memory": { "Warning": 70, "Critical": 80 }
},
"Storage": {
"Threshold": { "Warning": 70, "Critical": 80 }
}
}# Create default settings
cv4pve-diag --host=pve.local --username=root@pam --password=secret create-settings
# Edit settings.json with your preferences
# Run with custom settings
cv4pve-diag --host=pve.local --username=root@pam --password=secret --settings-file=settings.json executeFilter Unwanted Warnings
Create rules to ignore specific issues using regex patterns:
[
{
"Id": "105",
"Context": "Qemu",
"SubContext": "Protection"
}
]Pattern matching:
- Exact match:
"Id": "105"- ignora solo VM 105 - Partial match:
"Description": ".*test.*"- ignora se descrizione contiene "test" - All match:
"Id": ".*"- ignora tutti gli ID (usa con Context/SubContext specifici)
- Node online status
- Update availability
- Replication status
- ZFS health
- CPU/Memory usage
- Storage capacity
- VM/CT status
- Resource usage
- QEMU agent status
- Backup configuration
- Snapshot age
- AutoSnapshot configuration
- Protection status
- Start on boot
- Hardware configuration
- VirtIO usage
- Storage capacity
- Orphaned images
- Disk allocation
- Replication errors
- Backup file validation
-----------------------------------------------------------------------------------------------------------------------------------------
| Id | Description | Context | SubContext | Gravity |
-----------------------------------------------------------------------------------------------------------------------------------------
| pve2 | 1 Replication has errors | Node | Replication | Critical |
| pve2 | Zfs 'rpool' health problem | Node | Zfs | Critical |
| 312 | Unknown resource qemu | Qemu | Status | Critical |
| pve3 | Node not online | Node | Status | Warning |
| local-zfs:vm-117-disk-1 | Image Orphaned | Storage | Image | Warning |
| 121 | Qemu Agent not enabled | Qemu | Agent | Warning |
| 103 | cv4pve-autosnap not configured | Qemu | AutoSnapshot | Warning |
| 115 | vzdump backup not configured | Qemu | Backup | Warning |
| 117 | Unused disk0 | Qemu | Hardware | Warning |
| 121 | 10 snapshots older than 1 month | Qemu | Snapshot | Warning |
| pve1 | 3 Update availble | Node | Update | Info |
| 109 | For more performance switch 'scsi0' hdd to VirtIO | Qemu | VirtIO | Info |
-----------------------------------------------------------------------------------------------------------------------------------------Authentication Problems
# Verify credentials
cv4pve-diag --host=pve.local --username=root@pam --password=test execute
# Check API token format
cv4pve-diag --host=pve.local --api-token=user@realm!tokenid=uuid execute# Check user permissions in Proxmox
pveum user list
pveum user permissions diagnostic@pveConnection Issues
# Test connectivity
ping pve.local
telnet pve.local 8006
# Try with SSL validation disabled (testing only)
cv4pve-diag --host=pve.local --username=root@pam --password=secret execute# Enable SSL validation for production
cv4pve-diag --host=pve.local --validate-certificate --username=root@pam --password=secret executeComplete setup and usage guide
| Resource | Description |
|---|---|
| API Documentation | Proxmox VE API reference |
| API Token Guide | Proxmox VE API token documentation |
Complete Parameter List
cv4pve-diag [global-options] [command]| Parameter | Description | Example |
|---|---|---|
--host |
Proxmox host(s) | --host=pve.local:8006 |
--username |
Username@realm | --username=diagnostic@pve |
--password |
Password or file | --password=secret or --password=file:/path |
--api-token |
API token | --api-token=user@realm!token=uuid |
| Parameter | Description | Default |
|---|---|---|
--validate-certificate |
Validate SSL certificate | false |
| Parameter | Description | Example |
|---|---|---|
--settings-file |
Custom settings file | --settings-file=settings.json |
--ignored-issues-file |
Ignored issues file | --ignored-issues-file=ignored.json |
--ignored-issues-show |
Show ignored issues table | Flag |
| Parameter | Description | Options |
|---|---|---|
--output |
Output format | Text, Html, Json, JsonPretty, Markdown |
Available Commands
Execute diagnostic and display results
cv4pve-diag --host=pve.local --username=root@pam --password=secret executeCreate default settings file
cv4pve-diag --host=pve.local --username=root@pam --password=secret create-settingsCreate ignored issues template
cv4pve-diag --host=pve.local --username=root@pam --password=secret create-ignored-issuesExport collected diagnostic data
cv4pve-diag --host=pve.local --username=root@pam --password=secret export-collectProfessional support and consulting available through Corsinvest.
Part of cv4pve suite | Made with ❤️ in Italy by Corsinvest
Copyright © Corsinvest Srl
