Dicionários no GLPI: como padronizar o inventário automático

Guia técnico dos dicionários do GLPI 10/11: SQL para mapear a confusão do inventário, regras de fabricante e regex para modelos, rejeição de KB do Windows, um replay controlado que não deita o servidor abaixo e uma matriz de decisão sobre que ação usar. Como fazemos na manutenção de parques GLPI de clientes.

Neste artigo8 secções

Inventário automático sem dicionário é uma CMDB em que ninguém confia. Cada agente reporta "Dell Inc.", "DELL" e "Dell Technologies" como fabricantes diferentes, e o gestor abre o relatório de parque com três linhas para a mesma coisa. Os dicionários do GLPI resolvem isto na entrada dos dados, mas só funcionam mesmo quando mapeia a confusão primeiro, percebe que rejeitar é destrutivo e executa o replay sem deitar o servidor abaixo. Este guia é o caminho que usamos na manutenção de parques GLPI de clientes.

Porque é que o inventário chega sujo

Quando o GLPI Agent recolhe dados de centenas de máquinas, o mesmo objeto real aparece com várias grafias porque cada fornecedor grava a cadeia à sua maneira na BIOS, no registo do Windows ou no pacote. Os casos clássicos:

  • Fabricantes: "Dell Inc.", "Dell", "DELL", "Dell Technologies" tornam-se quatro registos.
  • Modelos: "Latitude 5520", "LATITUDE 5520" e "Dell Latitude 5520" não se agrupam.
  • Software: centenas de KB e entradas "Update for Windows" afogam o software que precisa mesmo de gerir.
  • Sistema operativo: "Windows 10 Pro", "Microsoft Windows 10 Professional" e "Win10Pro" fragmentam qualquer contagem de licenças.

O efeito prático: painéis com totais inflacionados, um relatório de conformidade de software inútil e decisões de compra baseadas no número errado. Padronizar não é estética: é o que torna a CMDB fiável.

Mapeie a confusão antes de escrever a primeira regra

O erro de quem começa é pôr-se a criar regras às cegas. Meça primeiro. Uma consulta SQL de leitura direta na base de dados mostra a dimensão do problema e prioriza o esforço. Execute numa réplica ou fora do horário de pico:

-- Fabricantes com grafias divergentes do mesmo grupo
SELECT id, name
FROM glpi_manufacturers
WHERE name LIKE 'Dell%' OR name LIKE '%DELL%'
ORDER BY name;

-- Volume de "poluicao" no catalogo de software (KB e updates)
SELECT COUNT(*) AS software_lixo
FROM glpi_softwares
WHERE name LIKE 'KB%'
   OR name LIKE 'Update for%'
   OR name LIKE 'Security Update for%';

-- Top 20 nomes de software mais repetidos (candidatos a regra)
SELECT name, COUNT(*) AS ocorrencias
FROM glpi_softwares
GROUP BY name
ORDER BY ocorrencias DESC
LIMIT 20;

Com estes números sabe onde a regra tem mais retorno. Na maioria dos parques, fabricante e software concentram a maior parte da confusão.

Os tipos de dicionário e quando usar cada ação

Em Administração > Dicionários encontra dicionários para software, fabricante, modelos (computador, monitor, impressora, telefone, rede), tipos e sistema operativo. O que muda entre eles é a ação que escolhe. Esta matriz resume a decisão:

Situação no inventárioDicionárioAção recomendadaReversível?Armadilha
Fabricante com várias grafiasFabricanteAtribuir um nome fixoSimO merge pode deixar uma entrada órfã na lista pendente
Modelo que arrasta o prefixo do fabricanteModelosRegex + atribuir o grupo capturadoSimExige o critério "expressão regular", não "contém"
KB e updates a poluir o catálogoSoftwareIgnorar importaçãoParcialO replay APAGA o software já importado
Versões de SO fragmentadasSistema operativoAtribuir SO / ediçãoSimNome do SO e edição são campos separados
Vários software que são o mesmo produtoSoftwareAtribuir nome + fabricanteSimAgrupa versões; confirme antes de fundir

Normalizar fabricantes e modelos (passo a passo)

  1. No dicionário de Fabricante, crie a regra: critério Nome - contém - Dell; ação Atribuir Nome = Dell. Isto colapsa todas as grafias num só registo.
  2. Para modelos que arrastam o prefixo do fabricante, "contém" não chega: use regex. Marque o critério como expressão regular e capture apenas a parte útil.
# Dicionario de Modelos de computador
# Criterio -> Nome | a expressao regular corresponde:
/^(?:Dell\s+)?(Latitude\s+\d+)/i

# Acao -> Nome | Atribuir o valor da expressao regular:
#1

# Resultado:
#   "Dell Latitude 5520" -> "Latitude 5520"
#   "LATITUDE 5520"       -> "Latitude 5520"
#   "Latitude 5520"       -> "Latitude 5520"

O #1 é o primeiro grupo capturado; #0 seria a cadeia inteira. Este detalhe apanha muita gente: a ação "atribuir o valor da expressão regular" só funciona se o critério estiver marcado como expressão regular. Com "contém", o #1 passa a texto literal.

