Como posso enviar logs de contêiner do Docker para o Amazon CloudWatch Logs por um proxy?
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
Conteúdo relevante
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 2 anos