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.
Sumário
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:
-
Verifique se você ativou os logs de tarefas no nível
INFOdo seu ambiente. Para obter mais informações, consulte Como acessar logs do Airflow no Amazon CloudWatch. -
Verifique se o perfil de execução do ambiente tem as políticas de permissão corretas.
-
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
DependsOnao seu modelo CloudFormation.... MaxWorkers: 5 NetworkConfiguration: SecurityGroupIds: - !GetAtt SecurityGroup.GroupId SubnetIds: !Ref subnetIds WebserverAccessMode: PUBLIC_ONLYDependsOn: MwaaExecutionPolicyMwaaExecutionPolicy: 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
-
Recomendamos as seguintes etapas:
-
Se você estiver usando o Apache Airflow v2, adicione
core.lazy_load_plugins : Falsecomo uma opção de configuração do Apache Airflow. Para saber mais, consulte Usar opções de configuração para carregar plug-ins em 2.
-
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:
-
Modifique o perfil de execução do seu ambiente usando um dos exemplos de políticas em Perfil de execução do Amazon MWAA.
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
Recomendamos as seguintes etapas:
-
Se você estiver usando o Apache Airflow v2.0.2, modifique o
requirements.txtarquivo e adicioneapache-airflow[databricks]. Isso instala a versão correta do pacote Databricks que é compatível com o Apache Airflow v2.0.2. -
Teste seus DAGs, plug-ins personalizados e dependências do Python localmente usando aws-mwaa-docker-images
no GitHub.