meta-erlang com LTTng
- 4 minutes read - 651 wordsNeste post vamos ativar o suporte LTTng na BEAM VM usando o projeto Yocto com a layer meta-erlang. O objetivo é demonstrar como podemos fazer a análise de um problema utilizando esta abordagem.
Caso nunca tenha ouvido falar do projeto Yocto, tenha em mente que os conhecimentos usados aqui funcionam para qualquer distribuição Linux.
Basicamente vamos explorar quatro grandes blocos:
- BEAM VM, com suporte ao LTTng habilitado
- Yocto Project, onde vamos usar uma distro básica com Erlang
- Tracecompass, um plugin do projeto Eclipse para visualização e monitoramento de traces
- Um código de exemplo em Erlang, apresentando algum problema no qual podemos visualizar com o LTTng.
Parte A: entendendo a infraestrutura
Ativando LTTng na layer
Adicione a seguinte configuração no arquivo conf/local.conf:
PACKAGECONFIG_append_pn-erlang = " lttng"
Isso vai fazer com que a receita compile a BEAM VM com suporte ao LTTng.
Também, ainda no mesmo arquivo, vamos adicionar algumas features na imagem final na qual vai conter todas as ferramentas que precisamos:
EXTRA_IMAGE_FEATURES = "debug-tweaks eclipse-debug
tools-profile ssh-server-openssh"
A descrição de cada feature pode ser vista aqui: Image Features
Também vamos incluir os pacotes necessários para usar Erlang na distro, ou seja:
- erlang
- runtime-tools, na qual possuem ferramentas de tracing/debugging apropriados para produção
IMAGE_INSTALL_append = " erlang erlang-runtime-tools"
O passo final é fazer a build da imagem mínima:
bitbake core-image-minimal
Testando a distro
Todo o ambiente será emulado usando o qemu. Então vamos executar o qemu e testar a conectividade e ferramentas.
runqemu core-image-minimal
Há instruções no manual Yocto Project Profiling and Tracing Manual no qual podemos usar para testar se o ambiente está funcionando.
O mais importante aqui é a conexão ssh funcionando.
Conectando com o Tracecompass
A próxima etapa será instalar e configurar o Tracecompass para acessar o ambiente remoto. No manual da ferramenta há uma sessão sobre como configurar o Tracecompass com LTTng Control
Caso esteja perdido nos conceitos, recomendo a leitura do manual do LTTng e Tracecompass.
Nesta etapa o objetivo é:
- criar uma sessão de trace
- ativar dois canais (Kernel e UST)
- iniciar a sessão
- executar alguns comandos na shell Erlang
- parar a sessão
- importar o trace
- tentar analisar utilizando as visões do Tracecompass
Parece complicado mas não é.
A figura abaixo mostra uma tela do Tracecompass com um trace: