Gestione delle licenze software in GLPI

Guida tecnica alla gestione delle licenze software in GLPI: il modello di dati (glpi_softwarelicenses), la frammentazione del nome che azzera l'eccedenza di conformità, la correzione tramite il Dizionario del software, la query di eccedenza reale, i tre interruttori dell'avviso di scadenza e una matrice decisionale per tipo di licenza - con l'esperienza sul campo di chi riconcilia parchi.

In questo articolo7 sezioni

Un audit del produttore può costare caro, ma ciò che rompe la gestione delle licenze in GLPI raramente è il prezzo della licenza: è l'installazione che il sistema conta sul software sbagliato. Sui parchi GLPI che manteniamo per i clienti, il report di conformità quasi sempre esiste; ciò che manca è fidarsene. Questa guida mostra come modellare le licenze, perché il numero di eccedenza esce sbagliato e come affinare la riconciliazione e gli avvisi affinché un audit non sia una sorpresa.

Il modello di dati che sostiene tutto

Prima di qualsiasi report, capisca come GLPI collega i pezzi. Quattro tabelle native contano:

  • glpi_softwares - il software in sé (una riga per nome).
  • glpi_softwareversions - le versioni di ogni software.
  • glpi_softwarelicenses - le licenze acquistate, con quantità (campo number), tipo, scadenza (expire) e fornitore.
  • glpi_items_softwareversions - ogni installazione rilevata, che collega un elemento (computer, VM) a una versione.

La conformità nasce dall'incrocio tra la somma di number in glpi_softwarelicenses e il conteggio di righe in glpi_items_softwareversions, raggruppati per software. Se uno dei due lati punta al glpi_softwares sbagliato, il conto torna bello e falso.

Registri la licenza con il campo giusto

In Gestione > Licenze (o nella scheda Licenze dentro il software), registri ogni acquisto. I passi che standardizziamo:

  1. La colleghi al software corretto - una licenza appartiene a un glpi_softwares specifico. Ha comprato Office, ma l'inventario ha creato "Microsoft Office" e "Microsoft 365 Apps" come due software? La licenza resta orfana di metà delle installazioni.
  2. Quantità in number - il totale di postazioni acquistate. Qui sta la prima trappola: number = -1 significa licenza illimitata (freeware, licenza di sito senza tetto). Lasciarlo vuoto o a 0 azzera la base di confronto.
  3. Tipo di licenza - OEM, Volume, Abbonamento, ecc. (menu a tendina glpi_softwarelicensetypes). Non è un ornamento: definisce la regola di conformità reale.
  4. Scadenza (expire) - la compili per abbonamento e Software Assurance; la lasci vuota per la perpetua.
  5. Assegni la licenza alle installazioni - registrarla non basta. Bisogna allocare la licenza agli elementi che la consumano (scheda degli elementi della licenza) affinché GLPI conti il consumo. Molti parchi hanno la licenza registrata e nessuna assegnazione: il report mostra tutto disponibile per qualcosa già in eccedenza.

L'errore di campo che azzera l'eccedenza: nome frammentato

In manutenzione, il motivo numero 1 di "la conformità mostra zero eccedenza, ma so di essere oltre" non è un bug del report: è la frammentazione del nome. L'inventario GLPI crea un glpi_softwares per ogni nome esatto riportato dall'agente. Così "Google Chrome", "Google Chrome (64-bit)" e "Google Chrome" con uno spazio in più diventano tre software distinti, ciascuno con il proprio conteggio di installazioni. Collega la licenza a uno di essi e gli altri due restano "senza licenza registrata" - o, peggio, "conformi", perché ognuno ha poche installazioni. Il conto globale non torna mai.

