我试图通过传入不起作用的 Bash 行 (thisshouldnotrun) 故意使 Airflow 任务失败并出错.气流正在输出以下内容:
I'm trying to make an Airflow task intentionally fail and error out by passing in a Bash line (thisshouldnotrun) that doesn't work. Airflow is outputting the following:
[2017-06-15 17:44:17,869] {bash_operator.py:94} INFO - /tmp/airflowtmpLFTMX7/run_bashm2MEsS: line 7: thisshouldnotrun: command not found [2017-06-15 17:44:17,869] {bash_operator.py:97} INFO - Command exited with return code 127 [2017-06-15 17:44:17,869] {models.py:1417} ERROR - Bash command failed Traceback (most recent call last): File "/home/ubuntu/.local/lib/python2.7/site-packages/airflow/models.py", line 1374, in run result = task_copy.execute(context=context) File "/home/ubuntu/.local/lib/python2.7/site-packages/airflow/operators/bash_operator.py", line 100, in execute raise AirflowException("Bash command failed") AirflowException: Bash command failed [2017-06-15 17:44:17,871] {models.py:1433} INFO - Marking task as UP_FOR_RETRY [2017-06-15 17:44:17,878] {models.py:1462} ERROR - Bash command failed Traceback (most recent call last): File "/home/ubuntu/.local/bin/airflow", line 28, in <module> args.func(args) File "/home/ubuntu/.local/lib/python2.7/site-packages/airflow/bin/cli.py", line 585, in test ti.run(ignore_task_deps=True, ignore_ti_state=True, test_mode=True) File "/home/ubuntu/.local/lib/python2.7/site-packages/airflow/utils/db.py", line 53, in wrapper result = func(*args, **kwargs) File "/home/ubuntu/.local/lib/python2.7/site-packages/airflow/models.py", line 1374, in run result = task_copy.execute(context=context) File "/home/ubuntu/.local/lib/python2.7/site-packages/airflow/operators/bash_operator.py", line 100, in execute raise AirflowException("Bash command failed") airflow.exceptions.AirflowException: Bash command failedAirflow 会针对此类错误发送电子邮件吗?如果没有,针对这些错误发送电子邮件的最佳方式是什么?
Will Airflow send an email for these kind of errors? If not, what would be the best way to send an email for these errors?
我什至不确定 airflow.cfg 是否设置正确...由于最终目标是测试电子邮件警报通知,我想确保正确设置airflow.cfg.这是设置:
I'm not even sure if airflow.cfg is setup properly... Since the ultimate goal is to test the email alerting notification, I want to make sure airflow.cfg is setup properly. Here's the setup:
[email] email_backend = airflow.utils.email.send_email_smtp [smtp] # If you want airflow to send emails on retries, failure, and you want to use # the airflow.utils.email.send_email_smtp function, you have to configure an # smtp server here smtp_host = emailsmtpserver.region.amazonaws smtp_starttls = True smtp_ssl = False # Uncomment and set the user/pass settings if you want to use SMTP AUTH # smtp_user = airflow_data_user # smtp_password = password smtp_port = 587 smtp_mail_from = airflow_data_user@domain什么是smtp_starttls?我在文档或在线中找不到任何信息.如果我们需要 2 因素身份验证来查看电子邮件,这对 Airflow 来说会是个问题吗?
What is smtp_starttls? I can't find any info for it in the documentation or online. If we have 2-factor authentication needed to view emails, will that be an issue here for Airflow?
这是我的 Bash 命令:
Here's my Bash command:
task1_bash_command = """ export PATH=/home/ubuntu/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin export rundate=`TZ='America/Los_Angeles' date +%F -d "yesterday"` export AWS_CONFIG_FILE="/home/ubuntu/.aws/config" /home/ubuntu/bin/snowsql -f //home/ubuntu/sql/script.sql 1> /home/ubuntu/logs/"$rundate"_dev.log 2> /home/ubuntu/logs/"$rundate"_error_dev.log if [ -e /home/ubuntu/logs/"$rundate"_error_dev.log ] then exit 64 fi还有我的任务:
task1 = BashOperator( task_id = 'run_bash', bash_command = task1_bash_command, dag = dag, retries = 2, email_on_failure = True, email = 'username@domain') 推荐答案smtp_starttls 基本意思是使用 TLS
如果您想使用 SSL,请将其设置为 False 并将 smtp_ssl 设置为 True.您可能需要 smtp_user 和 smtp_password .
Set this to False and set smtp_ssl to True if you want to use SSL instead. You probably need smtp_user and smtp_password for either.
Airflow 不会处理两步验证.但是,如果您使用的是 AWS,您可能不需要它,因为您的 SMTP (SES) 凭证与您的 AWS 凭证不同.
Airflow will not handle 2 step authentication. However, is you are using AWS you likely don't need it as your SMTP (SES) credentials are different from your AWS credentials.
请参阅此处.
要让气流在失败时发送电子邮件,需要在您的任务中设置几件事,email_on_failure 和 email.
For airflow to send an email on failure, there are a couple things that need to be set on your task, email_on_failure and email.
请看这里的例子:
def throw_error(**context): raise ValueError('Intentionally throwing an error to send an email.') t1 = PythonOperator(task_id='throw_error_and_email', python_callable=throw_error, provide_context=True, email_on_failure=True, email='your.email@whatever', dag=dag)更多推荐
如何设置 Airflow 的电子邮件配置以发送有关错误的电子邮件?
发布评论