Wie richte ich den Luftstrom, der E-Mail Konfiguration zum versenden einer E-Mail auf Fehler?
Ich versuche, mich ein Luftstrom Aufgabe absichtlich scheitern und Fehler aus, indem in einer Bash-Zeile ( thisshouldnotrun
), das funktioniert nicht. Luftstrom ist die Ausgabe folgende:
[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
Wird der Luftstrom senden Sie eine E-Mail für diese Art von Fehler? Wenn nicht, was wäre der beste Weg, um senden Sie eine E-Mail für diese Fehler?
Ich bin mir auch nicht sicher, ob airflow.cfg
setup korrekt ist... Da das ultimative Ziel ist der test der E-Mail-Benachrichtigungen Benachrichtigung, möchte ich sicherstellen, dass Luftzirkulation.cfg-setup korrekt ist. Hier ist das 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.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 = airflow_data_user@domain.com
Was ist smtp_starttls
? Ich finde keine info für Sie in der Dokumentation oder der online. Wenn wir 2-Faktor-Authentifizierung benötigt, um E-Mails anzeigen, wird das auch ein Problem sein, hier für Luftzirkulation?
Hier ist mein Bash-Befehl:
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
Und meine Aufgabe:
task1 = BashOperator(
task_id = 'run_bash',
bash_command = task1_bash_command,
dag = dag,
retries = 2,
email_on_failure = True,
email = '[email protected]')
Du musst angemeldet sein, um einen Kommentar abzugeben.
smtp_starttls
im Grunde bedeutet, dass die Verwendung TLSSetzen Sie diese auf
False
- und set -smtp_ssl
zuTrue
wenn Sie SSL benutzen wollen, statt. Sie müssen wahrscheinlichsmtp_user
undsmtp_password
für entweder.Luftstrom wird nicht mit 2 Schritt-Authentifizierung. Allerdings ist Sie AWS verwenden, die Sie wahrscheinlich nicht brauchen es als Ihre SMTP (SES) - Anmeldeinformationen unterscheiden sich von Ihrer AWS-Anmeldeinformationen.
Sehen hier.
BEARBEITEN:
Für den Luftstrom eine E-Mail senden bei Fehler, es gibt ein paar Dinge, die eingestellt werden müssen, um sich auf Ihre Aufgabe,
email_on_failure
undemail
.Siehe hier zum Beispiel:
thisshouldnotrun
Befehl, gibt das system eine127
Fehler, wie erwartet, die aber den Luftstrom nicht scheint, nehmen Sie es als ein Fehler. Es schadet auch nicht, wiederholen Sie die Aufgabe. Jede Idee, wie Sie werfen eine voll Fehler???exit 1
thisshouldnotrun
ist kein Gültiger Befehl, aber es geht weiter in die nächste Zeile, also kein Fehler zu sein scheint, geworfen. Zwischenfrage - wäre die E-Mail-Benachrichtigungen gehen heraus beim laufenairflow test
?airflow.cfg
setup falsch, oderairflow test
keine E-Mail bei FehlerStarting attempt 1 of 3
, fangen dieexit 64
, und Fehler bei der Ausgabe, die Ende mitBash command failed
. Gedanken?stderr
undstdout
? Ich schaute auf die Dateien und nicht sehen, alles, was mit E-Mails und so weiter. Ich habe versucht, unter/home/ubuntu/airflow/logs
aber sehe keine logs gibt es für diese dag entweder. Ich sollte auch erwähnen, dass dies alles durch laufenairflow test
wenn das macht keinen Unterschiedlocalhost:8080/admin/log
und sehen die dag_id aber keine Ereignisse im Zusammenhang mit E-Mail oder smtp. Wenn es das ist, was du redest, ich sehe nicht alles, sondern nur ein Haufen von anderen UI-bezogene Ereignissesubprocess.run(...)
oder eine der Variationen, die Python-Bibliothek zur Ausführung von linux-Befehlen. Dann können Sie bewerten den Rückgabewert selbst und manuell auslösen, eineAirflowException
wenn der Wert ist nicht, was Sie erwartet. Wenn ein AirflowException geworfen wird, es wird immer markieren Sie die Aufgabe als fehlgeschlagen. Denken Sie also nicht zurückhaltend, um die Betreiber kreativ werden 🙂