O tempo médio de resolução mede quem já saiu da fila. A idade média dos chamados mede quem ainda está nela - e é aí que mora o backlog esquecido. Este guia mostra de onde o número sai no GLPI, por que a média sozinha engana, como separar idade de estagnação e como transformar isso em uma rotina semanal de revisão de backlog nos ambientes que sustentamos.
O que a idade média mede - e o que ela esconde
A idade média dos chamados é a média de dias entre a abertura e hoje, considerando apenas os chamados que continuam em aberto. Diferente do TMR, que só enxerga o que já foi resolvido, ela fotografa o estado atual da fila. O problema é que a média, sozinha, é um péssimo resumo de uma fila real: um backlog típico é bimodal - dezenas de chamados novos com poucas horas de vida convivem com uma cauda de chamados parados há semanas. A massa de chamados novos puxa a média para baixo e esconde justamente os antigos, que são o que você precisa achar. Por isso a média nunca anda sozinha: ela vem acompanhada da distribuição e da mediana.
De onde o número sai no GLPI
Tudo vive na tabela glpi_tickets. A idade usa a coluna date (data de abertura); o recorte de "em aberto" usa status. Os estados que importam:
1- Novo (ainda não triado)2- Em atendimento (atribuído)3- Em atendimento (planejado)4- Pendente (aguardando terceiro)5- Solucionado e6- Fechado (fora do backlog)
O erro mais comum aqui é jogar tudo que não é 5 nem 6 no mesmo bolo. Chamados em Pendente (status 4) estão legitimamente parados aguardando um fornecedor, o cliente ou uma peça - eles inflam a idade média sem que ninguém tenha esquecido nada. Segmentar por status é o primeiro filtro honesto:
-- Idade média por status (segmentar: "Pendente" infla a média)
SELECT
status,
ROUND(AVG(DATEDIFF(NOW(), date)), 1) AS idade_media_dias,
COUNT(*) AS total
FROM glpi_tickets
WHERE status NOT IN (5, 6) -- fora Solucionado e Fechado
AND is_deleted = 0
GROUP BY status
ORDER BY idade_media_dias DESC;
-- status: 1 Novo, 2 atribuído, 3 planejado, 4 PendenteIdade não é o mesmo que estagnação
Um chamado aberto há 40 dias mas com uma tarefa registrada ontem é muito diferente de um aberto há 40 dias sem ninguém tocar. A idade (desde a abertura) mede antiguidade; a estagnação (desde a última ação humana) mede abandono - e é a estagnação que aponta o chamado esquecido.
Na sustentação, o erro que já vimos custar caro foi usar date_mod como "última ação". A coluna date_mod do chamado é atualizada por qualquer coisa: uma notificação enviada, um seguidor adicionado, o cron de SLA recalculando prazo, uma regra de negócio disparando. Ou seja, ela dá a ilusão de movimento em chamados que ninguém trabalhou de fato. A última ação humana real está no acompanhamento e na tarefa - glpi_itilfollowups e glpi_tickettasks. Quando trocamos date_mod pela data máxima dessas duas tabelas, a lista de estagnados de um cliente pulou de 3 para 17 chamados: os outros 14 pareciam vivos só porque uma automação encostava neles todo dia.
-- Estagnação real: dias desde a última interação humana
-- date_mod não serve (notificações, seguidores e cron o atualizam)
SELECT
t.id,
t.name,
DATEDIFF(NOW(), t.date) AS idade_dias,
DATEDIFF(NOW(), GREATEST(
t.date,
COALESCE(MAX(f.date), t.date),
COALESCE(MAX(k.date), t.date)
)) AS parado_ha_dias
FROM glpi_tickets t
LEFT JOIN glpi_itilfollowups f
ON f.itemtype = 'Ticket' AND f.items_id = t.id
LEFT JOIN glpi_tickettasks k
ON k.tickets_id = t.id
WHERE t.status NOT IN (4, 5, 6) -- fora Pendente, Solucionado, Fechado
AND t.is_deleted = 0
GROUP BY t.id, t.name, t.date
HAVING parado_ha_dias >= 7
ORDER BY parado_ha_dias DESC;Distribuição, não só a média
Antes de reagir a uma média que subiu, veja a forma da fila. A consulta abaixo quebra o backlog em faixas de idade e revela a cauda longa que a média achata:
-- Distribuição do backlog por faixa de idade
SELECT
CASE
WHEN DATEDIFF(NOW(), date) <= 3 THEN '0-3 dias'
WHEN DATEDIFF(NOW(), date) <= 7 THEN '3-7 dias'
WHEN DATEDIFF(NOW(), date) <= 15 THEN '7-15 dias'
WHEN DATEDIFF(NOW(), date) <= 30 THEN '15-30 dias'
ELSE '30+ dias'
END AS faixa,
COUNT(*) AS chamados
FROM glpi_tickets
WHERE status NOT IN (4, 5, 6)
AND is_deleted = 0
GROUP BY faixa
ORDER BY MIN(DATEDIFF(NOW(), date));Como referência honesta de faixa (dias corridos, não dias úteis): abaixo de 3 dias é saudável, 3 a 7 dias é aceitável, 7 a 15 dias liga o alerta e acima de 15 dias pede revisão chamado a chamado. Não são metas universais - o número justo depende do contrato e do tipo de operação.
Do número à ação: matriz de decisão
Idade alta não é um problema; é um sintoma com várias causas. O que resolve é ler o sinal técnico e classificar antes de agir:
| Sinal técnico | Classificação | Ação |
|---|---|---|
| status 1 (Novo) e idade > 3 dias | Não triado | Atribuir dono/grupo agora |
parado_ha_dias alto, sem seguidor externo | Esquecido | Reatribuir e cobrar |
| status 4 (Pendente) com retorno vencido | Bloqueio expirado | Recobrar o terceiro ou reabrir |
idade alta e parado_ha_dias baixo | Legítimo (complexo) | Revisar SLA / escopo |
| idade alta e categoria recorrente | Candidato a problema | Abrir Problema / artigo de KB |
Um caso silencioso que vale destacar: chamados presos em Novo porque a regra de negócio de atribuição não casou com a categoria e nunca colocou um grupo. Eles envelhecem invisíveis - somem dos painéis por grupo e só aparecem quando você olha a idade média sem filtro de grupo.
Automatizando a revisão semanal
Rodar consulta na mão não escala. Salvamos a consulta de estagnação em um arquivo .sql e agendamos no cron do sistema, lendo credenciais de um arquivo .cnf (chmod 600) para nunca deixar senha na linha de comando. O resultado é um CSV semanal que vira a pauta da revisão de backlog:
# /etc/cron.d/glpi-idade -> toda segunda 07:30, como www-data
# Gera a lista de chamados estagnados (7+ dias) para a revisão de backlog
30 7 * * 1 www-data /usr/bin/mysql --defaults-file=/etc/glpi/kpi-ro.cnf glpi \
< /opt/glpi-kpi/estagnados.sql \
> /var/log/glpi-kpi/estagnados-$(date +\%Y-\%m-\%d).csv 2>&1Erros comuns de campo
- Olhar só a média: ela achata a cauda. Sempre acompanhe a distribuição e, quando possível, a mediana.
- Misturar Pendente no bolo: status 4 é espera legítima; sozinho ele levanta a média e gera alarme falso.
- Usar
date_modcomo última ação: automações o atualizam. Use as datas de acompanhamento e de tarefa. - Comparar entidades com calendários diferentes:
DATEDIFFconta dias corridos; entidades com jornadas distintas não são comparáveis uma a uma. - Esquecer
is_deleted = 0: a lixeira do GLPI não some da tabela e contamina qualquer média.
Próximo passo
Combine a idade média com os demais KPIs de Service Desk e monte tudo em um painel no Metabase ou Grafana com filtro por entidade e grupo. Assim a idade deixa de ser um número no fim do mês e vira um alerta que dispara enquanto ainda dá para agir.
Na NexTool, idade e estagnação do backlog entram no relatório mensal de sustentação que entregamos aos clientes, junto com a lista de chamados a recuperar. Se quiser esse acompanhamento no seu GLPI, conheça nosso serviço de suporte e sustentação.
Este conteúdo foi produzido com auxílio de inteligência artificial e revisado pela equipe Nextool Solutions.