Em um post recente, mostramos a você como começar a usar o nível gratuito e aberto do Elastic Observability. Abaixo, explicaremos o que você precisa fazer para expandir sua implantação a fim de começar a coletar métricas de monitoramento de performance de aplicação (APM) ou “rastrear” dados em seu cluster de observabilidade, gratuitamente.
O que é o APM?
O monitoramento de performance de aplicação possibilita que você veja onde suas aplicações passam seu tempo, o que estão fazendo, que outras aplicações ou serviços elas estão chamando e quais erros ou exceções elas estão encontrando.
Além disso, o APM também permite que você veja o histórico e as tendências dos principais indicadores de desempenho, como latência e taxa de transferência, bem como informações sobre transações e dependências:
Esteja você configurando alertas para violações de SLA, tentando avaliar o impacto de sua versão mais recente ou decidindo onde fazer a próxima melhoria, o APM pode ajudar na sua análise de causa raiz para melhorar a experiência dos seus usuários e baixar seu tempo médio até a resolução (MTTR).
Arquitetura lógica
O Elastic APM conta com a integração do APM dentro do Elastic Agent, que encaminha dados de traces e métricas de aplicações instrumentadas com agentes de APM para um cluster do Elastic Observability. O Elastic APM oferece suporte para vários tipos de agente:
- Agentes nativos do Elastic APM, disponíveis para várias linguagens, incluindo Java, .NET, Go, Ruby, Python, Node.js, PHP e JavaScript do lado do cliente
- Código instrumentado com OpenTelemetry
- Código instrumentado com OpenTracing
- Código instrumentado com Jaeger
Neste post do blog, forneceremos um breve exemplo de como instrumentar o código com o agente de Python nativo do Elastic APM, mas as etapas gerais são semelhantes para outras linguagens.
Observe que há uma forte distinção entre o agente do Elastic APM e o Elastic Agent. São componentes muito diferentes, como você pode ver no diagrama acima, por isso é importante não confundi-los.
Instalar o Elastic Agent
A primeira etapa é instalar o Elastic Agent. Você precisa ter o Fleet instalado primeiro ou pode instalar o Elastic Agent autônomo. Instale o Elastic Agent em algum lugar seguindo este guia. Isso fornecerá um endpoint de integração do APM que você pode alcançar. Observe que esta etapa não é necessária no Elastic Cloud, pois hospedamos a integração do APM para você. Verifique se o Elastic Agent está em operação executando o seguinte:
curl <ELASTIC_AGENT_HOSTNAME>:8200
Instrumentação de um código de amostra com um agente do Elastic APM
As instruções para os vários agentes das linguagens diferem com base na linguagem de programação; no entanto, de forma geral, elas têm um fluxo semelhante. Primeiro, você adiciona a dependência do agente na especificação nativa da linguagem e, em seguida, configura o agente para que ele saiba como encontrar a integração do APM.
Você pode experimentar qualquer tipo que desejar, mas vou seguir as instruções do Python usando este exemplo do Python que eu criei.
Obtenha o código de amostra (ou use o seu próprio)
Para começar, eu clonei o repositório do GitHub e mudei para o diretório:
git clone https://github.com/davidgeorgehope/PythonElasticAPMExample
cd PythonElasticAPMExample
Como adicionar a dependência
Adicionar a dependência do Elastic APM é simples — verifique o arquivo app.py no repositório do GitHub e você notará as seguintes linhas de código:
import elasticapm
from elasticapm import Client
app = Flask(__name__)
app.config["ELASTIC_APM"] = { "SERVICE_NAME": os.environ.get("APM_SERVICE_NAME", "flask-app"), "SECRET_TOKEN": os.environ.get("APM_SECRET_TOKEN", ""), "SERVER_URL": os.environ.get("APM_SERVER_URL", "http://localhost:8200"),}
elasticapm.instrumentation.control.instrument()
client = Client(app.config["ELASTIC_APM"])
A biblioteca do Python para Flask é capaz de detectar transações automaticamente, mas você também pode iniciar transações no código conforme o seguinte, como fizemos neste exemplo:
@app.route("/")
def hello():
client.begin_transaction('demo-transaction')
client.end_transaction('demo-transaction', 'success')
Configure o agente
Os agentes precisam enviar dados de traces de aplicação para a integração do APM e, para isso, ela deve estar acessível. Eu configurei o Elastic Agent para escutar no IP do meu host local, então qualquer coisa na minha sub-rede pode enviar dados para ele. Como você pode ver no código abaixo, usamos docker-compose.yml para passar a configuração por meio de variáveis de ambiente. Edite essas variáveis para sua própria instalação do Elastic.
# docker-compose.yml
version: "3.9"
services:
flask_app:
build: .
ports:
- "5001:5001"
environment:
- PORT=5001
- APM_SERVICE_NAME=flask-app
- APM_SECRET_TOKEN=your_secret_token
- APM_SERVER_URL=http://host.docker.internal:8200
Alguns comentários sobre o que foi dito acima:
- service_name: se você deixar isso de fora, o padrão será apenas o nome da aplicação, mas você pode substituí-lo aqui.
- secret_token: tokens secretos permitem que você autorize solicitações para o APM Server, mas exigem que o APM Server seja configurado com SSL/TLS e que um token secreto tenha sido configurado. Não estamos usando HTTPS entre os agentes e o APM Server, então vamos desabilitar isso e converter em um comentário.
- server_url: é assim que o agente pode acessar a integração do APM dentro do Elastic Agent. Substitua pelo nome ou IP do seu host que está executando o Elastic Agent.
Agora que o lado do Elastic APM da configuração está concluído, basta seguir as etapas do README para iniciar.
docker-compose up --build -d
A etapa de compilação levará vários minutos.
Você pode navegar até a aplicação de amostra em execução acessando http://localhost:5001. Não tem muito na amostra, mas ela gera alguns dados de APM. Para gerar um pouco de carga, você pode recarregá-los algumas vezes ou executar um pequeno script rápido:
#!/bin/bash
# load_test.sh
url="http://localhost:5001"
for i in {1..1000}
do
curl -s -o /dev/null $url
sleep 1
done
Isso recarregará as páginas a cada segundo.
De volta ao Kibana, navegue até o app de APM (no ícone de hambúrguer, selecione APM) e você verá nosso novo serviço flask-app (deixei o meu em execução para mostrar um pouco mais de histórico):

