web-dev-qa-db-ja.com

エラー時にメールを送信するようにAirflowのメール設定を設定するにはどうすればよいですか?

動作しないBash行(thisshouldnotrun)を渡すことで、Airflowタスクを意図的に失敗させてエラーにしようとしています。気流は以下を出力しています:

[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 failed

Airflowはこの種のエラーについてメールを送信しますか?そうでない場合、これらのエラーに関する電子メールを送信する最良の方法は何でしょうか?

airflow.cfgは適切にセットアップされています...最終的な目標は電子メールアラート通知をテストすることなので、airflow.cfgが適切にセットアップされていることを確認したいと思います。セットアップは次のとおりです。

[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.com 
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 = [email protected]

とは smtp_starttls?ドキュメントやオンラインで情報が見つかりません。電子メールを表示するために必要な2要素認証がある場合、Airflowの問題はここにありますか?

これが私のBashコマンドです。

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 = '[email protected]')
6
simplycoding

smtp_starttlsは、基本的に使用することを意味します [〜#〜] tls [〜#〜]

これをFalseに設定し、代わりにSSLを使用する場合はsmtp_sslTrueに設定します。おそらくsmtp_usersmtp_passwordが必要です。

エアフローは2ステップ認証を処理しません。ただし、AWSを使用している場合、SMTP(SES)資格情報がAWS資格情報と異なるため、おそらく必要ありません。

here を参照してください。

編集:失敗時に電子メールを送信するためのエアフローのために、タスクに設定する必要のあるものがいくつかあります。email_on_failureemailです。

例についてはこちらをご覧ください。

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='[email protected]',
                    dag=dag)
8
jhnclvr