Ir al contenido
  1. Posts/

qm agent ping en Proxmox: cómo compruebo el QEMU Guest Agent antes de confiar en una VM

qm agent ping es una de esas comprobaciones que no lucen nada en una captura, y quizá por eso me gusta tanto.

No te enseña una tabla enorme. No te dibuja una gráfica. No te da una conclusión dramática. Si todo va bien, normalmente no devuelve nada. Y aun así, cuando estoy delante de una VM en Proxmox y quiero saber si puedo hablar con el sistema invitado desde fuera, es una de las primeras cosas que lanzo.

El motivo es simple. Proxmox puede saber que una VM está encendida sin que el sistema invitado esté colaborando. QEMU puede estar corriendo, el proceso puede existir, la VM puede aparecer como running, y aun así el QEMU Guest Agent puede estar parado, mal instalado, desactivado o bloqueado dentro del propio sistema.

Eso cambia mucho las decisiones.

Si el agente responde, puedo pedir información del invitado con bastante confianza. IPs, sistemas de archivos, usuarios, algunos comandos internos, apagado limpio en ciertos casos. Si no responde, Proxmox sigue viendo una máquina virtual, pero ya no tengo ese canal fino hacia dentro. Y cuando estás tocando infraestructura a las tantas, saber esa diferencia evita bastante teatro.

la captura de este post
#

La imagen está creada a partir de una salida real de mi laboratorio, con nombres y datos saneados. He dejado el comportamiento importante, que es lo que interesa para reproducirlo en cualquier Proxmox sin enseñar detalles privados.

Salida saneada de qm agent ping en Proxmox

El comando base es este.

1
qm agent 120 ping

Si responde bien, lo normal es que no veas nada.

1
qm agent 120 ping

Sin texto. Sin aplausos. Sin palmadita en la espalda.

Por eso suelo mirar el código de salida si estoy haciendo una comprobación más formal.

1
echo $?

Un 0 me dice que el agente ha contestado. Si falla, ya aparece el mensaje que no quería ver.

1
QEMU guest agent is not running

Ese mensaje parece pequeño, pero cambia la película. Ya no estoy diagnosticando una VM colaboradora. Estoy diagnosticando una caja que Proxmox puede encender y apagar a nivel de hipervisor, pero que no está respondiendo por el canal del agente.

qué es realmente el QEMU Guest Agent
#

El QEMU Guest Agent es un servicio que corre dentro de la VM. No está en el host. No es magia de Proxmox. Es una pieza instalada en el sistema invitado que permite a Proxmox preguntarle cosas al sistema desde un canal controlado.

En Debian o Ubuntu suele instalarse así.

1
2
apt install qemu-guest-agent
systemctl enable --now qemu-guest-agent

En Windows se instala desde las guest tools correspondientes. En ambos casos, además de instalarlo dentro de la VM, hace falta que la VM tenga el agente activado en Proxmox.

La línea típica en configuración es esta.

1
agent: 1

Yo lo compruebo así.

1
qm config 120 | grep '^agent'

Si no aparece, o aparece desactivado, ya tienes una explicación bastante sencilla. El invitado puede tener el servicio instalado, pero Proxmox no le ha dado el canal. O al revés. Puedes tener agent: 1 en Proxmox y dentro de la VM no estar corriendo nada.

Me gusta separar esas dos capas porque evita confusiones absurdas. Una cosa es que Proxmox esté preparado para hablar. Otra cosa es que dentro haya alguien escuchando.

por qué lo compruebo antes de tocar una VM
#

Hay tres momentos en los que me parece especialmente útil.

El primero es antes de apagar o reiniciar una VM desde Proxmox. Si el agente responde, tengo más confianza en operaciones limpias y en que el sistema invitado no está completamente colgado. No significa que todo esté perfecto, pero al menos sé que hay comunicación.

El segundo es cuando necesito averiguar una IP sin entrar por SSH. Proxmox puede consultar interfaces del invitado con comandos como network-get-interfaces, pero eso depende del agente. Si qm agent ping falla, no pierdo tiempo preguntando por interfaces. Primero arreglo el canal.

