Gestión de licencias de software en GLPI

Guía técnica de gestión de licencias de software en GLPI: el modelo de datos (glpi_softwarelicenses), la fragmentación de nombre que anula el excedente de conformidad, la corrección por el Diccionario de Software, la consulta de excedente real, los tres interruptores de la alerta de vencimiento y una matriz de decisión por tipo de licencia - con la experiencia de quien reconcilia parques.

En este artículo7 secciones

Una auditoría de fabricante puede costar muy caro, pero lo que rompe la gestión de licencias en GLPI rara vez es el precio de la licencia: es la instalación que el sistema cuenta contra el software equivocado. En los parques GLPI que mantenemos para clientes, el informe de conformidad casi siempre existe; lo que falta es confiar en él. Esta guía muestra cómo modelar licencias, por qué el número de excedente sale torcido y cómo afinar la reconciliación y las alertas para que la auditoría no sea una sorpresa.

El modelo de datos que sostiene todo

Antes de cualquier informe, entiende cómo GLPI enlaza las piezas. Cuatro tablas nativas importan:

  • glpi_softwares - el software en sí (un registro por nombre).
  • glpi_softwareversions - las versiones de cada software.
  • glpi_softwarelicenses - las licencias adquiridas, con cantidad (campo number), tipo, validez (expire) y proveedor.
  • glpi_items_softwareversions - cada instalación detectada, enlazando un elemento (equipo, VM) a una versión.

La conformidad nace del cruce entre la suma de number en glpi_softwarelicenses y el recuento de filas en glpi_items_softwareversions, agrupados por software. Si cualquiera de los dos lados apunta al glpi_softwares equivocado, la cuenta cierra bonita y falsa.

Registra la licencia con el campo correcto

En Gestión > Licencias (o en la pestaña Licencias dentro del software), registra cada compra. El paso a paso que estandarizamos:

  1. Enlázala al software correcto - la licencia pertenece a un glpi_softwares específico. ¿Compraste Office, pero el inventario creó "Microsoft Office" y "Microsoft 365 Apps" como dos softwares? La licencia queda huérfana de la mitad de las instalaciones.
  2. Cantidad en number - el total de puestos contratados. Aquí está la primera trampa: number = -1 significa licencia ilimitada (freeware, licencia de sitio sin tope). Dejarlo en blanco o en 0 anula la base de comparación.
  3. Tipo de licencia - OEM, Volumen, Suscripción, etc. (desplegable glpi_softwarelicensetypes). No es adorno: define la regla de conformidad real.
  4. Validez (expire) - complétala para suscripción y Software Assurance; déjala vacía para perpetua.
  5. Afecta la licencia a las instalaciones - registrarla no basta. Hay que asignar la licencia a los elementos que la consumen (pestaña de elementos de la licencia) para que GLPI cuente el consumo. Muchos parques tienen la licencia registrada y ninguna asignación: el informe muestra todo disponible para algo ya excedido.

El error de campo que anula el excedente: nombre fragmentado

En el mantenimiento, la razón número 1 de "la conformidad muestra cero excedente, pero sé que estoy excedido" no es un fallo del informe: es fragmentación de nombre. El inventario de GLPI crea un glpi_softwares por cada nombre exacto reportado por el agente. Así "Google Chrome", "Google Chrome (64-bit)" y "Google Chrome" con un espacio de más se convierten en tres softwares distintos, cada uno con su propio recuento de instalaciones. Enlazas la licencia a uno de ellos y los otros dos quedan "sin licencia registrada" - o, peor, "conformes", porque cada uno tiene pocas instalaciones. La cuenta global nunca cuadra.

La corrección no está en el informe, está en la entrada: el Diccionario de Software (Administración > Reglas > Diccionario de software) normaliza el nombre antes de grabarlo en glpi_softwares. Una regla que reescribe "Google Chrome (64-bit)" como "Google Chrome" funde las instalaciones en un único software, y entonces la licencia cubre todo. El detalle que solo sabe quien opera: el diccionario reescribe únicamente en la próxima entrada de inventario, así que tras crear las reglas hay que reprocesar el inventario (o esperar al siguiente ciclo del agente) para que las instalaciones antiguas migren. Aplicar la regla y revisar el informe en el mismo minuto engaña: aún no ha cambiado nada.

La consulta que muestra el excedente real

Mientras el diccionario no está afinado, la pantalla de conformidad mezcla ruido. Ejecutamos directo en la base de datos la consulta que lista, por software, instalaciones contra licencias - excluyendo ya las ilimitadas (number = -1) de la suma:

-- Software con mas instalaciones que licencias (excedente de conformidad).
-- number = -1 significa licencia ilimitada: la excluimos de la suma.
SELECT s.name AS software,
       COALESCE(lic.licencias, 0)     AS licencias,
       COALESCE(inst.instalaciones, 0) AS instalaciones,
       COALESCE(inst.instalaciones, 0) - COALESCE(lic.licencias, 0) AS excedente
FROM glpi_softwares s
LEFT JOIN (
    SELECT softwares_id, SUM(number) AS licencias
    FROM glpi_softwarelicenses
    WHERE is_deleted = 0 AND number > 0
    GROUP BY softwares_id
) lic  ON lic.softwares_id = s.id
LEFT JOIN (
    SELECT sv.softwares_id, COUNT(*) AS instalaciones
    FROM glpi_items_softwareversions isv
    JOIN glpi_softwareversions sv ON sv.id = isv.softwareversions_id
    WHERE isv.is_deleted = 0
    GROUP BY sv.softwares_id
) inst ON inst.softwares_id = s.id
WHERE s.is_deleted = 0
  AND COALESCE(inst.instalaciones, 0) > COALESCE(lic.licencias, 0)
