Exportar Logs do Container na Ec2 para o AWS CloudWatch

December 1, 2022    portugues

Imaginamos que você tem sua instância do EC2 executando contêineres docker. Você provavelmente está usando docker-compose para orquestração de contêiner (eu sei que existem soluções melhores).

Neste Dica, mostrarei o que você precisa fazer para armazenar logs de contêiner do Docker no serviço AWS Cloud Watch Logs.

O que é preciso fazer:

  • Criar um Log Group
  • Criar uma IAM Role
  • Configurar serviço Docker

Criar um Log Group:

No AWS Console, acesse o CloudWatch e localize Logs/Log groups. Em seguida, crie um novo Log Group. Uma dica é usar algo relacionado ao nome do software ou algo como Ec2-instanceid-docker:

Criar uma IAM Role

Tem mais de uma maneira de dar acesso à instância do EC2 para serviço AWS, mas usar uma função IAM é o jeito mais fácil.

Criar Nova Função IAM

Crie uma nova police com o conteúdo abaixo:

{

    "Version": "2012-10-17",

    "Statement": [

        {

            "Action": [

                "logs:CreateLogStream",

                "logs:PutLogEvents",

                "logs:CreateLogGroup"

            ],

            "Effect": "Allow",

            "Resource": "*"

        }

    ]

}

Depois anexe essa função a EC2 que possui os containers.

Configurar serviço Docker

Agora vem a parte mais mão na massa dessa dica, como ativar o pluguin do docker para o AWSLOGS:

O que vamos fazer é dizer ao docker daemon para falar com o AWS CloudWatch Logs. Primeiro edite /etc/docker/daemon.json para que tenha esta informação:

{
  "log-driver": "awslogs",
  "log-opts": {
    "awslogs-region": "eu-central-1",
    "awslogs-group" : "my-service-dev"
  }
}

Em seguida reinicie o docker:

systemctl restart docker.service ou service docker restart

A última etapa é opcional. Se você não fizer isso no docker-compose, verá fluxos de log com nomes baseados no ID do contêiner.

services:

  mongo:
    logging:
      options:
        awslogs-stream: mongo
    image: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example

  mongo-express:
    logging:
      options:
        awslogs-stream: mongo-express
    image: mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: example

Por hoje é isso pessoal espero que seja útil pra alguém e se quiser pode deixar um comentário aqui em baixo :D

comments powered by Disqus