El tercero es cuando algo parece vivo desde fuera pero raro desde dentro. Una VM puede responder al proceso QEMU y no responder a red. Puede estar en running y no levantar servicios. Puede tener el sistema a medias después de un arranque malo. qm agent ping no diagnostica todo eso, pero me da una señal rápida sobre si el invitado está lo bastante despierto como para contestar.

No es una prueba de salud completa. Es un apretón de manos.

mi orden normal de comprobación
#

Cuando una VM se comporta raro, suelo ir de fuera hacia dentro.

Primero miro si Proxmox cree que está arrancada.

1
qm status 120

Después miro si hay cambios pendientes que puedan explicar rarezas.

1
qm pending 120

Luego compruebo si el agente responde.

1
qm agent 120 ping

Ese orden me funciona porque cada paso reduce una ambigüedad distinta.

qm status responde a la pregunta básica. La VM está corriendo o no.

qm pending responde a otra pregunta que parece menor hasta que te muerde. La configuración que creo aplicada es realmente la que está usando la VM.

qm agent ping responde a la siguiente. Proxmox puede hablar con el sistema invitado o solo está viendo el envoltorio.

Podría hacerlo todo desde la interfaz web, claro. Pero cuando ya estoy en SSH al nodo, estos comandos me dan una lectura más directa. Además dejan menos espacio a mi memoria, que no es precisamente un sistema transaccional certificado.

cuando no devuelve nada
#

La primera vez que usas qm agent ping, el silencio puede parecer sospechoso. Estamos acostumbrados a comandos que nos dicen OK, success o cualquier otra palabra tranquilizadora. Aquí no.

En muchos casos, si todo va bien, vuelve al prompt y ya está.

Ese silencio es buena señal.

Si quieres confirmarlo en un script o en una revisión manual, mira el código de salida.

1
2
qm agent 120 ping
echo $?

Si devuelve 0, el agente contestó.

En una revisión rápida no suelo necesitar más. Si estoy metiendo esto en un script, sí trato el código de salida y escribo mi propio mensaje claro.

1
2
3
4
5
6
7
qm agent 120 ping >/dev/null 2>&1
if [ $? -eq 0 ]
then
  echo "guest agent ok"
else
  echo "guest agent no responde"
fi

Este tipo de comprobación me parece muy útil en scripts de mantenimiento. Antes de pedir IPs, sistemas de archivos o apagados finos, compruebas si el canal existe. Menos ruido. Menos errores en cadena.

cuando falla
#

Si falla, no salto directamente a reiniciar la VM. Esa es la típica reacción de homelab con sueño, y a veces funciona, pero también es una forma elegante de tapar el problema sin entenderlo.

Primero confirmo que Proxmox tiene el agente activado.

1
qm config 120 | grep '^agent'

Si no está activo, lo activo con la VM parada o según lo permita el caso.

1
qm set 120 --agent enabled=1

Luego entro en la VM por el método que tenga disponible, normalmente SSH si la red funciona, y compruebo el servicio.

1
systemctl status qemu-guest-agent

Si no está instalado, lo instalo. Si está instalado pero parado, lo arranco. Si está fallando, miro el log.

1
journalctl -u qemu-guest-agent -n 50 --no-pager

La mayoría de las veces el arreglo es aburrido. Servicio no instalado, servicio parado, plantilla mal preparada o VM creada rápido sin activar el agente en Proxmox. No hay misterio. Solo falta una pieza.

Lo importante es no confundir running con gestionable desde el invitado. Una VM puede estar corriendo y no tener guest agent. Proxmox no te debe esa comodidad si tú no la has preparado.

en plantillas es donde más se nota
#

Donde más partido le saco al QEMU Guest Agent es en plantillas.

Si preparo una plantilla de Debian, Ubuntu o cualquier Linux que voy a clonar varias veces, instalo y activo el agente desde el principio. También dejo cloud-init bien configurado si toca. Así, cada VM nueva nace con una mínima capacidad de conversación con Proxmox.