ORDER BY excedente DESC;

El resultado es la lista de compra: cada fila con excedente positivo es riesgo de multa en una auditoría. Cruza con el diccionario antes de salir a comprar - la mitad del "excedente" suele ser el mismo software contado con dos nombres.

Alertas de vencimiento que de verdad se disparan

Una licencia de suscripción vencida es dinero parado o servicio cortado. GLPI alerta, pero la alerta tiene tres interruptores que deben estar todos encendidos - y el error común es creer que rellenar el campo expire basta:

  • En la entidad (Administración > Entidades, pestaña de notificaciones): activar las alarmas sobre licencias y definir el plazo de antelación (campos internos use_licenses_alert y send_licenses_alert_before_delay).
  • En la notificación (Configurar > Notificaciones): la notificación de licencia de software debe estar activa, con destinatario y plantilla definidos.
  • En el cron: la acción automática que barre los vencimientos solo se ejecuta si el cron de GLPI se ejecuta. En producción eso significa un cron del sistema operativo, no el modo interno que depende del tráfico del usuario.

La configuración de cron externo que dejamos en cada cliente:

# Crontab del usuario de PHP (www-data/apache): dispara las acciones automaticas de GLPI,
# incluida la alerta de licencias por vencer. Sin este cron externo, la alerta solo corre
# "a cuestas" del trafico de los usuarios - y en una ventana sin acceso, nunca se dispara.
* * * * * www-data /usr/bin/php /var/www/glpi/front/cron.php &>/dev/null

Al margen de la alerta nativa, cada lunes enviamos un informe de vencimientos directo de la base de datos, para no depender solo de la notificación:

-- Licencias que vencen en los proximos 90 dias, de la mas urgente a la menos.
SELECT s.name  AS software,
       sl.name AS licencia,
       sl.number,
       sl.expire,
       DATEDIFF(sl.expire, CURDATE()) AS dias_para_vencer
FROM glpi_softwarelicenses sl
JOIN glpi_softwares s ON s.id = sl.softwares_id
WHERE sl.is_deleted = 0
  AND sl.expire IS NOT NULL
  AND sl.expire <= DATE_ADD(CURDATE(), INTERVAL 90 DAY)
ORDER BY sl.expire ASC;

Matriz de decisión por tipo de licencia

El tipo de licencia cambia cómo la modelas en GLPI y dónde está el riesgo. La matriz que usamos en el diseño:

Tipo de licenciaCómo modelarla en GLPICampo expireTrampa común
OEM (atada al hardware)number = 1 por equipo; tipo OEMVacío (perpetua)No migra de máquina - cambiar el PC genera desconformidad silenciosa
Volumen (VLK / MAK / KMS)1 registro, number = cantidad contratadaSegún el contratoContar activaciones reales, no el tope del contrato
Suscripción (SaaS, Microsoft 365)number = puestos; reconciliar por el informe del proveedorFin del cicloEl inventario no ve SaaS puro - el registro es manual
Perpetua + Software Assurancenumber = cantidad; expire = fin del SAFin del SAQue venza el SA no corta el uso, pero bloquea el derecho de actualización
Freeware / TrialFreeware: number = -1; Trial: number + expireSolo en el trialEl freeware que pasa a ser de pago en una nueva versión pasa desapercibido

La reconciliación es rutina, no proyecto

La conformidad de software no es una foto, es una película: el parque cambia cada semana. El ritmo que funciona en el mantenimiento es trimestral para la reconciliación completa (ejecutar la consulta de excedente, revisar el diccionario, comprobar las asignaciones) y mensual para los vencimientos. Prioriza a los fabricantes que auditan de verdad - Microsoft, Adobe, Oracle y Autodesk exigen, y la factura de una desconformidad que ellos descubran es órdenes de magnitud mayor que el coste de mantener la base limpia. El objetivo no es un informe bonito; es poder responder "¿cuántas licencias de X tengo y cuántas uso?" con un número en el que confías.

¿Quieres el parque de software bajo control, con la base de licencias reconciliada y las alertas disparándose de verdad? Conoce el mantenimiento de GLPI de NexTool.


Revisado por el equipo de NexTool Solutions.

Preguntas Frecuentes

Sí, si el inventario (GLPI Agent) está activo. Cada instalación detectada se convierte en una fila en glpi_items_softwareversions, enlazando el elemento a la versión del software. La conformidad compara ese recuento con la suma de licencias. Sin inventario tendrías que registrar las instalaciones a mano - inviable a escala.

Casi siempre es fragmentación del nombre del software. El inventario crea un glpi_softwares por nombre exacto, así que variantes como 'Google Chrome' y 'Google Chrome (64-bit)' se vuelven softwares distintos y la licencia cubre solo uno. Normaliza los nombres en el Diccionario de Software y reprocesa el inventario; solo entonces las instalaciones se funden y aparece el excedente.

Son tres interruptores. En la entidad, activa las alarmas de licencia y el plazo de antelación; en Notificaciones, la notificación de licencia debe estar activa con destinatario; y el cron de GLPI debe ejecutarse por el sistema operativo (front/cron.php en el crontab). Solo el campo expire relleno no dispara nada.

En el campo de cantidad (number), usa -1. GLPI trata -1 como ilimitado y nunca genera excedente por más instalaciones que aparezcan. Cuidado al sumar licencias en informes: incluye la condición number > 0 para que los -1 no distorsionen la cuenta.

Sí, pero el registro es manual. El inventario local no detecta puestos de SaaS puro, así que registras la licencia con el número de puestos y el fin del ciclo en expire, y reconcilias el consumo por el informe de asignación del propio proveedor. Trata el panel del proveedor como la fuente de verdad del uso real.

?Necesitas ayuda?