Un audit d'éditeur peut coûter cher, mais ce qui casse la gestion des licences dans GLPI est rarement le prix de la licence : c'est l'installation que le système compte sur le mauvais logiciel. Sur les parcs GLPI que nous maintenons pour des clients, le rapport de conformité existe presque toujours ; ce qui manque, c'est d'y faire confiance. Ce guide montre comment modéliser les licences, pourquoi le chiffre de dépassement sort faussé et comment affiner la réconciliation et les alertes pour qu'un audit ne soit jamais une surprise.
Le modèle de données qui soutient tout
Avant tout rapport, comprenez comment GLPI relie les pièces. Quatre tables natives comptent :
- glpi_softwares - le logiciel lui-même (une ligne par nom).
- glpi_softwareversions - les versions de chaque logiciel.
- glpi_softwarelicenses - les licences achetées, avec quantité (champ number), type, échéance (expire) et fournisseur.
- glpi_items_softwareversions - chaque installation détectée, reliant un élément (ordinateur, VM) à une version.
La conformité naît du croisement entre la somme de number dans glpi_softwarelicenses et le nombre de lignes dans glpi_items_softwareversions, groupés par logiciel. Si l'un des deux côtés pointe vers le mauvais glpi_softwares, le calcul se boucle propre et faux.
Enregistrez la licence avec le bon champ
Dans Gestion > Licences (ou l'onglet Licences dans le logiciel), enregistrez chaque achat. Les étapes que nous standardisons :
- Reliez-la au bon logiciel - une licence appartient à un glpi_softwares précis. Vous avez acheté Office, mais l'inventaire a créé "Microsoft Office" et "Microsoft 365 Apps" comme deux logiciels ? La licence est orpheline de la moitié des installations.
- Quantité dans number - le total de postes achetés. Voici le premier piège : number = -1 signifie licence illimitée (freeware, licence de site sans plafond). La laisser vide ou à 0 annule la base de comparaison.
- Type de licence - OEM, Volume, Abonnement, etc. (liste déroulante glpi_softwarelicensetypes). Ce n'est pas décoratif : cela définit la règle de conformité réelle.
- Échéance (expire) - remplissez-la pour l'abonnement et la Software Assurance ; laissez-la vide pour une licence perpétuelle.
- Affectez la licence aux installations - l'enregistrer ne suffit pas. Il faut allouer la licence aux éléments qui la consomment (onglet des éléments de la licence) pour que GLPI compte la consommation. Beaucoup de parcs ont une licence enregistrée et aucune affectation : le rapport montre tout disponible pour quelque chose déjà en dépassement.
L'erreur de champ qui annule le dépassement : nom fragmenté
En maintenance, la raison numéro 1 de "la conformité affiche zéro dépassement, mais je sais que je dépasse" n'est pas un bug du rapport : c'est la fragmentation du nom. L'inventaire GLPI crée un glpi_softwares par nom exact remonté par l'agent. Ainsi "Google Chrome", "Google Chrome (64-bit)" et "Google Chrome" avec un espace en trop deviennent trois logiciels distincts, chacun avec son propre décompte d'installations. Vous rattachez la licence à l'un d'eux et les deux autres restent "sans licence enregistrée" - ou, pire, "conformes", parce que chacun a peu d'installations. Le calcul global ne tombe jamais juste.
La correction n'est pas dans le rapport, elle est à l'entrée : le Dictionnaire de logiciels (Administration > Règles > Dictionnaire de logiciels) normalise le nom avant l'écriture dans glpi_softwares. Une règle qui réécrit "Google Chrome (64-bit)" en "Google Chrome" fusionne les installations en un seul logiciel, et la licence couvre alors tout. Le détail que seuls les opérateurs connaissent : le dictionnaire ne réécrit qu'à la prochaine entrée d'inventaire, donc après avoir créé les règles il faut retraiter l'inventaire (ou attendre le prochain cycle de l'agent) pour que les anciennes installations migrent. Appliquer la règle et vérifier le rapport dans la même minute est trompeur : rien n'a encore changé.
La requête qui montre le vrai dépassement
Tant que le dictionnaire n'est pas affiné, l'écran de conformité mélange du bruit. Nous exécutons directement en base la requête qui liste, par logiciel, les installations face aux licences - en excluant déjà les illimitées (number = -1) de la somme :
-- Logiciels avec plus d'installations que de licences (depassement de conformite).
-- number = -1 signifie licence illimitee : on l'exclut de la somme.
SELECT s.name AS logiciel,
COALESCE(lic.licences, 0) AS licences,
COALESCE(inst.installations, 0) AS installations,
COALESCE(inst.installations, 0) - COALESCE(lic.licences, 0) AS depassement
FROM glpi_softwares s
LEFT JOIN (
SELECT softwares_id, SUM(number) AS licences
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 installations
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.installations, 0) > COALESCE(lic.licences, 0)
ORDER BY depassement DESC;
Le résultat est la liste d'achat : chaque ligne au dépassement positif est un risque d'amende en audit. Recoupez avec le dictionnaire avant d'acheter - la moitié du "dépassement" est souvent le même logiciel compté sous deux noms.
Des alertes d'échéance qui se déclenchent vraiment
Une licence d'abonnement expirée, c'est de l'argent gelé ou un service coupé. GLPI alerte, mais l'alerte a trois interrupteurs qui doivent tous être activés - et l'erreur courante est de croire que remplir le champ expire suffit :
- Sur l'entité (Administration > Entités, onglet notifications) : activer les alarmes sur les licences et définir le délai d'anticipation (champs internes use_licenses_alert et send_licenses_alert_before_delay).
- Sur la notification (Configuration > Notifications) : la notification de licence logicielle doit être active, avec un destinataire et un modèle définis.
- Sur le cron : l'action automatique qui balaie les échéances ne s'exécute que si le cron de GLPI s'exécute. En production, cela veut dire un cron du système d'exploitation, pas le mode interne qui dépend du trafic utilisateur.
La configuration de cron externe que nous laissons chez chaque client :
# Crontab de l'utilisateur PHP (www-data/apache) : declenche les actions automatiques de GLPI,
# dont l'alerte de licences a echeance. Sans ce cron externe, l'alerte ne tourne
# qu'en "profitant" du trafic des utilisateurs - et dans une fenetre sans acces, elle ne part jamais.
* * * * * www-data /usr/bin/php /var/www/glpi/front/cron.php &>/dev/null
Indépendamment de l'alerte native, chaque lundi nous envoyons un rapport d'échéances directement depuis la base, pour ne pas dépendre de la seule notification :
-- Licences arrivant a echeance dans les 90 prochains jours, de la plus urgente a la moins.
SELECT s.name AS logiciel,
sl.name AS licence,
sl.number,
sl.expire,
DATEDIFF(sl.expire, CURDATE()) AS jours_avant_expiration
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 de décision par type de licence
Le type de licence change la manière de la modéliser dans GLPI et l'endroit où se trouve le risque. La matrice que nous utilisons à la conception :
| Type de licence | Comment la modéliser dans GLPI | Champ expire | Piège courant |
|---|---|---|---|
| OEM (liée au matériel) | number = 1 par équipement ; type OEM | Vide (perpétuelle) | Ne migre pas d'une machine à l'autre - changer le PC crée une non-conformité silencieuse |
| Volume (VLK / MAK / KMS) | 1 enregistrement, number = quantité contractée | Selon le contrat | Compter les activations réelles, pas le plafond du contrat |
| Abonnement (SaaS, Microsoft 365) | number = postes ; réconcilier via le rapport de l'éditeur | Fin du cycle | L'inventaire ne voit pas le SaaS pur - l'enregistrement est manuel |
| Perpétuelle + Software Assurance | number = quantité ; expire = fin de la SA | Fin de la SA | La SA expirée ne coupe pas l'usage, mais bloque le droit de mise à niveau |
| Freeware / Essai | Freeware : number = -1 ; Essai : number + expire | Essai seulement | Le freeware qui devient payant dans une nouvelle version passe inaperçu |
La réconciliation est une routine, pas un projet
La conformité logicielle n'est pas une photo, c'est un film : le parc change chaque semaine. Le rythme qui marche en maintenance est trimestriel pour la réconciliation complète (exécuter la requête de dépassement, revoir le dictionnaire, vérifier les affectations) et mensuel pour les échéances. Priorisez les éditeurs qui auditent vraiment - Microsoft, Adobe, Oracle et Autodesk font appliquer, et la facture d'une non-conformité qu'ils découvrent est d'un ordre de grandeur supérieur au coût de garder la base propre. L'objectif n'est pas un beau rapport ; c'est pouvoir répondre "combien de licences de X ai-je et combien en utilise-je ?" avec un chiffre auquel vous faites confiance.
Vous voulez un parc logiciel maîtrisé, avec une base de licences réconciliée et des alertes qui partent vraiment ? Découvrez la maintenance GLPI de NexTool.
Révisé par l'équipe NexTool Solutions.