에러 추적
에러 추적 (Error Tracking)
이 페이지는 Airflow가 Sentry로 에러를 전송하도록 설정하는 방법을 안내해요. apache-airflow[sentry] 패키지를 설치하고 [sentry] 섹션에 sentry_on과 SENTRY_DSN을 설정하면 되며, before_send·transport 같은 세부 옵션도 지정할 수 있어요. 실패한 Task에 붙는 태그(tag)와 breadcrumb도 설명드려요.
출처: 문서
본문
Airflow는 Sentry로 에러를 전송하도록 설정할 수 있어요.
설정
먼저 sentry 요구사항을 설치해야 해요:
pip install 'apache-airflow[sentry]'
그다음 [sentry] 섹션의 sentry_on 옵션을 True로 설정해 통합을 활성화해야 해요.
SENTRY_DSN을 airflow.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를 대신 사용해야 해요.
Breadcrumbs
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