Solução de problemas: erros do CloudWatch Logs e do CloudTrail - Amazon Managed Workflows for Apache Airflow

Solução de problemas: erros do CloudWatch Logs e do CloudTrail

Os tópicos desta página contêm resoluções para o Amazon CloudWatch Logs e erros AWS CloudTrail que você pode encontrar em um ambiente Amazon Managed Workflows para Apache Airflow.

Logs

O tópico a seguir descreve os erros que você pode receber ao acessar os logs do Apache Airflow.

Não consigo encontrar meus logs de tarefas ou recebi o erro Reading remote log from Cloudwatch log_group

O Amazon MWAA configurou o Apache Airflow para ler e gravar logs diretamente de e para o Amazon CloudWatch Logs. Se um operador falhar ao iniciar uma tarefa ou não conseguir gravar nenhum log, você terá o erro:

*** Reading remote log from Cloudwatch log_group: airflow-environmentName-Task log_stream: DAG_ID/TASK_ID/timestamp/n.log.Could not read remote logs from log_group: airflow-environmentName-Task log_stream: DAG_ID/TASK_ID/time/n.log.
  • Recomendamos as seguintes etapas:

    1. Verifique se você ativou os logs de tarefas no nível INFO do seu ambiente. Para obter mais informações, consulte Como acessar logs do Airflow no Amazon CloudWatch.

    2. Verifique se o perfil de execução do ambiente tem as políticas de permissão corretas.

    3. Verifique se seu operador ou tarefa está funcionando corretamente, tem recursos suficientes para analisar o DAG e tem as bibliotecas Python apropriadas para carregar. Para verificar se você tem as dependências corretas, tente eliminar as importações até encontrar a que está causando o problema. Recomendamos testar suas dependências do Python usando aws-mwaa-docker-images.

As tarefas estão falhando sem nenhum log

Se as tarefas estiverem falhando em um fluxo de trabalho e você não conseguir localizar nenhum log das tarefas com falha, verifique se você está definindo o parâmetro queue em seus argumentos padrão, conforme mostrado a seguir.

from airflow import DAG from airflow.operators.bash_operator import BashOperator from airflow.utils.dates import days_ago # Setting queue argument to default. default_args = { "start_date": days_ago(1), "queue": "default" } with DAG(dag_id="any_command_dag", schedule_interval=None, catchup=False, default_args=default_args) as dag: cli_command = BashOperator( task_id="bash_command", bash_command="{{ dag_run.conf['command'] }}" )

Para resolver o problema, remova queue do seu código e invoque o DAG novamente.

Eu recebo um erro ResourceAlreadyExistsException no CloudTrail

"errorCode": "ResourceAlreadyExistsException", "errorMessage": "The specified log stream already exists", "requestParameters": { "logGroupName": "airflow-MyAirflowEnvironment-DAGProcessing", "logStreamName": "scheduler_cross-account-eks.py.log" }

Certos requisitos do Python, como apache-airflow-backport-providers-amazon reverter a biblioteca watchtower que o Amazon MWAA usa para se comunicar com o CloudWatch para uma versão mais antiga. Recomendamos as seguintes etapas:

  • Adicione a seguinte biblioteca ao seu requirements.txt.

    watchtower==1.0.6

Eu recebo um erro Invalid request no CloudTrail

Invalid request provided: Provided role does not have sufficient permissions for s3 location airflow-xxx-xxx/dags

Se você estiver criando um ambiente Amazon MWAA e um bucket Amazon S3 usando o mesmo modelo CloudFormation, você precisa adicionar uma seção DependsOn dentro do seu modelo CloudFormation. Os dois recursos (MWAA Environment e MWAA Execution Policy) têm uma dependência em CloudFormation. Recomendamos as seguintes etapas:

  • Adicione a seguinte declaração DependsOn ao seu modelo CloudFormation.

    ... MaxWorkers: 5 NetworkConfiguration: SecurityGroupIds: - !GetAtt SecurityGroup.GroupId SubnetIds: !Ref subnetIds WebserverAccessMode: PUBLIC_ONLY DependsOn: MwaaExecutionPolicy MwaaExecutionPolicy: Type: AWS::IAM::ManagedPolicy Properties: Roles: - !Ref MwaaExecutionRole PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: airflow:PublishMetrics Resource: ...

    Para obter um exemplo, consulte Tutoriais de início rápido para Amazon Managed Workflows for Apache Airflow.

Eu recebo Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory nos registros do Apache Airflow

Recebo psycopg2 “o servidor fechou a conexão inesperadamente” nos meus logs do agendador

Se você receber um erro semelhante a esse, seu agendador do Apache Airflow pode ter ficado sem recursos.

2021-06-14T10:20:24.581-05:00 sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) server closed the connection unexpectedly 2021-06-14T10:20:24.633-05:00 This probably means the server terminated abnormally 2021-06-14T10:20:24.686-05:00 before or while processing the request.

Recomendamos as seguintes etapas:

  • Considere a atualização para o Apache Airflow v2.0.2, que você pode usar para especificar até 5 agendadores.

Recebo Executor reports task instance %s finished (%s) although the task says its %s nos meus logs de processamento do DAG

Se você receber um erro semelhante ao seguinte, suas tarefas de longa execução podem ter atingido o limite de tempo da tarefa no Amazon MWAA. O Amazon MWAA tem um limite de 12 horas para qualquer tarefa do Airflow, para evitar que as tarefas fiquem presas na fila e bloqueiem atividades como escalonamento automático.

Executor reports task instance %s finished (%s) although the task says its %s. (Info: %s) Was the task killed externally

Recomendamos as seguintes etapas:

  • Considere dividir a tarefa em várias tarefas de execução mais curtas. O Airflow normalmente tem um modelo em que os operadores são assíncronos. Ele invoca atividades em sistemas externos e os sensores do Apache Airflow pesquisam para verificar quando estão concluídas. Se um sensor falhar, ele poderá ser repetido com segurança sem afetar a funcionalidade do operador.

Recebo Could not read remote logs from log_group: airflow-*{*environmentName}-Task log_stream:* {*DAG_ID}/*{*TASK_ID}/*{*time}/*{*n}.log. nos meus logs de tarefas

Se você tiver um erro semelhante ao que se segue, o perfil de execução do seu ambiente pode não conter uma política de permissões para criar fluxos de log para logs de tarefas.

Could not read remote logs from log_group: airflow-*{*environmentName}-Task log_stream:* {*DAG_ID}/*{*TASK_ID}/*{*time}/*{*n}.log.

Recomendamos as seguintes etapas:

Você também pode ter especificado um pacote de provedor em seu arquivo requirements.txt que é incompatível com sua versão do Apache Airflow. Por exemplo, se você estiver usando o Apache Airflow v2.0.2, você pode ter especificado um pacote, como o pacote apache-airflow-providers-databricks, que só é compatível com o Airflow 2.1+.

Recomendamos as seguintes etapas:

  1. Se você estiver usando o Apache Airflow v2.0.2, modifique o requirements.txt arquivo e adicione apache-airflow[databricks]. Isso instala a versão correta do pacote Databricks que é compatível com o Apache Airflow v2.0.2.

  2. Teste seus DAGs, plug-ins personalizados e dependências do Python localmente usando aws-mwaa-docker-images no GitHub.