Rejeitar KB sem rebentar o inventário

Para tirar as atualizações do catálogo, crie no dicionário de Software uma regra com a ação Ignorar importação:

  • Critério: Nome - começa por - KB - ação Ignorar importação.
  • Critério: Nome - contém - Update for Windows - ação Ignorar importação.

A partir daí, as novas importações ignoram esses itens. O detalhe que quase ninguém antecipa: ao executar o replay dessa regra, o GLPI apaga o software já importado que corresponde ao critério. É a ação certa para limpar, mas é destrutiva, por isso vai sempre primeiro para um ambiente de homologação.

Replay: aplicar as regras aos dados existentes

Uma regra de dicionário só atua na entrada. Para os dados que já estão na base, use o botão Reproduzir as regras do dicionário dentro de cada dicionário. Dois cuidados de operação que aprendemos a doer:

  • Fatie por fabricante. No replay do dicionário de software, o GLPI deixa escolher o fabricante. Executar tudo de uma vez num catálogo grande rebenta o max_execution_time do PHP e devolve um erro 500. Execute por lotes.
  • Janela de baixo tráfego. O replay reprocessa milhares de linhas; agende fora do horário de trabalho.

Depois do replay, confirme que a consolidação funcionou com uma contagem simples:

-- Deve sobrar 1 registo "Dell" (e nao 4)
SELECT id, name FROM glpi_manufacturers
WHERE name LIKE '%Dell%';

-- O software KB deve tender para zero apos o replay com "Ignorar importacao"
SELECT COUNT(*) AS kb_restantes
FROM glpi_softwares
WHERE name LIKE 'KB%';

O erro comum na manutenção de clientes

Num parque de cliente com cerca de 3.000 ativos, o dicionário de software a rejeitar KB e updates fez o catálogo cair de dezenas de milhares de "software" para alguns milhares de itens reais: o relatório de conformidade finalmente ficou legível. Mas executámos o replay com "ignorar importação" diretamente em produção e o cliente perdeu o rasto de que máquinas tinham cada KB, porque a rejeição apaga o registo, não o esconde apenas. A decisão que passou a valer para todos os ambientes: o replay de dicionário nasce em homologação, a rejeição é tratada como operação destrutiva e um merge de fabricante é sempre seguido de uma limpeza dos valores órfãos na lista pendente, que o GLPI não remove sozinho. É o tipo de detalhe que só aparece depois de o fazer num parque a sério.

Boas práticas que evitam retrabalho

  • Comece por fabricante e software: concentram a maior parte da confusão e dão retorno rápido.
  • A ordem das regras importa: coloque as mais específicas antes das genéricas.
  • Teste sempre em homologação e valide o replay com um SQL de contagem antes e depois.
  • Reveja os dicionários após cada grande onda de inventário (um novo lote de máquinas, uma aquisição, uma troca de fornecedor).
  • Documente cada regra: um dicionário sem histórico do "porquê" torna-se uma caixa negra na manutenção seguinte.

Padronizar o inventário é a base para indicadores fiáveis e para o ciclo de vida de ativos. Se o seu parque já cresceu e a CMDB se tornou um emaranhado de duplicados, a NexTool faz este saneamento no âmbito da manutenção: mapeamento da confusão, regras de dicionário testadas em homologação e um replay controlado, sem deitar o seu GLPI abaixo.


Revisto pela equipa NexTool Solutions.

Perguntas Frequentes

Em Administração > Dicionários. A partir daí acede aos dicionários de software, fabricante, modelos (computador, monitor, impressora, telefone, rede), tipos e sistema operativo. Cada dicionário é um conjunto de regras com um critério e uma ação avaliados durante a importação do inventário.

Não automaticamente. A regra atua na entrada de novos dados. Para aplicar nos registos existentes, use o botão 'Reproduzir as regras do dicionário' dentro do dicionário. Execute fatiado por fabricante e fora do horário de pico, porque o replay reprocessa milhares de linhas e pode ultrapassar o tempo de execução do PHP (erro 500).

Crie a regra que atribui o nome fixo (por ex. contém 'Dell' então atribuir 'Dell') e execute o replay para reassociar os ativos. Depois, verifique em Configurar > Listas pendentes se sobraram fabricantes com zero itens e elimine-os. O GLPI reassocia os ativos, mas nem sempre remove o valor antigo da lista pendente.

Sim, ao executar o replay. A ação 'Ignorar importação' não bloqueia apenas futuras importações: no replay apaga o software já importado que corresponde ao critério, e perde o rasto de que máquinas tinham aquele KB. Por isso teste em homologação e trate a rejeição como uma operação destrutiva.

Sim. Marque o critério como 'expressão regular' e use grupos de captura. Na ação, 'atribuir o valor da expressão regular' aceita #0 (cadeia inteira) e #1 a #9 (grupos capturados). O erro comum é deixar o critério como 'contém' e esperar que o #1 funcione: só resolve quando o critério é uma regex.

Sim. As regras são avaliadas de cima para baixo. Coloque as mais específicas antes das genéricas para que uma regra ampla não capture um caso que devia ter tratamento próprio. Reveja a ordem sempre que adicionar regras novas.

Precisa de ajuda?