Agente de contêiner de Linux do Amazon ECS - Amazon Elastic Container Service

Agente de contêiner de Linux do Amazon ECS

O agente do Amazon ECS é um processo executado em cada instância de contêiner registrada em seu cluster. Ele facilita a comunicação entre as instâncias de contêiner e o Amazon ECS.

Cada agente de contêiner do Amazon ECS oferece suporte a um conjunto diferente de recursos e fornece correções de erros de versões anteriores. Quando possível, sempre recomendamos usar a versão mais recente do agente de contêiner do Amazon ECS. Para atualizar o agente de contêiner para a versão mais recente, consulte Atualizar o agente de contêiner do Amazon ECS.

Para ver quais recursos e aprimoramentos estão incluídos em cada versão de agente, consulte https://github.com/aws/amazon-ecs-agent/releases.

Importante

A versão mínima do Docker para métricas confiáveis é a versão Docker v20.10.13 e posteriores, que está incluída na AMI otimizada para o Amazon ECS 20220607 e posteriores.

As versões 1.20.0 e posteriores do agente do Amazon ECS descontinuaram o suporte para as versões do Docker anteriores à 1.9.0.

Ciclo de vida

Quando o agente de contêiner do Amazon ECS registra uma instância do Amazon EC2 no cluster, a instância do Amazon EC2 relata seu status como ACTIVE e o status de conexão do agente como TRUE. Essa instância de contêiner pode aceitar solicitações de tarefas de processamento.

Se você interrompe (sem concluir) uma instância de contêiner, o status permanece como ACTIVE, mas o status de conexão do agente muda para FALSE em instantes. As tarefas que estavam sendo executadas na instância de contêiner são interrompidas. Se você reiniciar a instância de contêiner, o agente de contêiner se reconectará com o serviço do Amazon ECS e será possível, novamente, executar tarefas na instância.

Importante

Se você interromper e iniciar uma instância de contêiner ou se reinicializar esta instância, algumas versões mais antigas do agente de contêiner do Amazon ECS registrarão a instância novamente, sem cancelar o registro do ID da instância de contêiner original. Nesse caso, o Amazon ECS listará mais instâncias de contêiner no cluster do que você realmente possui. (Se você tiver IDs de instância de contêiner duplicados para o mesmo ID de instância do Amazon EC2, poderá, com segurança, cancelar o registro das duplicatas listadas como ACTIVE com status da conexão do agente de FALSE.) Esse problema foi corrigido na versão atual do agente de contêiner do Amazon ECS. Para obter mais informações sobre como atualizar a versão atual, consulte Atualizar o agente de contêiner do Amazon ECS.

Se você alterar o status de uma instância de contêiner para DRAINING, as novas tarefas não serão posicionadas na instância de contêiner. Todas as tarefas de serviço em execução na instância de contêiner são removidas, se possível, de modo que você possa realizar atualizações de sistema. Para ter mais informações, consulte Drenagem de instâncias de contêiner do Amazon ECS.

Se você cancela o registro ou encerra uma instância de contêiner, seu status muda para INACTIVE imediatamente, e ela não é mais referida não quando você lista suas instâncias de contêiner. No entanto, você ainda pode descrever a instância de contêiner por uma hora depois do encerramento. Depois desse período, a descrição de instância não estará mais disponível.

Importante

É possível drenar as instâncias manualmente ou criar um hook do ciclo de vida do grupo do Auto Scaling para definir o status da instância como DRAINING. Para obter mais informações sobre hooks do ciclo de vida do Auto Scaling, consulte Hooks do ciclo de vida do Amazon EC2 Auto Scaling.

AMIs otimizadas para Amazon ECS

As variantes do Linux da AMI otimizada para Amazon ECS usam a AMI do Amazon Linux 2 como base. O nome da AMI de origem do Amazon Linux 2 para cada variante pode ser recuperado consultando a API da Systems Manager Parameter Store. Para ter mais informações, consulte Recuperação de metadados da AMI do Linux otimizada para o Amazon ECS. Quando você inicia nossas instâncias de contêiner a partir da AMI do Amazon Linux 2 mais recente otimizada para o Amazon ECS você recebe a versão atual do agente de contêiner. Para iniciar uma instância de contêiner com a AMI do Amazon Linux 2 mais recente otimizada pelo Amazon ECS, consulte Iniciar uma instância de contêiner do Linux do Amazon ECS.

Mais informações

As páginas a seguir fornecem informações adicionais sobre as alterações:

Parâmetros de configuração do log do agente de contêiner do Amazon ECS

O agente de contêiner do Amazon ECS armazena logs nas instâncias de contêiner.

Para o agente de contêiner versão 1.36.0 e posteriores, por padrão, os logs estão localizados em /var/log/ecs/ecs-agent.log nas instâncias do Linux e em C:\ProgramData\Amazon\ECS\log\ecs-agent.log nas instâncias do Windows.

Para o agente de contêiner versão 1.35.0 e posteriores, por padrão, os logs estão localizados em /var/log/ecs/ecs-agent.log.timestamp nas instâncias do Linux e em C:\ProgramData\Amazon\ECS\log\ecs-agent.log.timestamp nas instâncias do Windows.

Por padrão, os logs do agente são rotacionados de hora em hora com o máximo de 24 logs armazenados.

Veja a seguir as variáveis de configuração do agente de contêiner que podem ser usadas para alterar o comportamento padrão de log do agente. Para ter mais informações, consulte Configuração do agente de contêiner do Amazon ECS.

ECS_LOGFILE

Valores de exemplo: /ecs-agent.log

