에러 추적

에러 추적 (Error Tracking)

이 페이지는 Airflow가 Sentry로 에러를 전송하도록 설정하는 방법을 안내해요. apache-airflow[sentry] 패키지를 설치하고 [sentry] 섹션에 sentry_onSENTRY_DSN을 설정하면 되며, before_send·transport 같은 세부 옵션도 지정할 수 있어요. 실패한 Task에 붙는 태그(tag)와 breadcrumb도 설명드려요.

출처: 문서

본문

Airflow는 Sentry로 에러를 전송하도록 설정할 수 있어요.

설정

먼저 sentry 요구사항을 설치해야 해요:

pip install 'apache-airflow[sentry]'

그다음 [sentry] 섹션의 sentry_on 옵션을 True로 설정해 통합을 활성화해야 해요.

SENTRY_DSNairflow.cfg 같은 설정 파일의 [sentry] 섹션에 추가해요. 그 템플릿은 다음과 같아요: {PROTOCOL}://{PUBLIC_KEY}@{HOST}/{PROJECT_ID}

[sentry]
sentry_on = True
sentry_dsn = http://[email protected]/123

Note

이 값이 제공되지 않으면 SDK는 SENTRY_DSN 환경 변수에서 읽으려고 해요.

before_send 옵션은 Sentry로 보내기 전에 이벤트를 수정하거나 버리는 데 사용할 수 있어요. 이 옵션을 설정하려면 Sentry SDK가 사용하도록 구성할 before_send 함수의 dotted path를 제공해요.

[sentry]
before_send = path.to.my.sentry.before_send

transport 옵션은 Sentry에 이벤트를 보내는 데 사용되는 전송(transport)을 변경하는 데 사용할 수 있고, 다른 시스템으로 보낼 수도 있어요. 이 옵션을 설정하려면 Sentry SDK가 사용하도록 구성할 Transport 클래스의 dotted path를 제공해요.

[sentry]
transport = path.to.my.sentry.Transport

Python 플랫폼에 기반한 추가 설정 옵션[sentry] 섹션을 통해 제공할 수 있어요. 지원하지 않는 옵션: integrations, in_app_include, in_app_exclude, ignore_errors, before_breadcrumb.

태그

이름 설명
dag_id 실패한 DAG의 이름
task_id 실패한 Task의 이름
data_interval_start Task가 실패했을 때의 데이터 구간 시작
data_interval_end Task가 실패했을 때의 데이터 구간 끝
operator 실패한 Task의 Operator 이름

하위 호환을 위해 logical date를 나타내는 추가 태그 execution_date도 사용할 수 있어요. 이 태그는 deprecated로 간주되며 data_interval_start를 대신 사용해야 해요.

Task가 에러로 실패하면 현재 Dag run의 다른 Task에 대해 breadcrumbs가 추가돼요.

이름 설명
completed_tasks[task_id] 실패한 Task 이전에 실행된 Task의 ID
completed_tasks[state] 실패한 Task 이전에 실행된 Task의 최종 상태 (Success와 Failed 상태만 캡처됨)
completed_tasks[operator] 실패한 Task 이전에 실행된 Task의 Operator
completed_tasks[duration] 실패한 Task 이전에 실행된 Task의 지속 시간(초)

Sentry가 Subprocess Hook에 전달되는 환경 변수에 미치는 영향

Sentry가 활성화되면 기본적으로 표준 라이브러리를 변경해 Airflow가 열어준 모든 서브프로세스에 모든 환경 변수를 전달해요. 이는 airflow.providers.standard.hooks.subprocess.SubprocessHook의 기본 동작을 바꿔요 — 항상 모든 환경 변수가 특정 환경 변수 집합으로 실행된 서브프로세스에 전달되죠. 이 경우 지정된 환경 변수뿐 아니라 기존의 모든 환경 변수도 SUBPROCESS_ 접두사를 붙여 전달돼요. 이는 다른 모든 서브프로세스에도 동일하게 적용돼요.

이 동작은 default_integrations sentry 설정 파라미터를 False로 설정해 StdlibIntegration을 비활성화하면 끌 수 있어요. 다만 이렇게 하면 다른 기본 통합도 비활성화되므로, 유지하고 싶다면 수동으로 다시 활성화해야 해요 (Sentry Default Integrations 참고).

[sentry]
default_integrations = False

더 알아보기 (Learn more)