{ "meta": { "title": "API de Proxmox Monitor — Referencia de integración | ProxMenux", "description": "Endpoints HTTP de ProxMenux Monitor para Home Assistant, Homepage, Grafana, Prometheus, n8n y paneles propios. Consulta el estado y ejecuta operaciones documentadas: control de VM, inicio de backups, notificaciones y confirmación de alertas.", "ogTitle": "API de Proxmox Monitor — Referencia de integración", "ogDescription": "Endpoints de ProxMenux Monitor para Home Assistant, Homepage, Grafana, Prometheus, n8n y paneles propios.", "twitterTitle": "API de Proxmox Monitor | ProxMenux", "twitterDescription": "Endpoints para Home Assistant, Homepage, Grafana, Prometheus, n8n y paneles propios." }, "header": { "title": "Referencia de la API", "description": "Endpoints HTTP para consultar el estado y ejecutar acciones documentadas en ProxMenux Monitor: sensores de Home Assistant, tarjetas de Homepage, paneles Grafana, recogida de Prometheus, flujos n8n y scripts propios. Incluye categorías, métricas exportadas y ejemplos curl.", "section": "ProxMenux Monitor" }, "intro": { "title": "Para qué es esta página", "body": "Esta página reúne endpoints para integraciones externas: datos de lectura y operaciones como iniciar backups, enviar avisos y confirmar alertas. La API usa el mismo proceso Flask que sirve el panel en TCP 8008. La dirección de escucha y TLS se explican en Acceso y autenticación." }, "headerEndpoint": "Endpoint", "headerMethod": "Método", "headerUse": "Uso", "auth": { "heading": "Autenticación", "intro": "Con la autenticación activada, los endpoints protegidos esperan un JWT Bearer en la cabecera de la petición:", "tokensIntro": "Dos formas de obtener el token:", "items": [ "Tokens API, recomendados para integraciones. Valen 365 días y se crean en Seguridad → Tokens API. Tienen nombre y revocación individual. Usa read_only para datos y full_admin solo para acciones administrativas necesarias.", "Inicio de sesión, JWT de 24 horas. POST /api/auth/login con usuario, contraseña y TOTP si lo exige 2FA. El JWT caduca a las 24 horas; los scripts deben volver a autenticarse después." ], "flowLink": "El acceso, contraseñas, 2FA, auditoría y TLS se explican en Acceso y autenticación.", "rows": [ { "endpoint": "/api/auth/login", "method": "POST", "use": "Campos del cuerpo (esquema): '{'\"username\",\"password\",\"totp_token?\"'}'. Devuelve un JWT de 24 horas." }, { "endpoint": "/api/auth/api-tokens", "method": "GET", "use": "Lista los tokens API: nombres, prefijos y fechas; el valor secreto no se devuelve." }, { "endpoint": "/api/auth/generate-api-token", "method": "POST", "use": "Crea un token API de 365 días con una sesión autenticada. Campos: password, token_name?, totp_token?, scope?. Se comprueban otra vez contraseña y TOTP requerido. scope usa read_only por defecto; full_admin se elige expresamente. El secreto se devuelve una sola vez." }, { "endpoint": "/api/auth/api-tokens/", "method": "DELETE", "use": "Revoca un API token específico por su ID." } ] }, "conventions": { "heading": "Convenciones", "items": [ "La mayoría usa JSON. Algunas descargas son texto plano y /api/prometheus devuelve el formato de exposición de Prometheus 0.0.4, en vez de OpenMetrics. Comprueba el tipo de respuesta de cada ruta.", "Muchas operaciones devuelven '{'\"success\": true, ...'}'. Los errores varían; una forma habitual es '{'\"success\": false, \"error\": \"'<'reason'>'\"'}'. Comprueba estado HTTP y campos: algunos retos de autenticación usan HTTP 200 con success false.", "Los parámetros dependen del endpoint. Usa limit, offset, since y filtros por categoría solo si esa ruta los admite.", "Los tiempos varían por endpoint: marcas Unix, cadenas ISO-8601 y fechas con formato systemd. No supongas una unidad común ni una zona horaria explícita en todos los campos." ] }, "system": { "heading": "Sistema y hardware", "rows": [ { "endpoint": "/api/system", "method": "GET", "use": "Valores actuales de CPU, memoria, swap, tiempo encendido y carga." }, { "endpoint": "/api/info", "method": "GET", "use": "Información estática del host: hostname, kernel, versión de PVE, modelo de CPU, distro." }, { "endpoint": "/api/system-info", "method": "GET", "use": "Datos ampliados usados por la cabecera del panel: métricas generales y hora de arranque." }, { "endpoint": "/api/hardware", "method": "GET", "use": "Inventario detallado de hardware: dispositivos PCI, GPU y sensores." }, { "endpoint": "/api/hardware/live", "method": "GET", "use": "Valores actuales de sensores que cambian rápidamente." }, { "endpoint": "/api/temperature/history", "method": "GET", "use": "Historial de temperaturas de CPU y encapsulado." }, { "endpoint": "/api/gpu//realtime", "method": "GET", "use": "Métricas actuales de GPU NVIDIA, Intel y AMD por posición PCI." } ] }, "actions": { "heading": "Acciones del sistema", "intro": "Estas acciones asíncronas se ejecutan en unidades systemd transitorias. Con autenticación activa, sus rutas de escritura exigen full_admin; read_only puede consultar .../status. El inicio aceptado devuelve HTTP 202 y estado; consulta .../status para el progreso. El control de invitados y los backups usan respuestas distintas, explicadas abajo.", "shapeTitle": "Formato de respuesta común", "shapeIntro": "Las acciones asíncronas del sistema comparten este objeto JSON de estado. El control de invitados y los backups tienen formatos distintos:", "shapeCode": "{\n \"unit\": \"proxmenux-action-pve-update.service\",\n \"state\": \"idle | running | success | failed | cancelled\",\n \"started_at\": \"Sat 2026-08-01 11:01:32 CEST\",\n \"finished_at\": null,\n \"exit_code\": null,\n \"result\": null\n}", "concurrencyTitle": "Concurrencia y cancelación", "concurrencyBody": "Iniciar otra ejecución de la misma acción activa devuelve HTTP 409. Solo se cancela si hay una ruta DELETE documentada, como en la actualización PVE. Su estado pasa a cancelled y conserva fechas. Los estados finales se guardan en memoria del proceso y pueden perderse al reiniciar Monitor.", "rows": [ { "endpoint": "/api/system/power/reboot", "method": "POST", "use": "Inicia el reinicio del host Proxmox. La conexión HTTP puede cerrarse cuando systemd comienza el apagado." }, { "endpoint": "/api/system/power/reboot/status", "method": "GET", "use": "Estado del reinicio actual o anterior." }, { "endpoint": "/api/system/power/shutdown", "method": "POST", "use": "Apaga el host Proxmox; puede conectarse a una señal de apagado del SAI." }, { "endpoint": "/api/system/power/shutdown/status", "method": "GET", "use": "Estado del apagado actual o anterior." }, { "endpoint": "/api/system/pve-update/run", "method": "POST", "use": "Inicia la actualización de PVE usada por Actualizar ahora de Health Monitor y el menú de consola; delega en update-pve-safe.sh." }, { "endpoint": "/api/system/pve-update/status", "method": "GET", "use": "Estado de la actualización PVE actual o anterior." }, { "endpoint": "/api/system/pve-update", "method": "DELETE", "use": "Cancela una actualización PVE en curso mediante SIGTERM al proceso." }, { "endpoint": "/api/proxmenux/self-update/run", "method": "POST", "use": "Actualiza ProxMenux con el instalador del canal estable o beta configurado. Usa su propia unidad systemd para poder continuar durante el reinicio de proxmenux-monitor que realiza el instalador." }, { "endpoint": "/api/proxmenux/self-update/status", "method": "GET", "use": "Estado de la actualización de ProxMenux actual o anterior." }, { "endpoint": "/api/vms//control", "method": "POST", "use": "Envía una orden de control de VM o LXC. El campo action admite start, stop, shutdown o reboot. La respuesta correcta devuelve una tarea PVE confirmada, sin indicar que ya haya terminado. Consulta el endpoint control-task del invitado para obtener el resultado." }, { "endpoint": "/api/vms//backup", "method": "POST", "use": "Crea un backup vzdump de una VM o LXC. Campos opcionales, ajustables según el almacenamiento: storage (destino PVE), mode (snapshot, suspend o stop), compress (zstd, lzo, gzip o none), protected (true o false), notes y pbs_change_detection (default, legacy o data). Devuelve el UPID de la tarea PVE." }, { "endpoint": "/api/vms//backups", "method": "GET", "use": "Listar backups anteriores de una VM o LXC en todos los storages accesibles." } ], "syncVsAsyncTitle": "Dos tipos de acción", "syncVsAsyncBody": "Encendido, apagado y actualizaciones del host usan unidades systemd transitorias con .../status. Solo la actualización PVE tiene aquí una ruta de cancelación DELETE. El control VM/LXC devuelve una tarea que debe consultarse; el backup devuelve un UPID de trabajo en segundo plano. Aceptar la petición no equivale a terminarla. Autenticación y permisos dependen de la ruta.", "curlTitle": "Ejemplo curl", "curlBody": "Inicia una actualización PVE y consulta hasta que termine: la secuencia que usaría una automatización Home Assistant o un playbook Ansible.", "curlCode": "TOKEN=\n\ncurl -sSf -X POST \\\n -H \"Authorization: Bearer $TOKEN\" \\\n https://:8008/api/system/pve-update/run\n\nwhile true; do\n state=$(curl -sSf -H \"Authorization: Bearer $TOKEN\" \\\n https://:8008/api/system/pve-update/status | jq -r .state)\n [ \"$state\" != \"running\" ] && break\n sleep 30\ndone\necho \"final state: $state\"", "haTitle": "Ejemplo para Home Assistant", "haBody": "Un sensor rest consulta el estado y rest_command inicia la actualización. Úsalos con un botón del panel y las automatizaciones que necesites:", "haCode": "# configuration.yaml\nsensor:\n - platform: rest\n resource: https://pve.local:8008/api/system/pve-update/status\n name: pve_update_state\n value_template: \"{{ value_json.state }}\"\n scan_interval: 60\n headers:\n Authorization: \"Bearer !secret proxmenux_token\"\n\nrest_command:\n pve_update:\n url: https://pve.local:8008/api/system/pve-update/run\n method: POST\n headers:\n Authorization: \"Bearer !secret proxmenux_token\"\n\n # Start VM 100 (works for LXC too — same endpoint)\n vm_100_start:\n url: https://pve.local:8008/api/vms/100/control\n method: POST\n content_type: 'application/json'\n payload: '{\"action\": \"start\"}'\n headers:\n Authorization: \"Bearer !secret proxmenux_token\"\n\n # Backup VM 100 to the 'pbs-main' storage\n vm_100_backup:\n url: https://pve.local:8008/api/vms/100/backup\n method: POST\n content_type: 'application/json'\n payload: '{\"storage\": \"pbs-main\", \"mode\": \"snapshot\", \"compress\": \"zstd\"}'\n headers:\n Authorization: \"Bearer !secret proxmenux_token\"" }, "health": { "heading": "Monitor de salud", "rows": [ { "endpoint": "/api/health", "method": "GET", "use": "Comprobación ligera que devuelve JSON con status, timestamp y version. Sirve para palabras clave de Uptime Kuma; con autenticación activa, el cliente debe enviar la cabecera Bearer." }, { "endpoint": "/api/health/status", "method": "GET", "use": "Estado global: un nivel de gravedad y un resumen." }, { "endpoint": "/api/health/details", "method": "GET", "use": "Las diez categorías con estado y datos estructurados de cada comprobación." }, { "endpoint": "/api/health/full", "method": "GET", "use": "Datos completos: categorías, errores activos, alertas descartadas y ajustes de silenciamiento. Usa resultados de fondo con menos de seis minutos; si no hay caché reciente o fuerzas la actualización, ejecuta una comprobación nueva." }, { "endpoint": "/api/health/active-errors", "method": "GET", "use": "Lista activa, filtrable por ?category=<name>." }, { "endpoint": "/api/health/dismissed", "method": "GET", "use": "Alertas descartadas con horas de silencio restantes." }, { "endpoint": "/api/health/settings", "method": "GET", "use": "Duración de silenciamiento configurada para cada categoría." }, { "endpoint": "/api/health/remote-storages", "method": "GET", "use": "Inventario de almacenamientos remotos definidos por Proxmox, con estado online." }, { "endpoint": "/api/health/interfaces", "method": "GET", "use": "Interfaces de red con tipo (bridge / bond / física), IP y velocidad del enlace." }, { "endpoint": "/api/health/acknowledge", "method": "POST", "use": "Cuerpo: '{'\"error_key\":\"smart_sdh\"'}'. Silencia una alerta durante el periodo configurado para su categoría." }, { "endpoint": "/api/health/cleanup-orphans", "method": "POST", "use": "Limpieza manual de errores cuyo dispositivo o VM subyacente ha desaparecido. Idempotente." } ], "outro": "Los formatos de respuesta y las categorías se explican en Health Monitor." }, "storage": { "heading": "Almacenamiento", "rows": [ { "endpoint": "/api/storage", "method": "GET", "use": "Discos visibles para el host: dispositivos de bloques, pools ZFS y LVM." }, { "endpoint": "/api/storage/summary", "method": "GET", "use": "Resumen compacto usado por las tarjetas del panel." }, { "endpoint": "/api/proxmox-storage", "method": "GET", "use": "Almacenamientos definidos por Proxmox desde /etc/pve/storage.cfg con estado online y espacio libre." }, { "endpoint": "/api/storage/observations", "method": "GET", "use": "Historial persistente de observaciones: avisos SMART, errores de E/S y eventos ZFS. Se conserva aunque se resuelva la alerta." }, { "endpoint": "/api/storage/smart/", "method": "GET", "use": "Atributos SMART actuales para un disco." }, { "endpoint": "/api/storage/smart//latest", "method": "GET", "use": "Self-test SMART más reciente para el disco." }, { "endpoint": "/api/storage/smart//history", "method": "GET", "use": "Lista de reportes SMART almacenados para el disco." }, { "endpoint": "/api/storage/smart//history/", "method": "GET", "use": "Lee un reporte SMART almacenado específico." }, { "endpoint": "/api/storage/smart//test", "method": "POST", "use": "Inicia una prueba SMART. Esquema del cuerpo: '{'\"test_type\":\"short\"|\"long\"'}'." }, { "endpoint": "/api/storage/smart/schedules", "method": "GET", "use": "Lista los tests SMART programados actualmente." }, { "endpoint": "/api/storage/smart/tools", "method": "GET", "use": "Comprueba si están instalados smartctl y las herramientas asociadas." } ] }, "network": { "heading": "Red", "rows": [ { "endpoint": "/api/network", "method": "GET", "use": "Todas las interfaces con estado de enlace y direcciones." }, { "endpoint": "/api/network/summary", "method": "GET", "use": "Vista compacta usada por el panel." }, { "endpoint": "/api/network//metrics", "method": "GET", "use": "RX/TX por interfaz, contadores de errores y series temporales RRD." }, { "endpoint": "/api/network/latency/current", "method": "GET", "use": "Última medición de latencia hasta la puerta de enlace." }, { "endpoint": "/api/network/latency/history", "method": "GET", "use": "Serie temporal de latencia al gateway." } ] }, "vms": { "heading": "VMs y contenedores", "rows": [ { "endpoint": "/api/vms", "method": "GET", "use": "VM y CT del nodo local con estado, vmid y nombre." }, { "endpoint": "/api/vms/", "method": "GET", "use": "Detalle completo de un guest (config, red, discos)." }, { "endpoint": "/api/vms//metrics", "method": "GET", "use": "Serie temporal de CPU / memoria / I/O de disco para un guest (RRD)." }, { "endpoint": "/api/vms//logs", "method": "GET", "use": "Registros de tareas recientes de ese invitado." }, { "endpoint": "/api/vms//backups", "method": "GET", "use": "Backups conservados para este invitado." }, { "endpoint": "/api/vms//control", "method": "POST", "use": "Selecciona una acción del esquema: '{'\"action\":\"start|stop|reboot|shutdown\"'}'. Controla el estado de encendido del invitado." }, { "endpoint": "/api/vms//backup", "method": "POST", "use": "Inicia vzdump para el invitado. El cuerpo indica almacenamiento y modo (snapshot / suspend / stop)." }, { "endpoint": "/api/vms//config", "method": "PUT", "use": "Actualiza el campo descripción (notes) de una VM / CT. Otras claves de config no son modificables desde este endpoint." }, { "endpoint": "/api/node/metrics", "method": "GET", "use": "Métricas agregadas del nodo en series RRD." } ] }, "backups": { "heading": "Backups", "rows": [ { "endpoint": "/api/backups", "method": "GET", "use": "Backups encontrados en almacenamientos dir, NFS, CIFS y PBS consultados desde el nodo local. No explora todos los nodos del clúster." }, { "endpoint": "/api/backup-storages", "method": "GET", "use": "Almacenamientos que admiten backups, con espacio libre." } ] }, "logs": { "heading": "Logs, tareas, eventos", "rows": [ { "endpoint": "/api/logs", "method": "GET", "use": "Entradas del journal filtradas. Query: ?level=&service=&limit=." }, { "endpoint": "/api/logs/download", "method": "GET", "use": "Exporta el intervalo filtrado como texto plano." }, { "endpoint": "/api/events", "method": "GET", "use": "Stream interno de eventos — el mismo que alimenta las notificaciones." }, { "endpoint": "/api/task-log/", "method": "GET", "use": "Registro completo de una tarea Proxmox, en texto plano, identificado por UPID." } ] }, "notifications": { "heading": "Notificaciones e IA", "intro": "El envío, la configuración de canales y la reformulación con IA se explican en Notificaciones y Asistente de IA.", "rows": [ { "endpoint": "/api/notifications", "method": "GET", "use": "Notificaciones recientes mostradas en el panel." }, { "endpoint": "/api/notifications/download", "method": "GET", "use": "Exporta las notificaciones como texto." }, { "endpoint": "/api/notifications/status", "method": "GET", "use": "Estado del envío: proceso de fondo activo, longitud de cola y último envío." }, { "endpoint": "/api/notifications/settings", "method": "GET", "use": "Lee la configuración de notificaciones: canales, controles por evento, reformulación con IA y nombre visible." }, { "endpoint": "/api/notifications/history", "method": "GET", "use": "Historial de envío. Parámetros: ?limit=&offset=&severity=&channel=." }, { "endpoint": "/api/notifications/history", "method": "DELETE", "use": "Borra la tabla del historial de envío." }, { "endpoint": "/api/notifications/test", "method": "POST", "use": "Envía un aviso de prueba a un canal. Cuerpo: '{'\"channel\":\"telegram\"'}'." }, { "endpoint": "/api/notifications/send", "method": "POST", "use": "Emite un evento personalizado. Cuerpo: '{'\"event_type\":\"custom\",\"severity\":\"WARNING\",\"title\":\"...\",\"body\":\"...\",\"data\":'{''}''}'." }, { "endpoint": "/api/notifications/test-ai", "method": "POST", "use": "Prueba la conexión con el proveedor de IA. Campos del cuerpo (esquema): '{'\"provider\",\"api_key\",\"model\",\"ollama_url?\"'}'." }, { "endpoint": "/api/notifications/provider-models", "method": "POST", "use": "Lista modelos disponibles para el proveedor de IA seleccionado." }, { "endpoint": "/api/notifications/proxmox/setup-webhook", "method": "POST", "use": "Registra el Monitor como destino webhook en /etc/pve/notifications.cfg." }, { "endpoint": "/api/notifications/proxmox/cleanup-webhook", "method": "POST", "use": "Elimina el destino del Monitor de la config de notificaciones de PVE." }, { "endpoint": "/api/notifications/proxmox/read-cfg", "method": "GET", "use": "Lee el notifications.cfg actual de PVE como lo ve PVE." } ] }, "security": { "heading": "Seguridad (lectura)", "rows": [ { "endpoint": "/api/security/firewall/status", "method": "GET", "use": "Estado del firewall de PVE y reglas activas." }, { "endpoint": "/api/security/fail2ban/details", "method": "GET", "use": "Estado del jail Fail2Ban; requiere tener instalado ese componente opcional." }, { "endpoint": "/api/security/fail2ban/activity", "method": "GET", "use": "Eventos recientes de Fail2Ban: bloqueos, desbloqueos y arranques del jail." }, { "endpoint": "/api/security/lynis/status", "method": "GET", "use": "Estado de Lynis: instalación y fecha del último análisis." }, { "endpoint": "/api/security/lynis/report", "method": "GET", "use": "Último informe Lynis: avisos, sugerencias e índice de refuerzo de seguridad." }, { "endpoint": "/api/security/tools", "method": "GET", "use": "Detecta qué herramientas opcionales de seguridad (Fail2Ban, Lynis) están instaladas." } ] }, "proxmenuxIntegration": { "heading": "Integración ProxMenux", "rows": [ { "endpoint": "/api/proxmenux/update-status", "method": "GET", "use": "Disponibilidad de actualización de ProxMenux Monitor, versión instalada y más reciente." }, { "endpoint": "/api/proxmenux/installed-tools", "method": "GET", "use": "Lista de cada optimización post-instalación de ProxMenux registrada actualmente en el host (desde /usr/local/share/proxmenux/installed_tools.json)." }, { "endpoint": "/api/proxmenux/tool-source/", "method": "GET", "use": "Código de la función posterior a la instalación asociada, extraído del script actual del host o de código antiguo conservado. No garantiza una copia del código exacto ejecutado originalmente." } ] }, "prometheus": { "heading": "Métricas Prometheus", "intro": "GET /api/prometheus con autenticación devuelve el formato de texto Prometheus 0.0.4. Cada métrica incluye node=\"<hostname>\" y una marca de tiempo explícita. Recógela con Prometheus u otra base temporal compatible.", "exportedTitle": "Métricas exportadas", "headerGroup": "Grupo", "headerMetric": "Métrica", "headerDesc": "Descripción", "groups": [ { "group": "Sistema", "metrics": [ { "metric": "proxmox_cpu_usage", "desc": "Porcentaje de uso de CPU, de tipo gauge." }, { "metric": "proxmox_memory_total_bytes", "desc": "Memoria física total en bytes." }, { "metric": "proxmox_memory_used_bytes", "desc": "Memoria utilizada en bytes." }, { "metric": "proxmox_memory_usage_percent", "desc": "Porcentaje de uso de memoria." }, { "metric": "proxmox_load_average", "desc": "Carga media del sistema. Etiqueta period=\"1m\" | \"5m\" | \"15m\"." } ] }, { "group": "Tiempo de actividad", "metrics": [ { "metric": "proxmox_uptime_seconds", "desc": "Segundos desde el último arranque." } ] }, { "group": "Hardware", "metrics": [ { "metric": "proxmox_cpu_temperature_celsius", "desc": "Temperatura del encapsulado de CPU." }, { "metric": "proxmox_disk_temperature_celsius", "desc": "Temperatura por disco. Etiqueta disk." }, { "metric": "proxmox_fan_speed_rpm", "desc": "Velocidades de ventiladores. Etiqueta fan." } ] }, { "group": "Espacio en disco", "metrics": [ { "metric": "proxmox_disk_total_bytes", "desc": "Capacidad total de cada entrada de disco exportada. Etiqueta disk." }, { "metric": "proxmox_disk_used_bytes", "desc": "Capacidad utilizada de cada entrada de disco exportada." }, { "metric": "proxmox_disk_usage_percent", "desc": "Porcentaje utilizado de cada entrada de disco exportada." } ] }, { "group": "Red", "metrics": [ { "metric": "proxmox_network_bytes_sent_total", "desc": "Total de bytes enviados, de tipo counter." }, { "metric": "proxmox_network_bytes_received_total", "desc": "Total de bytes recibidos, de tipo counter." }, { "metric": "proxmox_interface_bytes_sent_total", "desc": "Bytes enviados por interfaz. Etiqueta interface." }, { "metric": "proxmox_interface_bytes_received_total", "desc": "Bytes recibidos por interfaz." } ] }, { "group": "VMs / CTs", "metrics": [ { "metric": "proxmox_vms_total", "desc": "Número total de VMs y LXCs." }, { "metric": "proxmox_vms_running", "desc": "Número de invitados en ejecución." }, { "metric": "proxmox_vms_stopped", "desc": "Número de invitados detenidos." }, { "metric": "proxmox_vm_status", "desc": "Estado por VM/CT: 1 en ejecución, 0 en otro estado. Etiquetas node, vmid y name." }, { "metric": "proxmox_vm_cpu_usage", "desc": "Uso de CPU por VM/CT, con las mismas etiquetas." }, { "metric": "proxmox_vm_memory_used_bytes / _max_bytes", "desc": "Memoria utilizada y máximo configurado por VM/CT." } ] }, { "group": "GPU", "metrics": [ { "metric": "proxmox_gpu_temperature_celsius", "desc": "Temperatura GPU. Etiquetas slot y vendor; también incluye el nombre de GPU en gpu." }, { "metric": "proxmox_gpu_utilization_percent", "desc": "Porcentaje de utilización de GPU." }, { "metric": "proxmox_gpu_memory_total_bytes", "desc": "Memoria total de la GPU." }, { "metric": "proxmox_gpu_power_draw_watts", "desc": "Consumo eléctrico de la GPU en vatios." }, { "metric": "proxmox_gpu_clock_speed_mhz", "desc": "Frecuencia del núcleo de la GPU." }, { "metric": "proxmox_gpu_memory_clock_mhz", "desc": "Frecuencia de la memoria de la GPU." } ] }, { "group": "UPS", "metrics": [ { "metric": "proxmox_ups_battery_charge_percent", "desc": "Porcentaje de carga de la batería." }, { "metric": "proxmox_ups_load_percent", "desc": "Carga actual de la UPS." }, { "metric": "proxmox_ups_runtime_seconds", "desc": "Autonomía estimada con batería." }, { "metric": "proxmox_ups_input_voltage_volts", "desc": "Voltaje de entrada." } ] } ], "scrapeTitle": "Configuración de scrape de Prometheus", "scrapeIntro": "Con autenticación activa, añade un token API a la cabecera Bearer de la configuración de recogida de Prometheus:", "perHostTitle": "Recogida por host", "perHostBody": "Cada instancia exporta métricas de su propio host. En un clúster, configura Prometheus para consultar cada nodo. La etiqueta node distingue las series en Grafana (proxmox_vms_running'{'node=\"pve01\"'}')." }, "puttingItTogether": { "heading": "Combinar las integraciones", "body": "Consulta Integraciones para conectar estos endpoints con sensores Home Assistant, tarjetas Homepage, paneles Grafana, flujos n8n y otras herramientas. Incluye la configuración habitual de cada plataforma con ejemplos copiables. Esta página reúne el catálogo de endpoints." }, "whereNext": { "heading": "Por dónde seguir", "items": [ { "label": "Acceso y autenticación", "href": "/docs/monitor/access-auth", "tail": " — creación de tokens, registro de auditoría, jail opcional de Fail2Ban y TLS." }, { "label": "Notificaciones", "href": "/docs/monitor/notifications", "tailRich": " — contenido de data para cada evento al llamar a /api/notifications/send." }, { "label": "Asistente de IA", "href": "/docs/monitor/ai-assistant", "tailRich": " — funcionamiento de /api/notifications/test-ai y /api/notifications/provider-models." }, { "label": "Monitor de salud", "href": "/docs/monitor/health-monitor", "tailRich": " — formato de respuesta de /api/health/* y significado de las diez categorías." } ] } }