에러 트래킹: Sentry 연동
Apache Airflow Official Documentation (in-repo snapshot) — Apache Software Foundation administration-and-deployment/logging-monitoring/errors.rst (전체)
이 모듈을 다 읽으면
- Sentry 연동 설정 절차와 관련 옵션(before_send, transport)의 역할을 설명할 수 있다
- Sentry가 태그/브레드크럼으로 실패 컨텍스트를 어떻게 보강하는지 설명할 수 있다
- Sentry 활성화가 서브프로세스 환경변수 전달에 미치는 부작용을 판단할 수 있다
Airflow는 Sentry와 연동해 실시간 에러 알림을 받을 수 있다. 설정 자체는 간단하지만, Sentry가 기본 통합(default integrations)을 통해 서브프로세스 실행 방식까지 바꿔버리는 부작용이 있다는 점을 알아둬야 한다.
Sentry 설정
먼저 ``pip install 'apache-airflow[sentry]'``로 Sentry 요구사항을 설치한 뒤, ``[sentry]`` 섹션의 ``sentry_on`` 옵션을 ``True``로 설정해 통합을 활성화한다. ``sentry_dsn``에 ``{PROTOCOL}://{PUBLIC_KEY}@{HOST}/{PROJECT_ID}`` 형태의 DSN을 설정하며, 값을 제공하지 않으면 SDK가 ``SENTRY_DSN`` 환경변수에서 읽으려고 시도한다.
``before_send`` 옵션은 이벤트가 Sentry로 전송되기 전에 수정하거나 버리는 함수의 점(dot) 경로를 지정한다. ``transport`` 옵션은 Sentry(또는 다른 시스템)로 이벤트를 보내는 데 쓰이는 Transport 클래스의 경로를 지정한다. 그 외에도 파이썬 플랫폼 기준 Sentry SDK의 추가 설정 옵션들을 ``[sentry]`` 섹션에 넣을 수 있지만, ``integrations``, ``in_app_include``, ``in_app_exclude``, ``ignore_errors``, ``before_breadcrumb``는 지원되지 않는다.
핵심 포인트
- sentry_on=True와 sentry_dsn(또는 SENTRY_DSN 환경변수)으로 기본 연동이 설정된다
- before_send은 이벤트 전송 전 수정/드롭, transport는 전송 방식을 커스터마이즈하는 함수/클래스 경로다
- integrations, in_app_include/exclude, ignore_errors, before_breadcrumb 등 일부 Sentry SDK 옵션은 지원되지 않는다
태그와 브레드크럼
태스크가 실패하면 Sentry 이벤트에 태그가 붙는다: 실패한 Dag의 ``dag_id``, 실패한 태스크의 ``task_id``, 실패 시점의 데이터 인터벌 시작/끝을 나타내는 ``data_interval_start``/``data_interval_end``, 실패한 태스크의 ``operator``. 하위 호환을 위해 논리적 날짜를 나타내는 ``execution_date`` 태그도 추가로 제공되지만 ``data_interval_start``를 쓰는 쪽으로 지원 중단이 권장된다.
태스크가 에러로 실패하면 같은 Dag run 안의 다른 태스크들에 대해 브레드크럼이 추가된다: 실패한 태스크보다 먼저 실행된 태스크의 ID(``completed_tasks[task_id]``), 최종 상태(``completed_tasks[state]``, Success/Failed만 캡처됨), 오퍼레이터(``completed_tasks[operator]``), 실행 시간(``completed_tasks[duration]``).
핵심 포인트
- 실패 이벤트에는 dag_id/task_id/data_interval_start·end/operator 태그가 붙는다
- execution_date 태그는 하위 호환용으로 남아있으나 data_interval_start 사용이 권장된다
- 브레드크럼은 같은 Dag run에서 먼저 실행된 태스크들의 상태(Success/Failed만)와 소요 시간을 기록한다
서브프로세스로의 환경변수 전달 부작용
Sentry가 활성화되면 기본적으로 표준 라이브러리를 변경해 Airflow가 여는 서브프로세스에 모든 환경변수를 전달하게 된다. 이는 ``SubprocessHook``의 기본 동작을 바꾼다 — 원래는 지정한 환경변수만 서브프로세스에 전달되지만, Sentry가 켜져 있으면 지정한 환경변수뿐 아니라 기존의 모든 환경변수가 ``SUBPROCESS_`` 접두어가 붙은 채로 함께 전달된다. 이 현상은 ``SubprocessHook``뿐 아니라 다른 모든 서브프로세스에도 적용된다.
이 동작은 ``[sentry] default_integrations = False``로 끌 수 있다(``StdlibIntegration``을 비활성화). 다만 이 옵션은 다른 기본 통합들도 함께 꺼버리므로, 그것들을 계속 쓰고 싶다면 수동으로 다시 활성화해야 한다.
핵심 포인트
- Sentry 활성화 시 SubprocessHook을 포함한 모든 서브프로세스에 SUBPROCESS_ 접두어로 전체 환경변수가 추가 전달된다
- default_integrations=False로 이 동작(StdlibIntegration)을 끌 수 있지만, 다른 기본 통합도 함께 꺼진다