Usando Elastic APM com servidor Docker para monitorar uma aplicação Node.js
Jhones Gonçalves
Posted on February 25, 2023
Introdução
O Elastic APM é uma ferramenta de monitoramento de desempenho de aplicativos que permite coletar e analisar dados de desempenho em tempo real. Neste artigo, vamos ver como configurar o Elastic APM como um servidor Docker para monitorar uma aplicação Node.js.
Pré-requisitos
Antes de começarmos, você deve ter o seguinte instalado em sua máquina:
- Docker
- Docker Compose
Passo 1: Crie uma aplicação Node.js
Para este artigo, vamos criar uma aplicação Node.js simples. Crie um novo diretório e crie um arquivo chamado index.js
. Adicione o seguinte código ao arquivo:
const http = require('http');
const server = http.createServer((req, res) => {
if (req.url === '/health') {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ status: 'UP' }));
} else {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello, world!\n');
}
});
const port = process.env.PORT || 3000;
server.listen(port, () => {
console.log(Server running on port ${port});
});
Este código cria um servidor HTTP simples que responde com "Hello, world!" quando você acessa a raiz do servidor. Quando você acessa /health
, o servidor retorna um JSON que indica que está saudável.
Passo 2: Crie um arquivo Dockerfile
O próximo passo é criar um arquivo Dockerfile
para empacotar a aplicação Node.js em um contêiner Docker. Crie um novo arquivo chamado Dockerfile
no diretório raiz do seu projeto e adicione o seguinte conteúdo:
FROM node:14-alpine
WORKDIR /app
COPY package.json .
COPY package-lock.json .
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
Este arquivo define uma imagem Docker que usa a imagem node:14-alpine
como base. Ele define um diretório de trabalho na imagem, instala as dependências da aplicação, copia os arquivos da aplicação para o contêiner Docker e expõe a porta 3000. Por fim, ele define o comando npm start
como o comando padrão que deve ser executado quando o contêiner é iniciado.
Passo 3: Crie um arquivo docker-compose.yml
O próximo passo é criar um arquivo docker-compose.yml
para orquestrar a execução dos contêineres da aplicação e do Elastic APM. Crie um novo arquivo chamado docker-compose.yml
no diretório raiz do seu projeto e adicione o seguinte conteúdo:
version: '3.8'
services:
app:
build: .
ports:
- '3000:3000'
environment:
- ELASTIC_APM_SERVICE_NAME=my-node-app
- ELASTIC_APM_SERVER_URL=http://apm-server:8200
- ELASTIC_APM_ENVIRONMENT=development
- ELASTIC_APM_LOG_LEVEL=debug
depends_on:
- apm-server
apm-server:
image: docker.elastic.co/apm/apm-server:
ports:
- '8200:8200'
- '1514:1514/udp'
environment:
- output.elasticsearch.hosts=[elasticsearch:9200]
- apm-server.secret_token=${ELASTIC_APM_SECRET_TOKEN}
volumes:
- './apm-server/config/apm-server.yml:/usr/share/apm-server/apm-server.yml:ro'
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.16.2
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- ES_JAVA_OPTS=-Xms256m -Xmx256m
- http.host=0.0.0.0
- transport.host=127.0.0.1
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
ports:
- '9200:9200'
- '9300:9300'
volumes:
- esdata:/usr/share/elasticsearch/data
volumes:
esdata:
driver: local
Este arquivo define três serviços:
-
app
: o serviço que executa a aplicação Node.js. -
apm-server
: o serviço que executa o servidor Elastic APM. -
elasticsearch
: o serviço que executa o Elasticsearch.
O serviço app
é construído a partir da imagem definida no arquivo Dockerfile
e expõe a porta 3000. Ele também define algumas variáveis de ambiente que são usadas pela biblioteca Elastic APM para se conectar ao servidor Elastic APM.
O serviço apm-server
é construído a partir da imagem docker.elastic.co/apm/apm-server
. Ele expõe as portas 8200 e 1514/udp, que são usadas para se comunicar com a biblioteca Elastic APM. Ele também define uma variável de ambiente que define a chave secreta usada pelo servidor Elastic APM para autenticação.
O serviço elasticsearch
é construído a partir da imagem docker.elastic.co/elasticsearch/elasticsearch
. Ele expõe as portas 9200 e 9300, que são usadas pelo Elasticsearch para se comunicar com a aplicação. Ele também define algumas variáveis de ambiente que são usadas para configurar o Elasticsearch.
Passo 4: Inicie os contêineres
Agora que temos todos os arquivos necessários, podemos iniciar os contêineres. Para fazer isso, execute o seguinte comando no diretório raiz do seu projeto:
docker-compose up -d
Este comando inicia os três contêineres definidos no arquivo docker-compose.yml
. Você deverá ver mensagens de log para cada contêiner à medida que eles são iniciados.
Passo 5: Verifique se o Elastic APM está funcionando
Para verificar se o Elastic APM está funcionando, abra o Kibana em seu navegador em http://localhost:5601
. No painel de navegação à esquerda, clique em "APM" para acessar a página de monitoramento de desempenho.
Se tudo estiver funcionando corretamente, você deverá ver sua aplicação Node.js listada na página "APM". Clique na aplicação para ver mais informações sobre o desempenho da aplicação.
Exemplo de aplicação no apm:
Conclusão
Neste artigo, vimos como usar o Elastic APM para monitorar uma aplicação Node.js em um ambiente Docker. O Elastic APM é uma ferramenta poderosa que fornece insights detalhados sobre o desempenho da sua aplicação, permitindo que você identifique problemas e otimize o desempenho.
Começamos criando um arquivo Dockerfile que define o ambiente de execução da nossa aplicação Node.js e adicionando a biblioteca Elastic APM à nossa aplicação. Em seguida, criamos um arquivo docker-compose.yml que define os contêineres para a aplicação Node.js, o servidor Elastic APM e o Elasticsearch.
Ao iniciar os contêineres, podemos verificar se o Elastic APM está funcionando acessando o Kibana e verificando se a nossa aplicação Node.js está listada na página "APM". A partir daí, podemos usar o Elastic APM para monitorar o desempenho da nossa aplicação e identificar possíveis gargalos ou problemas de desempenho.
Esperamos que este artigo tenha sido útil para você e que você agora tenha uma compreensão melhor de como usar o Elastic APM para monitorar uma aplicação Node.js em um ambiente Docker. Lembre-se de que o monitoramento do desempenho é uma parte importante do processo de desenvolvimento de software e pode ajudar a identificar problemas e melhorar a experiência do usuário.
Posted on February 25, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
February 25, 2023