La correzione non è nel report, è all'ingresso: il Dizionario del software (Amministrazione > Regole > Dizionario del software) normalizza il nome prima di scriverlo in glpi_softwares. Una regola che riscrive "Google Chrome (64-bit)" in "Google Chrome" fonde le installazioni in un unico software, e allora la licenza copre tutto. Il dettaglio che solo chi opera conosce: il dizionario riscrive solo alla prossima entrata di inventario, quindi dopo aver creato le regole bisogna rielaborare l'inventario (o attendere il ciclo successivo dell'agente) perché le vecchie installazioni migrino. Applicare la regola e controllare il report nello stesso minuto inganna: non è ancora cambiato nulla.

La query che mostra l'eccedenza reale

Finché il dizionario non è affinato, la schermata di conformità mescola rumore. Eseguiamo direttamente sul database la query che elenca, per software, installazioni contro licenze - escludendo già le illimitate (number = -1) dalla somma:

-- Software con piu installazioni che licenze (eccedenza di conformita).
-- number = -1 significa licenza illimitata: la escludiamo dalla somma.
SELECT s.name AS software,
       COALESCE(lic.licenze, 0)       AS licenze,
       COALESCE(inst.installazioni, 0) AS installazioni,
       COALESCE(inst.installazioni, 0) - COALESCE(lic.licenze, 0) AS eccedenza
FROM glpi_softwares s
LEFT JOIN (
    SELECT softwares_id, SUM(number) AS licenze
    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 installazioni
    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.installazioni, 0) > COALESCE(lic.licenze, 0)
ORDER BY eccedenza DESC;

Il risultato è la lista d'acquisto: ogni riga con eccedenza positiva è rischio di multa in un audit. Incroci con il dizionario prima di comprare - metà dell'"eccedenza" è di solito lo stesso software contato con due nomi.

Avvisi di scadenza che scattano davvero

Una licenza di abbonamento scaduta è denaro fermo o servizio interrotto. GLPI avvisa, ma l'avviso ha tre interruttori che devono essere tutti accesi - e l'errore comune è credere che compilare il campo expire basti:

  • Sull'entità (Amministrazione > Entità, scheda notifiche): attivare gli allarmi sulle licenze e definire il preavviso (campi interni use_licenses_alert e send_licenses_alert_before_delay).
  • Sulla notifica (Configurazione > Notifiche): la notifica di licenza software deve essere attiva, con destinatario e modello definiti.
  • Sul cron: l'azione automatica che scansiona le scadenze parte solo se il cron di GLPI parte. In produzione questo significa un cron del sistema operativo, non la modalità interna che dipende dal traffico degli utenti.

La configurazione di cron esterno che lasciamo a ogni cliente:

# Crontab dell'utente PHP (www-data/apache): innesca le azioni automatiche di GLPI,
# incluso l'avviso di licenze in scadenza. Senza questo cron esterno, l'avviso gira solo
# "a rimorchio" del traffico degli utenti - e in una finestra senza accessi, non parte mai.
* * * * * www-data /usr/bin/php /var/www/glpi/front/cron.php &>/dev/null

A prescindere dall'avviso nativo, ogni lunedì inviamo un report di scadenze direttamente dal database, per non dipendere solo dalla notifica:

-- Licenze in scadenza nei prossimi 90 giorni, dalla piu urgente alla meno.
SELECT s.name  AS software,
       sl.name AS licenza,
       sl.number,
       sl.expire,
       DATEDIFF(sl.expire, CURDATE()) AS giorni_alla_scadenza
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;

Matrice decisionale per tipo di licenza

Il tipo di licenza cambia come la modella in GLPI e dove sta il rischio. La matrice che usiamo in fase di progettazione:

Tipo di licenzaCome modellarla in GLPICampo expireTrappola comune
OEM (legata all'hardware)number = 1 per dispositivo; tipo OEMVuoto (perpetua)Non migra tra macchine - cambiare il PC genera non conformità silenziosa
Volume (VLK / MAK / KMS)1 record, number = quantità contrattataSecondo il contrattoContare le attivazioni reali, non il tetto del contratto
Abbonamento (SaaS, Microsoft 365)number = postazioni; riconciliare col report del fornitoreFine del cicloL'inventario non vede il SaaS puro - la registrazione è manuale
Perpetua + Software Assurancenumber = quantità; expire = fine della SAFine della SALa SA scaduta non taglia l'uso, ma blocca il diritto di aggiornamento
Freeware / TrialFreeware: number = -1; Trial: number + expireSolo nel trialIl freeware che diventa a pagamento in una nuova versione passa inosservato

La riconciliazione è routine, non progetto

La conformità software non è una foto, è un film: il parco cambia ogni settimana. Il ritmo che funziona in manutenzione è trimestrale per la riconciliazione completa (eseguire la query di eccedenza, rivedere il dizionario, controllare le assegnazioni) e mensile per le scadenze. Dia priorità ai produttori che fanno davvero audit - Microsoft, Adobe, Oracle e Autodesk fanno valere i diritti, e il conto di una non conformità che scoprono loro è di ordini di grandezza superiore al costo di mantenere pulita la base. L'obiettivo non è un bel report; è poter rispondere "quante licenze di X ho e quante ne uso?" con un numero di cui si fida.

Vuole il parco software sotto controllo, con la base di licenze riconciliata e gli avvisi che scattano davvero? Scopra la manutenzione GLPI di NexTool.


Revisionato dal team NexTool Solutions.

Domande Frequenti

Sì, se l'inventario (GLPI Agent) è attivo. Ogni installazione rilevata diventa una riga in glpi_items_softwareversions, collegando l'elemento alla versione del software. La conformità confronta quel conteggio con la somma delle licenze. Senza inventario dovrebbe inserire le installazioni a mano - impraticabile su larga scala.

Quasi sempre è frammentazione del nome del software. L'inventario crea un glpi_softwares per nome esatto, quindi varianti come 'Google Chrome' e 'Google Chrome (64-bit)' diventano software diversi e la licenza ne copre solo uno. Normalizzi i nomi nel Dizionario del software e rielabori l'inventario; solo allora le installazioni si fondono e l'eccedenza compare.

Sono tre interruttori. Sull'entità, attivi gli allarmi di licenza e il preavviso; nelle Notifiche, la notifica di licenza deve essere attiva con destinatario; e il cron di GLPI deve girare via sistema operativo (front/cron.php nel crontab). Il solo campo expire compilato non innesca nulla.

Nel campo quantità (number), usi -1. GLPI tratta -1 come illimitato e non genera mai eccedenza per quante installazioni compaiano. Attenzione a sommare le licenze nei report: includa la condizione number > 0 perché i -1 non distorcano il conto.

Sì, ma la registrazione è manuale. L'inventario locale non rileva le postazioni SaaS pure, quindi registra la licenza con il numero di postazioni e la fine del ciclo in expire, e riconcilia il consumo dal report di assegnazione del fornitore stesso. Tratti il pannello del fornitore come la fonte di verità dell'uso reale.

Hai bisogno di aiuto?