Uma auditoria de fabricante pode custar caro, mas o que quebra a gestão de licenças no GLPI raramente é o preço da licença - é a instalação que o sistema conta no software errado. Na sustentação de parques GLPI de clientes, o relatório de conformidade quase sempre existe; o que falta é confiar nele. Este guia mostra como modelar licenças, por que o número de excedente vem torto e como afinar a reconciliação e os alertas para que a auditoria não seja surpresa.
O modelo de dados que sustenta tudo
Antes de qualquer relatório, entenda como o GLPI liga as peças. São quatro tabelas nativas que importam:
- glpi_softwares - o software em si (um registro por nome).
- glpi_softwareversions - as versões de cada software.
- glpi_softwarelicenses - as licenças adquiridas, com quantidade (campo number), tipo, validade (expire) e fornecedor.
- glpi_items_softwareversions - cada instalação detectada, ligando um item (computador, VM) a uma versão.
O compliance nasce do cruzamento entre a soma de number em glpi_softwarelicenses e a contagem de linhas em glpi_items_softwareversions, agrupados pelo software. Se qualquer um dos dois lados aponta para o glpi_softwares errado, a conta fecha bonita e falsa.
Registre a licença com o campo certo
No menu Gestão > Licenças (ou pela aba Licenças dentro do software), cadastre cada compra. O passo a passo que padronizamos:
- Vincule ao software correto - a licença pertence a um glpi_softwares específico. Comprou Office, mas o inventário criou "Microsoft Office" e "Microsoft 365 Apps" como dois softwares? A licença fica órfã de metade das instalações.
- Quantidade em number - o total de assentos contratados. Aqui mora a primeira armadilha: number = -1 significa licença ilimitada (freeware, licença de site sem limite). Deixar em branco ou 0 zera a base de comparação.
- Tipo de licença - OEM, Volume, Subscription, etc. (dropdown glpi_softwarelicensetypes). Não é enfeite: define a regra de conformidade real.
- Validade (expire) - preencha para subscription e Software Assurance; deixe vazio para perpétua.
- Afete a licença às instalações - registrar não basta. É preciso alocar a licença aos itens que a consomem (aba de itens da licença) para o GLPI contar consumo. Muita base tem licença cadastrada e nenhuma afetação: o relatório mostra tudo disponível para algo já estourado.
O erro de campo que zera o excedente: nome fragmentado
Na sustentação, o motivo número 1 de "o compliance mostra zero excedente, mas eu sei que estou estourado" não é bug de relatório - é fragmentação de nome. O inventário do GLPI cria um glpi_softwares por nome exato reportado pelo agente. Então "Google Chrome", "Google Chrome (64-bit)" e "Google Chrome" com um espaço a mais viram três softwares distintos, cada um com sua própria contagem de instalações. Você amarra a licença a um deles e os outros dois ficam "sem licença registrada" - ou, pior, "conformes", porque têm poucas instalações cada. A conta global nunca fecha.
A correção não é no relatório, é na entrada: o Dicionário de Software (Administração > Regras > Dicionário de software) normaliza o nome antes de gravar em glpi_softwares. Uma regra que reescreve "Google Chrome (64-bit)" para "Google Chrome" funde as instalações num único software, e aí a licença passa a cobrir tudo. O detalhe que só quem opera sabe: o dicionário reescreve apenas na próxima entrada de inventário, então depois de criar as regras é preciso reprocessar o inventário (ou aguardar o próximo ciclo do agente) para as instalações antigas migrarem. Aplicar a regra e conferir o relatório no mesmo minuto engana: nada mudou ainda.
A query que mostra o excedente real
Enquanto o dicionário não está afinado, a tela de compliance mistura ruído. Rodamos direto no banco a consulta que lista, por software, instalações contra licenças - já excluindo as ilimitadas (number = -1) do somatório:
-- Softwares com mais instalacoes do que licencas (excedente de compliance).
-- number = -1 significa licenca ilimitada: excluimos do somatorio.
SELECT s.name AS software,
COALESCE(lic.licencas, 0) AS licencas,
COALESCE(inst.instalacoes, 0) AS instalacoes,
COALESCE(inst.instalacoes, 0) - COALESCE(lic.licencas, 0) AS excedente
FROM glpi_softwares s
LEFT JOIN (
SELECT softwares_id, SUM(number) AS licencas
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 instalacoes
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.instalacoes, 0) > COALESCE(lic.licencas, 0)
ORDER BY excedente DESC;
O resultado é a lista de compra: cada linha com excedente positivo é risco de multa em auditoria. Cruze com o dicionário antes de sair comprando - metade do "excedente" costuma ser o mesmo software contado com dois nomes.
Alertas de vencimento que realmente disparam
Licença de subscription vencida é dinheiro parado ou serviço cortado. O GLPI alerta, mas o alerta tem três interruptores que precisam estar todos ligados - e o erro comum é achar que preencher o campo expire basta:
- Na entidade (Administração > Entidades, aba de notificações): ligar os alarmes sobre licenças e definir o prazo de antecedência (campos internos use_licenses_alert e send_licenses_alert_before_delay).
- Na notificação (Configurar > Notificações): a notificação de licença de software precisa estar ativa, com destinatário e template definidos.
- No cron: a ação automática que varre os vencimentos só roda se o cron do GLPI rodar. Em produção isso significa um cron do sistema operacional, não o modo interno que depende do tráfego do usuário.
A configuração de cron externo que deixamos em todo cliente:
# Crontab do usuario do PHP (www-data/apache): dispara as acoes automaticas do GLPI,
# incluindo o alerta de licencas a vencer. Sem este cron externo, o alerta so roda
# "de carona" no trafego dos usuarios - e numa janela sem acesso, nunca dispara.
* * * * * www-data /usr/bin/php /var/www/glpi/front/cron.php &>/dev/null
Independente do alerta nativo, mandamos toda segunda-feira um relatório de vencimentos direto do banco, para não depender só da notificação:
-- Licencas que vencem nos proximos 90 dias, das mais urgentes para as menos.
SELECT s.name AS software,
sl.name AS licenca,
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 decisão por tipo de licença
O tipo de licença muda como você modela no GLPI e onde está o risco. A matriz que usamos no desenho:
| Tipo de licença | Como modelar no GLPI | Campo expire | Armadilha comum |
|---|---|---|---|
| OEM (atrelada ao hardware) | number = 1 por equipamento; tipo OEM | Vazio (perpétua) | Não migra de máquina - trocar o PC gera desconformidade silenciosa |
| Volume (VLK / MAK / KMS) | 1 registro, number = quantidade contratada | Conforme o contrato | Contar ativações reais, não o teto do contrato |
| Subscription (SaaS, Microsoft 365) | number = assentos; reconciliar pelo relatório do fornecedor | Fim do ciclo | Inventário não enxerga SaaS puro - o registro é manual |
| Perpétua + Software Assurance | number = quantidade; expire = fim do SA | Fim do SA | Vencer o SA não corta o uso, mas trava o direito de upgrade |
| Freeware / Trial | Freeware: number = -1; Trial: number + expire | Só no trial | Freeware que vira pago numa nova versão passa despercebido |
Reconciliação é rotina, não projeto
Compliance de software não é foto, é filme: o parque muda toda semana. O ritmo que funciona na sustentação é trimestral para a reconciliação completa (rodar a query de excedente, revisar o dicionário, conferir as afetações) e mensal para os vencimentos. Priorize os fabricantes que auditam de verdade - Microsoft, Adobe, Oracle e Autodesk cobram, e a conta de uma desconformidade descoberta por eles é ordens de grandeza maior que o custo de manter a base limpa. O objetivo não é um relatório bonito; é conseguir responder "quantas licenças de X eu tenho e quantas uso?" com um número em que você confia.
Quer o parque de software sob controle, com a base de licenças reconciliada e os alertas de fato disparando? Conheça a sustentação de GLPI da NexTool.
Revisado pela equipe NexTool Solutions.