Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[AIRFLOW-4741] Include Sentry for Airflow #5382

Closed
wants to merge 0 commits into from
Closed

Conversation

tiopi
Copy link
Contributor

@tiopi tiopi commented Jun 7, 2019

Make sure you have checked all steps below.

Jira

  • My PR addresses the following Airflow Jira issues and references them in the PR title. For example, "[AIRFLOW-XXX] My Airflow PR"
    • https://issues.apache.org/jira/browse/AIRFLOW-XXX
    • In case you are fixing a typo in the documentation you can prepend your commit with [AIRFLOW-XXX], code changes always need a Jira issue.
    • In case you are proposing a fundamental code change, you need to create an Airflow Improvement Proposal (AIP).
    • In case you are adding a dependency, check if the license complies with the ASF 3rd Party License Policy.

Description

  • Here are some details about my PR, including screenshots of any UI changes:
    This PR is to add Sentry SDK functionality to Airflow. The functionality includes adding tags per task event and breadcrumbs of previous tasks that ran on the DAG.

Tests

  • My PR adds the following unit tests OR does not need testing for this extremely good reason:

Commits

  • My commits all reference Jira issues in their subject lines, and I have squashed multiple commits if they address the same issue. In addition, my commits follow the guidelines from "How to write a good git commit message":
    1. Subject is separated from body by a blank line
    2. Subject is limited to 50 characters (not including Jira issue reference)
    3. Subject does not end with a period
    4. Subject uses the imperative mood ("add", not "adding")
    5. Body wraps at 72 characters
    6. Body explains "what" and "why", not "how"

Documentation

  • In case of new functionality, my PR adds documentation that describes how to use it.
    • All the public functions and the classes in the PR contain docstrings that explain what it does
    • If you implement backwards incompatible changes, please leave a note in the Updating.md so we can assign it to a appropriate release

Code Quality

  • Passes flake8

Copy link
Member

@ashb ashb left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changes needed to the code as it stands, but I'm not sure I like the money-patching approach.

Does this PR even work? Nothing is loading the SentryHook to add the integrations.

Could it instead be attached to the existing task success/failure callbacks?

airflow/contrib/hooks/sentry_hook.py Outdated Show resolved Hide resolved
airflow/contrib/hooks/sentry_hook.py Outdated Show resolved Hide resolved
airflow/contrib/hooks/sentry_hook.py Outdated Show resolved Hide resolved

original_task_init = TaskInstance.__init__
original_clear_xcom = TaskInstance.clear_xcom_data
SCOPE_TAGS = frozenset(("task_id", "dag_id", "execution_date", "ds", "operator"))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why execution_date and ds? Why operator too?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I removed ds, so it will only be execution_date and operator. These are to keep tags of tasks that fail. These tags are helpful to group and know whether the failure is due to an operator or perhaps just the execution date.

airflow/contrib/hooks/sentry_hook.py Outdated Show resolved Hide resolved
init(dsn=self.dsn, integrations=integrations)

if not getattr(TaskInstance, "_sentry_integration_", False):
TaskInstance.__init__ = add_sentry
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Doing this doesn't feel very clean. Is there another way?

Where is this function actually called from too?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This function patches the init function of a TaskInstance. I went for the monkey patching route since I believe that someone who is using airflow does not need any of the sentry code. However, if they do opt in by adding the DSN to the connections, then the code is added to the init function of the tasks.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am very glad that this integration appears. I have doubts whether the current implementation is good. I think the init logic of this code does not necessarily have to be in the hook. I think that it is not a problem to initiate this integration in the core.

I also think that hooking methods in this way is not a good idea. This can be very confusing to other people.

airflow/www/static/connection_form.js Outdated Show resolved Hide resolved
airflow/www/static/js/connection_form.js Outdated Show resolved Hide resolved
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants