Usamos cookies essenciais para login e armazenamento local para suas preferências. Para métricas de uso, usamos o Google Analytics 4 — você pode recusar sem perder nada do produto. Saber mais

ThreadMineThreadMine
Voltar

Ferramenta open-source

Analise thread dumps de produção sem enviar nomes internos

tm-anon é o anonimizador local open-source do ThreadMine: mascara o dump na sua máquina, a análise funciona igual, e os nomes reais nunca saem de lá.

Analisar um dump agora

Resposta rápida

Para sanitizar um thread dump antes de compartilhar: mascare localmente com o tm-anon (tm-anon mask dump.txt) e envie só o resultado. Nomes reais de pacotes, classes e threads viram pseudônimos determinísticos e ficam num vault na sua máquina — a análise no ThreadMine dispara as mesmas detecções e devolve o mesmo health score.

O problema: o dump é útil porque é indiscreto

Em muita empresa, colar um thread dump de produção num analisador de terceiro é proibido por política — e a política tem razão. O dump carrega nomes de pacotes e classes internas (com.suaempresa.pagamento.LedgerService), nomes de thread que embutem id de tenant, rota ou cliente, e a linha de comando inteira da JVM, com flags e caminhos. É exatamente o tipo de dado que o time de compliance classifica como “não sai daqui” — e, na hora do incêndio, quem mais precisa da análise é quem não pode enviar o dump.

O tm-anon existe para destravar esse cenário: ele torna o dump inofensivo antes de sair da máquina, sem quebrar o que um analisador precisa para trabalhar.

Como funciona

O tm-anon substitui os seus nomes por pseudônimos determinísticos (HMAC com a chave de um vault local): com.acme.payment.LedgerService vira sempre o mesmo com.app1.Class2, neste dump e nos próximos. Esse determinismo importa — comparação antes/depois e timeline multi-dump continuam funcionando, porque a mesma classe recebe o mesmo pseudônimo em todos os dumps. O mapeamento reverso fica no vault, que nunca sai da sua máquina.

  1. 01

    Mascare o dump localmente

    tm-anon mask gera um dump.anon.txt sem nenhum nome interno; tm-anon verify confere o resultado — é o gate de compliance.

  2. 02

    Envie o arquivo mascarado

    Upload normal no ThreadMine: cole ou arraste o dump.anon.txt como qualquer dump.

  3. 03

    A análise roda igual — com badge

    As mesmas detecções disparam, e o relatório sai com o badge "Anonimizado" automaticamente — a detecção é automática, nada a configurar.

  4. 04

    Exporte o relatório em JSON

    O export JSON carrega o diagnóstico completo, ainda com os pseudônimos.

  5. 05

    De volta aos nomes reais

    tm-anon unmask traduz o relatório usando o vault — na sua máquina, e só nela.

Instalação

O artefato primário é um jar único, sem dependências (requer Java 21+). Quem não quer JVM na estação usa os binários nativos anexados na mesma release: tm-anon-windows-amd64.exe, tm-anon-linux-amd64 e tm-anon-macos-arm64.

Download

curl -LO https://github.com/maschiojv/threadmine-anonymizer/releases/latest/download/tm-anon.jar
java -jar tm-anon.jar

Uso

Quatro comandos: init uma vez por projeto, mask e verify a cada dump, unmask quando o relatório volta.

Crie o vault local (uma vez por projeto)

tm-anon init

Mascare o dump

tm-anon mask dump.txt

Verifique — o gate de compliance

tm-anon verify dump.txt dump.anon.txt

Reverta os nomes no export JSON

tm-anon unmask export.json

Por que confiar

A pergunta certa para qualquer ferramenta que toca dado sensível é “como eu verifico?” — aqui, cada garantia é auditável:

Open-source (MIT)

Código completo no GitHub — o que roda na sua máquina é o que está no repositório.

Zero código de rede

O jar não tem cliente HTTP nem java.net — e um teste de arquitetura quebra o build se alguém adicionar.

THREAT_MODEL público

O modelo de ameaças documenta o que a ferramenta protege e os limites honestos do mascaramento.

Binários nativos win/linux/mac

Gerados em CI público a partir do mesmo código do jar — sem JVM para rodar.

GitHub Release — jar e binários THREAT_MODEL

O que a análise preserva

Mascarar não degrada a análise porque as detecções do ThreadMine são estruturais: deadlock é um ciclo de locks, pool exhaustion é um pool inteiro no mesmo estado, virtual thread pinning é um padrão de frames — nada disso depende do seu nome de classe. O que os detectores casam por nome (frames de JDK e frameworks, sufixos de pool como http-nio-8080-exec-1) fica numa allowlist pública e passa verbatim. Na verificação de ponta a ponta, 17/17 dumps do corpus analisados antes e depois do mascaramento produziram o mesmo resultado. E o relatório de um dump mascarado exibe o badge “Anonimizado” automaticamente.

Perguntas frequentes

O dump mascarado perde qualidade de análise?

Não. As detecções do ThreadMine são estruturais, e tudo que os detectores casam por nome (frames de JDK e frameworks, sufixos de pool) fica verbatim por uma allowlist pública. Na verificação de paridade, 17 de 17 dumps do corpus produziram o mesmo resultado antes e depois do mascaramento — mesmos problemas, mesmo health score.

E se eu perder o vault?

O vault é o único mapa entre pseudônimos e nomes reais — e ele nunca sai da sua máquina, então nem o ThreadMine consegue reverter por você. Sem ele, o unmask deixa de ser possível; as análises já feitas continuam válidas, só que lendo pseudônimos. Trate o arquivo como um segredo e faça backup como faria com uma chave privada.

A IA (Vein) funciona com dump anonimizado?

A análise determinística é idêntica com ou sem mascaramento. Já o parecer de IA é gerado sobre o dump mascarado, então referencia os pseudônimos (com.app1.Class2 em vez dos seus nomes reais). Para ler com os nomes verdadeiros, exporte o JSON e rode o unmask localmente — a tradução acontece na sua máquina, e só nela.

Mascare, envie e analise — sem cadastro

Rode o tm-anon mask no seu dump, cole o resultado no ThreadMine e receba o diagnóstico em segundos. O primeiro dump não pede conta.