Como posso enviar logs de contêiner do Docker para o Amazon CloudWatch Logs por um proxy?

5 minuto de leitura
0

Quero publicar meus logs de contêiner do Docker no Amazon CloudWatch por um proxy.

Breve descrição

Use um proxy ao enviar logs de contêiner do Docker para o Amazon CloudWatch. Essa etapa adiciona uma camada adicional de segurança entre suas instâncias do Docker e o tráfego vinculado à Internet.

Resolução

Primeiro, configure sua infraestrutura básica do Docker para seu caso de uso específico.

Neste exemplo, a infraestrutura inclui:

  • Uma instância do Amazon Elastic Compute Cloud (Amazon EC2) que faz parte de uma sub-rede privada que atua como uma instância de contêiner do Docker.
  • Uma instância do Amazon EC2 que faz parte de uma sub-rede pública que atua como uma instância de proxy.
  • Um daemon do Docker instalado na parte superior da instância do Amazon EC2 em uma sub-rede privada. Esse daemon está configurado para permitir que todas as tarefas do contêiner enviem seus logs de saída padrão para o CloudWatch.
  • Amazon Linux 2 para o sistema operacional (OS).

Além disso, verifique se sua função de AWS Identity and Access Management (AWS IAM) tem CloudWatchAgentAdminPolicy, CloudWatchAgentServerPolicy ou política parecida associada à sua instância privada. A política deve permitir a criação de um grupo de logs, a criação de um fluxo de logs e chamadas de PutLogEvents.

Prepare sua instância do Docker

1.    Configure variáveis de ambiente Linux para direcionar todo o tráfego da instância do contêiner do Docker na instância de proxy. Neste exemplo, o endereço IP se aplica à instância do Amazon EC2 atuando como uma instância de proxy:

$ export https_proxy=http://192.0.2.86:8888/
$ export http_proxy=http://192.0.2.86:8888/
$ export no_proxy=localhost,169.254.169.254

Observação: essas variáveis são os requisitos mínimos da configuração no_proxy. Inclua outros endereços IP de destino que não você deseja que os clientes acessem pelo proxy.

2.    Instale o contêiner do Docker em sua instância do Docker. Veja este exemplo:

$ sudo yum update -y
$ sudo yum install docker -y
$ sudo docker version

3.    Atualize sua instância do Docker para a versão mais recente.

4.    Inicie o daemon do Docker com este comando:

sudo systemctl start docker

5.    Permita que o Docker seja executado sem privilégios sudo executando este comando:

sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
docker run hello-world

6.    Verifique a instalação do Docker analisando a saída. Encontre uma mensagem de verificação da instalação como esta:

"Hello From Docker!"
"This message shows that your installation appears to be working correctly."

Adicione sua configuração de proxy ao Docker

Para configurações em que o Docker Engine está instalado no Linux init (incluindo as distribuições de Amazon Linux, RHEL 6 ou CentOS 6):

1.    Abra o arquivo de configuração /etc/sysconfig/docker usando o editor de sua preferência.

2.    Adicione sua configuração de proxy ao arquivo. Use o endereço IP privado da instância pública ou proxy. Veja este exemplo:

# Setup proxy
export http_proxy="http://192.0.2.86:8888/"
export https_proxy="http://192.0.2.86:8888/"
export no_proxy="/var/run/docker.sock,localaddress,localhost,169.254.169.254"

Observação: esses são os requisitos mínimos da configuração no_proxy. Inclua outros endereços IP de destino que não você deseja que os clientes acessem pelo proxy.

3.    Salve seu arquivo de configuração.

4.    Reinicie o serviço Docker:

$ sudo service docker restart

Para configurações em que o Docker Engine está instalado no daemon de gerenciamento do sistema Linux systemd (incluindo as distribuições de Amazon Linux 2 e RHEL 7):

1.    Crie um diretório systemd para o serviço Docker. Veja este exemplo:

$ sudo mkdir -p /etc/systemd/system/docker.service.d

2.    Crie um arquivo de proxy HTTP ou HTTPS, dependendo de sua configuração. Veja estes exemplos:

$ sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://192.0.2.86:8888/" "NO_PROXY=localhost,127.0.0.1,169.254.169.254"
$ vim /etc/systemd/system/docker.service.d/https-proxy.conf
[Service]
Environment="HTTPS_PROXY=http://192.0.2.86:8888/" "NO_PROXY=localhost,127.0.0.1,169.254.169.254"

Observação: esses são os requisitos mínimos da configuração no_proxy. Inclua outros endereços IP de destino que não você deseja que os clientes acessem pelo proxy.

3.    Para limpar suas alterações, use este comando:

$ sudo systemctl daemon-reload

4.    Para reiniciar o Docker, use este comando:

$ sudo systemctl restart docker

5.    Verifique sua nova configuração:

$ systemctl show --property=Environment docker

6.    Revise a saída:

Environment="HTTPS_PROXY=http://192.0.2.86:8888/" "NO_PROXY=localhost,127.0.0.1,169.254.169.254"

Teste se seus logs do Docker são enviados para o CloudWatch

1.    Execute a imagem nginx no Docker.

2.    Use o driver de log awslogs do Docker para enviar os logs de saída padrão da tarefa para o Amazon CloudWatch Logs. Veja este exemplo:

$ sudo docker run -d --name nginx --log-driver=awslogs --log-opt awslogs-region=eu-west-1 --log-opt awslogs-group=DockerLogGroupWithProxy --log-opt awslogs-create-group=true -p 8112:80 nginx

3.    Gere logs de sua primeira tarefa do Docker usando curl. Veja este exemplo:

curl localhost:8112

4.    Visualize os dados enviados a seu grupo de logs no console do CloudWatch.

5.    Verifique se o evento de logs de sua tarefa do Docker foi enviado ao grupo de logs do CloudWatch. Por exemplo, procure um evento de logs como este:

198.51.100.100 - - [19/Sep/2018:10:13:38 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.53.1" "-"

Informações relacionadas

Monitorando suas instâncias de contêiner

Criar uma imagem de contêiner para uso no Amazon ECS

AWS OFICIAL
AWS OFICIALAtualizada há um ano