Esto parece una pijada hasta que empiezas a tener varias máquinas. En una VM suelta no pasa nada por entrar a mano y arreglarlo. En diez VMs, la falta de guest agent se convierte en una pequeña deuda repetida. La típica deuda que no te rompe el sistema, pero te hace perder cinco minutos cada vez que algo falla.

Y en un homelab, cinco minutos repetidos muchas veces acaban siendo una tarde.

Mi regla actual es sencilla. Toda VM Linux que vaya a vivir más de un rato debe tener guest agent instalado, activo y comprobado. Si es una VM efímera para una prueba tonta, puedo pasar. Si va a alojar algo que me importa, no.

lo que no te dice este comando
#

Conviene no venderle poderes que no tiene.

qm agent ping no te dice que la aplicación dentro de la VM esté bien. No te dice que Docker esté sano. No te dice que el disco tenga espacio. No te dice que la red sea correcta para tus usuarios. Solo te dice que el agente responde.

Eso es útil, pero limitado.

He visto VMs con el agente respondiendo y un servicio principal completamente roto. También he visto máquinas que no tenían guest agent y funcionaban perfectamente para su tarea. El agente no es una garantía de salud. Es una herramienta de observabilidad y control.

La diferencia importa porque si lo conviertes en oráculo, acabarás diagnosticando mal.

Yo lo uso como una señal temprana. Si responde, puedo seguir haciendo preguntas desde Proxmox. Si no responde, sé que esa vía está cerrada y cambio de método.

errores típicos que veo
#

El primer error es pensar que Proxmox instala el agente por ti dentro de la VM. No. Puede activar el canal, pero el servicio tiene que existir en el invitado.

El segundo es instalarlo en la plantilla después de haber clonado varias VMs y asumir que las viejas lo heredan. Tampoco. Las VMs ya creadas siguen como estaban.

El tercero es olvidarse de Windows. En Linux solemos tener el paquete claro. En Windows, si no instalas las herramientas adecuadas, Proxmox puede quedarse igual de ciego.

El cuarto es usar el agente como sustituto de monitorización. No lo es. Para servicios uso Uptime Kuma, métricas, logs o lo que toque. El guest agent me ayuda a hablar con la VM desde Proxmox, pero no sustituye una comprobación real de la aplicación.

cómo lo dejaría en una mini checklist
#

Antes de tocar una VM que me importa, hago esto.

1
2
3
qm status 120
qm pending 120
qm agent 120 ping

Si las tres lecturas tienen sentido, sigo.

Si qm status dice que está parada cuando yo pensaba que estaba viva, paro y reviso.

Si qm pending enseña cambios pendientes, no diagnostico rendimiento como si esos cambios ya estuvieran aplicados.

Si qm agent ping falla, no uso comandos que dependan del invitado hasta arreglarlo o hasta aceptar que voy por otra vía.

Es una checklist pequeña. Precisamente por eso funciona. Las checklists largas son preciosas el primer día y cadáver administrativo el tercero.

mi opinión
#

qm agent ping no es emocionante, pero es de los comandos que separan el homelab cómodo del homelab lleno de pequeñas supersticiones.

Cuando no lo usas, acabas diciendo cosas como “Proxmox no ve la IP”, “la VM está rara” o “esto ayer funcionaba”. A veces es verdad. Muchas veces falta una comprobación básica.

A mí me gusta porque obliga a formular una pregunta concreta.

¿Tengo canal con el invitado?

Si la respuesta es sí, sigo tirando del hilo desde Proxmox. Si la respuesta es no, ya sé que no debo fiarme de funciones que dependen de ese canal.

No arregla el sistema. No sustituye entrar por SSH. No convierte una plantilla mala en buena. Pero evita una clase muy concreta de pérdida de tiempo, que es justo lo que le pido a un comando pequeño.

Y si algo tiene valor en un homelab real, no es que parezca sofisticado. Es que te quite tonterías del camino antes de que te roben la noche.