DEV Community

Cover image for Usando Elastic APM com servidor Docker para monitorar uma aplicação Node.js
Jhones Gonçalves
Jhones Gonçalves

Posted on

2

Usando Elastic APM com servidor Docker para monitorar uma aplicação Node.js

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});
});


Enter fullscreen mode Exit fullscreen mode

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"]
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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:

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.

Image of Datadog

The Essential Toolkit for Front-end Developers

Take a user-centric approach to front-end monitoring that evolves alongside increasingly complex frameworks and single-page applications.

Get The Kit

Top comments (0)

Hostinger image

Get n8n VPS hosting 3x cheaper than a cloud solution

Get fast, easy, secure n8n VPS hosting from $4.99/mo at Hostinger. Automate any workflow using a pre-installed n8n application and no-code customization.

Start now

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay