Gestão de Licenças de Software no GLPI

Guia técnico de gestão de licenças de software no GLPI: o modelo de dados (glpi_softwarelicenses), a fragmentação de nome que anula o excedente de conformidade, a correção pelo Dicionário de Software, a consulta de excedente real, os três interruptores do alerta de vencimento e a matriz de decisão por tipo de licença - com a experiência de quem reconcilia parques na sustentação.

Neste artigo7 secções

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, porque 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, perceba como o GLPI liga as peças. São quatro tabelas nativas que importam:

  • glpi_softwares - o software em si (um registo 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 detetada, ligando um item (computador, VM) a uma versão.

A conformidade 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.

Registe a licença com o campo certo

No menu Gestão > Licenças (ou pelo separador Licenças dentro do software), registe cada compra. O passo a passo que padronizámos:

  1. Ligue 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.
  2. Quantidade em number - o total de lugares contratados. Aqui mora a primeira armadilha: number = -1 significa licença ilimitada (freeware, licença de sítio sem limite). Deixar em branco ou 0 anula a base de comparação.
  3. Tipo de licença - OEM, Volume, Subscrição, etc. (lista pendente glpi_softwarelicensetypes). Não é enfeite: define a regra de conformidade real.
  4. Validade (expire) - preencha para subscrição e Software Assurance; deixe vazio para perpétua.
  5. Afete a licença às instalações - registar não basta. É preciso alocar a licença aos itens que a consomem (separador de itens da licença) para o GLPI contar consumo. Muitos parques têm licença registada e nenhuma afetação: o relatório mostra tudo disponível para algo já excedido.

O erro de campo que anula o excedente: nome fragmentado

Na sustentação, o motivo número 1 de "a conformidade mostra zero excedente, mas sei que estou excedido" não é bug do relatório - é fragmentação de nome. O inventário do GLPI cria um glpi_softwares por nome exato reportado pelo agente. Assim "Google Chrome", "Google Chrome (64-bit)" e "Google Chrome" com um espaço a mais tornam-se três softwares distintos, cada um com a sua própria contagem de instalações. Liga a licença a um deles e os outros dois ficam "sem licença registada" - ou, pior, "conformes", porque cada um tem poucas instalações. 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 o 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, por isso, 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 verificar o relatório no mesmo minuto engana: ainda não mudou nada.

A consulta que mostra o excedente real

Enquanto o dicionário não está afinado, o ecrã de conformidade mistura ruído. Corremos diretamente na base de dados a consulta que lista, por software, instalações contra licenças - já excluindo as ilimitadas (number = -1) do somatório:

-- Software com mais instalacoes do que licencas (excedente de conformidade).
-- 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 coima em auditoria. Cruze com o dicionário antes de sair a comprar - metade do "excedente" costuma ser o mesmo software contado com dois nomes.

Alertas de vencimento que disparam mesmo

Licença de subscrição vencida é dinheiro parado ou serviço cortado. O GLPI alerta, mas o alerta tem três interruptores que precisam de estar todos ligados - e o erro comum é achar que preencher o campo expire basta:

  • Na entidade (Administração > Entidades, separador 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 de estar ativa, com destinatário e modelo definidos.
  • No cron: a ação automática que varre os vencimentos só corre se o cron do GLPI correr. Em produção isso significa um cron do sistema operativo, não o modo interno que depende do tráfego do utilizador.

A configuração de cron externo que deixamos em cada cliente:

# Crontab do utilizador 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 corre
# "a boleia" do trafego dos utilizadores - e numa janela sem acesso, nunca dispara.
* * * * * www-data /usr/bin/php /var/www/glpi/front/cron.php &>/dev/null

Independentemente do alerta nativo, enviamos toda a segunda-feira um relatório de vencimentos diretamente da base de dados, 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_expirar
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 a modela no GLPI e onde está o risco. A matriz que usamos no desenho:

Tipo de licençaComo modelar no GLPICampo expireArmadilha comum
OEM (presa ao hardware)number = 1 por equipamento; tipo OEMVazio (perpétua)Não migra de máquina - trocar o PC gera desconformidade silenciosa
Volume (VLK / MAK / KMS)1 registo, number = quantidade contratadaConforme o contratoContar ativações reais, não o teto do contrato
Subscrição (SaaS, Microsoft 365)number = lugares; reconciliar pelo relatório do fornecedorFim do cicloO inventário não vê SaaS puro - o registo é manual
Perpétua + Software Assurancenumber = quantidade; expire = fim da SAFim da SAVencer a SA não corta o uso, mas trava o direito de atualização
Freeware / TrialFreeware: number = -1; Trial: number + expireSó no trialFreeware que passa a pago numa nova versão passa despercebido

A reconciliação é rotina, não projeto

A conformidade de software não é uma fotografia, é um filme: o parque muda toda a semana. O ritmo que funciona na sustentação é trimestral para a reconciliação completa (correr a consulta de excedente, rever o dicionário, conferir as afetações) e mensal para os vencimentos. Dê prioridade aos fabricantes que auditam a sério - Microsoft, Adobe, Oracle e Autodesk cobram, e a conta de uma desconformidade que eles descubram é 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 tenho e quantas uso?" com um número em que confia.

Quer o parque de software sob controlo, com a base de licenças reconciliada e os alertas a disparar mesmo? Conheça a sustentação de GLPI da NexTool.


Revisto pela equipa NexTool Solutions.

Perguntas Frequentes

Sim, se o inventário (GLPI Agent) estiver ativo. Cada instalação detetada torna-se uma linha em glpi_items_softwareversions, ligando o item à versão do software. A conformidade compara essa contagem com a soma das licenças. Sem inventário, teria de lançar as instalações à mão - inviável em escala.

Quase sempre é fragmentação de nome de software. O inventário cria um glpi_softwares por nome exato, por isso variações como 'Google Chrome' e 'Google Chrome (64-bit)' tornam-se softwares diferentes e a licença cobre só um. Normalize os nomes no Dicionário de Software e reprocesse o inventário; só então as instalações se fundem e o excedente aparece.

São três interruptores. Na entidade, ligue os alarmes de licença e o prazo de antecedência; nas Notificações, a notificação de licença tem de estar ativa com destinatário; e o cron do GLPI tem de correr via sistema operativo (front/cron.php no crontab). Só o campo expire preenchido não dispara nada.

No campo de quantidade (number), use -1. O GLPI trata -1 como ilimitado e não gera excedente por mais instalações que apareçam. Cuidado ao somar licenças em relatórios: inclua a condição number > 0 para os -1 não distorcerem a conta.

Controla, mas o registo é manual. O inventário local não deteta lugares de SaaS puro, por isso regista a licença com o número de lugares e o fim do ciclo em expire, e reconcilia o consumo pelo relatório de atribuição do próprio fornecedor. Trate o painel do fornecedor como a fonte de verdade do uso real.

Precisa de ajuda?