Valor padrão no Linux: Null

Valor padrão no Windows: Null

O local onde os logs do agente devem ser gravados. Se estiver executando o agente por meio da ecs-init, que é o método padrão ao usar a AMI otimizada para o Amazon ECS, o caminho no contêiner é /log, e ecs-init o monta para /var/log/ecs/ no host.

ECS_LOGLEVEL

Exemplos de valores: crit, error, warn, info, debug

Valor padrão no Linux: info

Valor padrão no Windows: info

O nível de detalhe para o log.

ECS_LOGLEVEL_ON_INSTANCE

Exemplos de valores: none, crit, error, warn, info, debug

Valor padrão no Linux: none, se ECS_LOG_DRIVER é explicitamente definido como um valor não vazio; caso contrário, o mesmo valor que ECS_LOGLEVEL

Valor padrão no Windows: none, se ECS_LOG_DRIVER é explicitamente definido como um valor não vazio; caso contrário, o mesmo valor que ECS_LOGLEVEL

Pode ser usado para substituir ECS_LOGLEVEL e definir um nível de detalhe que deve ser registrado no arquivo de log na instância, separadamente do nível que é registrado no driver de registro. Se um driver de registro em log estiver explicitamente definido, os logs na instância são desativados por padrão. Eles podem ser ativados novamente com essa variável.

ECS_LOG_DRIVER

Exemplos de valores: awslogs, fluentd, gelf, json-file, journald, logentries syslog, splunk

Valor padrão no Linux: json-file

Valor padrão no Windows: Not applicable

Determina o driver de registro em log usado pelo contêiner do agente.

ECS_LOG_ROLLOVER_TYPE

Valores de exemplo: size, hourly

Valor padrão no Linux: hourly

Valor padrão no Windows: hourly

Determina se o arquivo de log do agente de contêiner é alternado de hora em hora ou com base no tamanho. Por padrão, o arquivo de log do agente é mudado a cada hora.

ECS_LOG_OUTPUT_FORMAT

Valores de exemplo: logfmt, json

Valor padrão no Linux: logfmt

Valor padrão no Windows: logfmt

Determina o formato de saída do log. Quando o formato json é usado, cada linha no log é um mapa JSON estruturado.

ECS_LOG_MAX_FILE_SIZE_MB

Valores de exemplo: 10

Valor padrão no Linux: 10

Valor padrão no Windows: 10

Quando a variável ECS_LOG_ROLLOVER_TYPE é definida como size, essa variável determina o tamanho máximo (em MB) do arquivo de log antes de ser alternado. Se o tipo de alternância estiver definido como hourly, essa variável será ignorada.

ECS_LOG_MAX_ROLL_COUNT

Valores de exemplo: 24

Valor padrão no Linux: 24

Valor padrão no Windows: 24

Determina o número de arquivos de log mudados que devem ser mantidos. Os arquivos de log mais antigos são excluídos depois que esse limite é atingido.

Para o agente de contêiner versão 1.36.0 e posteriores, veja a seguir um arquivo de log de exemplo quando o formato logfmt é usado.

level=info time=2019-12-12T23:43:29Z msg="Loading configuration" module=agent.go level=info time=2019-12-12T23:43:29Z msg="Image excluded from cleanup: amazon/amazon-ecs-agent:latest" module=parse.go level=info time=2019-12-12T23:43:29Z msg="Image excluded from cleanup: amazon/amazon-ecs-pause:0.1.0" module=parse.go level=info time=2019-12-12T23:43:29Z msg="Amazon ECS agent Version: 1.36.0, Commit: ca640387" module=agent.go level=info time=2019-12-12T23:43:29Z msg="Creating root ecs cgroup: /ecs" module=init_linux.go level=info time=2019-12-12T23:43:29Z msg="Creating cgroup /ecs" module=cgroup_controller_linux.go level=info time=2019-12-12T23:43:29Z msg="Loading state!" module=statemanager.go level=info time=2019-12-12T23:43:29Z msg="Event stream ContainerChange start listening..." module=eventstream.go level=info time=2019-12-12T23:43:29Z msg="Restored cluster 'auto-robc'" module=agent.go level=info time=2019-12-12T23:43:29Z msg="Restored from checkpoint file. I am running as 'arn:aws:ecs:us-west-2:0123456789:container-instance/auto-robc/3330a8a91d15464ea30662d5840164cd' in cluster 'auto-robc'" module=agent.go

Veja a seguir um arquivo de log de exemplo quando o formato JSON é usado.

{"time": "2019-11-07T22:52:02Z", "level": "info", "msg": "Starting Amazon Elastic Container Service Agent", "module": "engine.go"}

Para agentes de contêiner versões 1.35.0 e anteriores, veja a seguir o formato do arquivo de log.

2016-08-15T15:54:41Z [INFO] Starting Agent: Amazon ECS Agent - v1.12.0 (895f3c1) 2016-08-15T15:54:41Z [INFO] Loading configuration 2016-08-15T15:54:41Z [WARN] Invalid value for task cleanup duration, will be overridden to 3h0m0s, parsed value 0, minimum threshold 1m0s 2016-08-15T15:54:41Z [INFO] Checkpointing is enabled. Attempting to load state 2016-08-15T15:54:41Z [INFO] Loading state! module="statemanager" 2016-08-15T15:54:41Z [INFO] Detected Docker versions [1.17 1.18 1.19 1.20 1.21 1.22] 2016-08-15T15:54:41Z [INFO] Registering Instance with ECS 2016-08-15T15:54:41Z [INFO] Registered! module="api client"