A página Service Overview (Visão geral do serviço) fornece um resumo rápido da integridade de um serviço em um só lugar. Se você é um desenvolvedor ou um SRE, esta é a página que ajudará você a responder a perguntas como:
- Como uma nova implantação afetou o desempenho?
- Quais são as transações mais afetadas?
- Como o desempenho se correlaciona com a infraestrutura subjacente?
Esta visualização fornece uma lista de todas as aplicações que enviaram dados de traces de aplicações para o Elastic APM no período especificado (neste caso, os últimos 15 minutos). Também há minigráficos de latência, taxa de transferência e taxa de erro. Clicar em flask-app nos leva à página de visão geral do serviço, que mostra as várias transações dentro do serviço (lembre-se de que meu script está atingindo o endpoint /, como se vê na seção Transactions (Transações)). Obtemos gráficos maiores para Latency (Latência), Throughput (Taxa de transferência), Errors (Erros) e Error Rates (Taxas de erro).

Ao instrumentar aplicações reais, sob uma carga real, você verá muito mais conectividade (e erros!)
Clicando em uma transação na visualização de transações, neste caso, a transação demo-transaction do nosso app de amostra, podemos ver exatamente quais operações foram chamadas:

Isso inclui informações detalhadas sobre chamadas para serviços externos, como consultas de banco de dados:

O que vem a seguir?
Agora que seu cluster do Elastic Observability está funcionando e coletando dados de traces de aplicações prontos para uso, explore as APIs públicas para as linguagens que suas aplicações estão usando, o que lhe permite elevar seus dados de APM a um patamar superior. As APIs permitem que você adicione metadados personalizados, defina transações comerciais, crie spans customizados e muito mais. Você pode encontrar as especificações de API públicas para os vários agentes de APM (como Java, Ruby, Python e outros) nas páginas de documentação do agente de APM.
Se quiser saber mais sobre o Elastic APM, confira nosso webinar sobre o Elastic APM na mudança para arquiteturas nativas da nuvem para ver como o Elastic APM pode ajudar você no seu ecossistema de outras maneiras.
Se decidir que prefere que hospedemos seu cluster de observabilidade, inscreva-se para uma avaliação gratuita do Elasticsearch Service on Elastic Cloud e altere seus agentes para apontar para seu novo cluster.
Publicado originalmente em 5 de maio de 2021; atualizado em 6 de abril de 2023.