medium์์ What we learned after running Airflow on Kubernetes for 2 year ์ ์ฝ์ผ๋ฉฐ ์์ฝํ ๋ด์ฉ์
๋๋ค.
์ด ๊ฒ์๊ธ์์๋ Apache Airflow๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ํ๋ซํผ์ ๊ตฌ์ถํ๋ ๊ณผ์ ์์ ๊ฒฝํํ ๋ด์ฉ๋ค์ ๊ณต์ ํ๊ณ ์์ต๋๋ค. ์ ์๋ Airflow๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๋ณํ, ์ฌ๊ธฐ ํ์ง, ๋ฐ์ดํฐ ๊ณผํ ์ด๋์
ํฐ๋ธ, ๋ด๋ถ ์์
๋ฑ์ ๊ด๋ฆฌํฉ๋๋ค. ํ์ฌ 300๊ฐ ์ด์์ DAG๊ฐ production์ ์กด์ฌํ๋ฉฐ, ํ๋ฃจ์ ํ๊ท 5,000๊ฐ ์ด์์ ์์
์ ์คํํฉ๋๋ค. ์ด๋ฌํ ๊ท๋ชจ์ ์์
์๋ 8๊ฐ์๊ฐ ์คํจ ์์ด ์งํ๋์๋ค๊ณ ํฉ๋๋ค.
production level์์ Airflow๋ฅผ ์ฌ์ฉํ๋ฉฐ ์ป๊ฒ ๋ ์์ด๋์ด๋ค์ ๊ณต์ ํ๊ณ ์๊ณ ์์ฝํ์๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
1. Executor ์ ํ: ์ฒ์์๋ Kubernetes Executor๋ฅผ ์ ํํ์ง๋ง ์์ ์์ ์ ๋ํ ์ค๋ฒํค๋์ Pod ๊ฐ์ ์ดํ๋ก ์ธํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ดํ Celery Executor๋ก ์ ํํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ฑ๋ฅ์ ํฅ์์์ผฐ์ต๋๋ค.
2. DAG ๋์ ์์ฑ๊ณผ ๋์ปคํ๋ง: ์ฌ๋ฌ ํ์ด ์์ฒด DAG๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ ํตํฉํ๊ธฐ ์ํด DAG์ ๋ฉํฐ-์ ์ฅ์ ์ ๊ทผ ๋ฐฉ์์ ๋์ ํ์ต๋๋ค. DAG๋ ๊ฐ๋ณ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ๊ฐ๋ฐ๋๋ฉฐ, CI/CD ๊ฐ์ด๋๋ผ์ธ์ ์ฌ์ฉํฉ๋๋ค.
3. ์ธ๋ถ ์ค์ ์กฐ์ : CeleryExecutor๋ก ์ ํํ ํ ๋ฉ๋ชจ๋ฆฌ ๋์์ ๊ฐ์ ์๋ก์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด worker_max_tasks_per_child ๋ฐ worker_max_memory_per_child์ ๊ฐ์ Celery ๊ตฌ์ฑ์ ์กฐ์ ํ์ต๋๋ค.
4. ์๋ฆผ, ๊ฒฝ๊ณ ๋ฐ ๊ด์ธก์ฑ: Airflow์ ์๋ฆผ ๋ฐ ๊ฒฝ๊ณ ์์คํ ์ ๊ฐ์ ํ๊ธฐ ์ํด Slack ๋ฉ์์ง ๋ฐ Prometheus ๊ท์น์ ์ค์ ํ์ต๋๋ค. ๋ํ, ์์ดํ๋ก์ฐ ๋ฐ ์ธํ๋ผ ๋ชจ๋ํฐ๋ง์ ์ํด ๋ฉํธ๋ฆญ ๋ฐ ๋ก๊ทธ๋ฅผ ์์งํ๊ณ ์ฌ์ฉํ์ต๋๋ค.
5. ๋น์ฉ ์ต์ ํ: ์์ ์ ๋์์ฑ ๋ฐ ๋ฆฌ์์ค ๊ตฌ์ฑ์ ์กฐ์ ํ์ฌ ๋น์ฉ์ ์ต์ ํํ์ต๋๋ค.
๊ฐ๊ฐ์ ๋จ๊ณ๋ณ๋ก ์ดํด๋ณด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
1. Executor ์ ํ
์ฒ์์ ์ ์๋ Kubernetes ํ๊ฒฝ์์ ๊ตฌ์ถํ์ฌ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ Kubernetes Executor ๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ํ์ง๋ง ์ด์๋๋ task ๋ค์ ๊ฒฝ๋์ DBT ๋ณํ ์์
์ด๊ณ ์ ์ ์์ ๋ชจ๋ธ๋ง์ด ๊ธด ์๊ฐ(+/- 1 ์๊ฐ)์ ์์ํฉ๋๋ค. ์ด๋ค์ ๋๊ฐ์ง ๋ฌธ์ ์ ์ง๋ฉดํ๋๋ฐ์.
- Kubernetes Excutor๋ฅผ ์ฌ์ฉ์ ์์
์์ ์ค๋ฒํค๋ ์กด์ฌ. pod ์์ ๋๊ธฐ ์๊ฐ์ด ์์
์์ฒด ์๊ฐ๋ณด๋ค ๊ธธ ๋๊ฐ ์์.
- pod ์ ๊ฑฐ๋ก ์ผ๋ถ ์์
(ํนํ ์ฅ๊ธฐ ์คํ ์์
)์ด ์๊ธฐ์น ์๊ฒ ์คํจํจ.
๊ฒฐ๊ตญ ์ ์๋ Celery Executor๋ก ๋์๊ฐ๋ ๊ฒฐ์ ์ ํ์ต๋๋ค. worker nodes๋ฅผ ๊ณ ์ ํ์ฌ ์๊ณ ๊ท๋ชจ์ ์์
์ด ๋ง์ ์ฌ์ฉ ์ฌ๋ก์ ์ ํฉํ๊ฒ ํ์ฉํ ์ ์์์ต๋๋ค.
2. ๋ถ๋ฆฌ ๋ฐ ๋์ DAG ์์ฑ
๋ถ์ฐ๋ DAG ์ ์ฅ์
๋ชจ๋ DAG๋ DAG๋ฅผ ์์ ํ๋ ํ์ ๋ฐ๋ผ ํน์ ๊ฒฝ๋ก์์ ๋๊ธฐํ ํ๋ก์ธ์ค๋ฅผ ํตํด ๋ฒํท์ ์ ์ฅํฉ๋๋ค.
-> CI/CD๊ฐ ๋งค์ฐ ์ค์ํ๋ฉฐ ๊ฐ DAG ์ด๋ฆ์ DAG ID๊ฐ ์ถฉ๋ํ์ง ์๋๋ก ๋ฏธ๋ฆฌ ์ง์ ๋ ์ ๋์ด๋ก ์์
-> ์ ์ ๊ฒ์ฌ(์ฌ๋ฐ๋ฅธ ์์ ์๋ฅผ ํ ๋นํ๊ณ ํ๊ทธ์ ์กด์ฌ์ฌ๋ถ ํ์ธ)
-> ๋ชจ๋ DAG๋ ์ปค๋ฐ๋๊ธฐ ์ ์ต์ํ์ ์ฒดํฌ๋ฆฌ์คํธ๋ฅผ ํต๊ณผํด์ผ ํฉ๋๋ค.
DAG๋ฅผ ์์ดํ๋ก์ฐ์ ๋๊ธฐํํ๋ ๋ฐฉ๋ฒ
๋ฒํท์ ๋ด์ฉ์ ์ค์ผ์ค๋ฌ, ์์ปค ๋ฑ์ Pod์ ๋ก์ปฌ ํ์ผ ์์คํ
์ ๋๊ธฐํํด์ผ ํฉ๋๋ค.
์ ์๋ Objinsync ๋ฅผ ์ฌ์ฉํ์ฌ ์๊ฒฉ ๊ฐ์ฒด ์ ์ฅ์๋ฅผ ๋ก์ปฌ ํ์ผ ์์คํ
์ผ๋ก ์ ์ง์ ์ผ๋ก ๋๊ธฐํํ๋ ๊ฐ๋ฒผ์ด ๋ฐ๋ชฌ์ ์ฌ์ฉํ์ต๋๋ค.
๋ฉ์ธ ์ค์ผ์ค๋ฌ๋ ์์ปค ์ปจํ
์ด๋๊ฐ ์์๋๊ธฐ ์ ์ objinsync๋ฅผ init ์ปจํ
์ด๋๋ก ์ถ๊ฐํด์ผ ํฉ๋๋ค.(ํนํ Celery ์์ปค์ ๊ฒฝ์ฐ์ ์ค์ํ๊ฒ ์์ฉ)
๋์ ์ผ๋ก DAG ์์ฑ ์ ์ฃผ์์ฌํญ
๋๊ท๋ชจ๋ก DAG๋ฅผ ์์ฑํ๋ ค๋ฉด DAG ํ
ํ๋ฆฟํ์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ ์์ฑ์ ํ์ฉํด์ผ ํฉ๋๋ค. ๋ ์ด์ ๋ชจ๋ DAG๋ฅผ ์๋์ผ๋ก ์์ฑํ์ง ์์ต๋๋ค ๐
๋์ ์ผ๋ก DAG๋ฅผ ์์ฑํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ๋จ์ผ ํ์ผ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. (๋์ ์ผ๋ก ์์ฑํ๋ ค๋ ๊ฐ DAG์ ๋ํด .py ํ์ผ์ ์์ฑํฉ๋๋ค.)
๋์ ์ผ๋ก ์์ฑ๋ ํ์ผ์ DAG ๋ฒํท์ ํธ์ํฉ๋๋ค.
๋จ์ผํ์ผ / ๋ค์คํ์ผ์ผ๋ก ๋์ ์ผ๋ก DAG ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ์ธ์
3. ์ค์ ์ธ๋ถ ์กฐ์
CeleryExecutor๋ก ์ ํํ์๋ง์ ์ผ๋ถ Celery ์์ปค๊ฐ OOM(๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ) ๋ฌธ์ ๋ก ์ธํด ๋ค์ด๋๊ธฐ ์์ํ์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ณ ์์
์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ ์ดํ๊ธฐ ์ํด ๋ ๊ฐ์ง ์ค์ํ Celery ๊ตฌ์ฑ์ ์กฐ์ ํด์ผ ํ์ต๋๋ค: `worker_max_tasks_per_child` ๋ฐ `worker_max_memory_per_child`.
`worker_max_tasks_per_child`: ์ฒซ ๋ฒ์งธ ๊ตฌ์ฑ์ ์์ปค ํ๋ก์ธ์ค๊ฐ ์ ํ๋ก์ธ์ค๋ก ๊ต์ฒด๋๊ธฐ ์ ์ ์คํํ ์ ์๋ ์ต๋ ์์
์๋ฅผ ์ ์ดํฉ๋๋ค. ๋จผ์ Celery ์์ปค์ ์์ปค ํ๋ก์ธ์ค์ ์ฐจ์ด๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค. ํ๋์ ์์ปค ๋
ธ๋๋ concurrency ์ค์ ์ ์ํด ์ ์ด๋๋ ์ฌ๋ฌ ์์ปค ํ๋ก์ธ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, concurrency๋ฅผ 12๋ก ์ค์ ํ๊ณ 2๊ฐ์ Celery ์์ปค๊ฐ ์๋ค๋ฉด 24๊ฐ์ ์์ปค ํ๋ก์ธ์ค๊ฐ ์์ฑ๋ฉ๋๋ค.
๋ฐ๋ผ์ ๋์ผํ ์์ปค ํ๋ก์ธ์ค ๋ด์์ ์์
์ฌ์ด์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ํผํ๊ธฐ ์ํด ๋๋๋ก ๋ฆฌ์ฌ์ดํดํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด ๊ตฌ์ฑ์ด ์ค์ ๋์ง ์์ผ๋ฉด ์์ปค ํ๋ก์ธ์ค๋ฅผ ๋ฆฌ์ฌ์ดํดํ์ง ์๋ ๊ฒ์ด ๊ธฐ๋ณธ ์ค์ ์
๋๋ค.
`worker_max_memory_per_child` ๋ ๋ฒ์งธ ๊ตฌ์ฑ์ ๋จ์ผ ์์ปค ํ๋ก์ธ์ค๊ฐ ์๋ก์ด ํ๋ก์ธ์ค๋ก ๊ต์ฒด๋๊ธฐ ์ ์ ์คํํ ์ ์๋ ์ต๋ ์ฃผ์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ดํฉ๋๋ค. ์ด๊ฒ์ ์ฌ์ค์ ์์
์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ ์ดํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ๋ ์ ํ์ด ์์ผ๋ฏ๋ก ํญ์ ์ด๋ฅผ ์ค์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ด๋ฌํ ๋ ๊ตฌ์ฑ์ ์กฐ์ ํจ์ผ๋ก์จ ์ต๋ ์์
์์ ๋๋ฌํ๊ฑฐ๋ ์ต๋ ์ฃผ์ ๋ฉ๋ชจ๋ฆฌ ์์ ๋๋ฌํ ๊ฒฝ์ฐ ์์ปค ํ๋ก์ธ์ค๋ฅผ ๋ฆฌ์ฌ์ดํดํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ ํํฉ๋๋ค. ์ด๋ฌํ ๊ตฌ์ฑ์ด ์๋ํ๋ ๊ฒ์ prefork ํ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ง ํด๋น๋ฉ๋๋ค. ๊ณต์ ๋ฌธ์์์ ์์ธํ ์์๋ณด์ญ์์ค.
Airflow์์ ์ด๋ฅผ ์ค์ ํ๋ ๊ฒ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. Airflow์ config_templates ํด๋์์ ๊ธฐ๋ณธ Celery ๊ตฌ์ฑ์ ์
๋ฐ์ดํธํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค
# config_templates/custom_celery.py
from airflow.config_templates.default_celery import DEFAULT_CELERY_CONFIG
CUSTOM_CELERY_CONFIG = DEFAULT_CELERY_CONFIG.copy()
CUSTOM_CELERY_CONFIG.update(
{
"worker_max_tasks_per_child": <int>,
"worker_max_memory_per_child": <int>,
}
)
๊ทธ๋ฐ ๋ค์ `values.yaml`์์ ์ด ์ฌ์ฉ์ ์ง์ ๊ตฌ์ฑ์ ๊ฐ๋ฆฌํค๋ฉด ๋ฉ๋๋ค.
airflow:
config:
celery:
worker_concurrency: <int>
celery_config_options: config_templates.custom_celery.CUSTOM_CELERY_CONFIG
์ด๋ฌํ ๊ตฌ์ฑ์ ์ฌ์ฉํ๋ ๊ฐ์ ์์
๋
ธ๋ ๊ตฌ์ฑ, ๋ฉ๋ชจ๋ฆฌ ์์ฒญ/์ ํ ์, concurrency ์์ค ๋ฐ ์์
์ ๋ฉ๋ชจ๋ฆฌ ์ง์ค๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ณ ์ค์ ์ ๋ง๊ฒ ์กฐ์ ํด์ผ ํฉ๋๋ค.
๋ ธ๋ ๋กํ ์ด์ ์ ๋๋นํ๊ธฐ
๋
ธ๋ ๋กํ
์ด์
์ผ๋ก Pod๊ฐ ์ข
๋ฃ๋ ๋ Pod๊ฐ ๋นํ์ฑํ๋์ด ์คํจํ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ฐ๋ณ์ ์ธ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ Worker Termination Grace Period ๊ตฌ์ฑ์ ์ค์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ด ๊ตฌ์ฑ์ ๋ฆด๋ฆฌ์ค ํ๋ก์ธ์ค๋ ๋
ธ๋ ๋กํ
์ด์
์ ์ํด ์ข
๋ฃ๋๊ธฐ ์ ์ celery worker๊ฐ ํด๋น ์๊ฐ ๋์ ๋๊ธฐํ๋๋ก ๋ง๋ญ๋๋ค. ์ด๊ฒ์ Airflow์ ์ฐจํธ values.yaml์์๋ ์ฝ๊ฒ ์ค์ ํ ์ ์์ต๋๋ค.
airflow:
workers:
terminationGracePeriodSeconds: <int>
๊ถ์ฅํ๋ ๋ฐฉ๋ฒ์ ๊ฐ์ฅ ๊ธด ์คํ ์์
์ ์์๋ ์๊ฐ์ 1.5๋ฐฐ๋ก ์ค์ ํ๋ ๊ฒ์
๋๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ์์
์ด ํด๋น ๊ธฐ๊ฐ ๋ด์ ์๋ฃ๋ ์ ์๊ณ ์์ปค๊ฐ ์ํํ๊ฒ ์ข
๋ฃ๋ ์ ์์ต๋๋ค.
4. ์๋ฆผ, ๊ฒฝ๊ณ ๋ฐ ๊ด์ธก์ฑ
์กฐ์ง ๋ด ์๋ฆผ ํตํฉ
์ฌ๋ฌ ํ์ด Airflow๋ฅผ ์ฌ์ฉํ๋ ํ๊ฒฝ์์ ์์
์ค์ธ ๊ฒฝ์ฐ, ์๋ฆผ ๋ฉ์ปค๋์ฆ์ ํตํฉํด์ผ ํฉ๋๋ค.
Airflow 2.6๋ถํฐ๋ Notifiers๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ฌ์ ๊ตฌ์ถ๋ ์๋ฆผ์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค! (Slack, SQS, Jira ๋ฑ)
BaseNotifier ํด๋์ค๋ฅผ ์ด์ฉํ๋ฉด ์ฌ์ฉ์ ์ ์ Notifier๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
์ฌ์ฉ์ ์ง์ ์๋ฆผ๋ ํ
ํ๋ฆฟํ๋์ด ํ์ด Slack์์ ์ ๋ณด ๋ฉ์์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํด ํ์ค ํ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ ๋ค๋ฅธ ์ฅ์ ์ ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋ณ ํ์ด ๊ฐ๋ณ ์๋ฆผ ๋์์ ๋น๋ฐ ๊ด๋ฆฌ์ ๋ํด ๊ฑฑ์ ํ ํ์๊ฐ ์๋ค๋ ๊ฒ์
๋๋ค.
์คํจ์ ๋ํ ์ต์ด์ ์๋ฆผ
๊ณ ๊ฐ์ฉ์ฑ์ ๊ณ ๋ คํด์ ๊ตฌํํ๋๋ผ๋ Airflow๋ ์ฌ๋ฌ ์ด์ ๋ก ์ฌ์ ํ ์คํจํ ์ ์์ต๋๋ค. ๊ทธ๋์ ์ธํ๋ผ ์์ค์ ๊ด์ธก์ฑ, ๋ฉํธ๋ฆญ ๋ฐ ๊ฒฝ๊ณ ๊ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
Kubernetes์์ ์คํ ์ค์ผ ๋, ๊ด์ฌ ์๋ ๊ฐ ์ด๋ฒคํธ์ ๋ํ PrometheusRule์ ์ค์ ํ์ฌ ์ํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ค์ผ์ค๋ฌ ๋
ธ๋์ ์ํ, ์ฌ์ฉ ๊ฐ๋ฅํ ์์ปค ๋
ธ๋์ ์ ๋๋ ์ค์ผ์ค๋ฌ ๋ฃจํ ์๊ฐ๊ณผ ๊ฐ์ ํน์ Airflow ๋ฉํธ๋ฆญ์ ๋ชจ๋ํฐ๋งํ ์ ์์ต๋๋ค. ๋ํ AlertManager๋ฅผ ์คํํจ์ผ๋ก์จ ์ฌ๋ฌ ๋์์ ๋ํ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ์์ํฌ ์ ์์ต๋๋ค(Slack, PagerDuty, Opsgenie ๋ฑ).
ํ๊ฒฝ์ ๊ด์ธก์ฑ์ ํฅ์์ํค๊ธฐ ์ํด Airflow ๋ฉํธ๋ฆญ์ ํ์ฉํ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์
๋๋ค. ํ์ฌ Airflow๋ `StatsD`์ `OpenTelemetry`๋ก ๋ฉํธ๋ฆญ์ ๋ณด๋ด๋ ๊ฒ์ ์ง์ํฉ๋๋ค. ํ์๊ฐ ์ ์๋ณด๋ค ์ฐ์ ๋๋๋ฐ, `OpenTelemetry`๋ ๋ก๊ทธ ๋ฐ ํธ๋ ์ด์ค๋ฅผ ์ง์ํ๋ ๋ ์๋ฒฝํ ํ๋ ์์ํฌ์ด๊ธฐ ๋๋ฌธ์
๋๋ค.
๋ํ, ์ด๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด Kubernetes์์ OTEL Collector ๋ฐฐํฌ๋ฅผ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค(๊ณต์ helm ์ฐจํธ ์ฐธ๊ณ ). ๊ณต์ Airflow ์ฐจํธ๋ OTEL Collector๋ฅผ ์ ๊ณตํ์ง ์์ต๋๋ค.
ํ์ค ๋ฉํธ๋ฆญ์ ์ฌ์ฉํ๋ฉด ์๋ฆผ์ ํ์ง์ ํฅ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋๊ธฐ ์ค์ธ ์์
์ ์ด ์๋ฅผ ์ฌ์ฉํ์ฌ ๋๊ธฐ์ด์ด ํน์ ์๊ฐ ๋์ ๋๋ฌด ๋ง์ด ์ฆ๊ฐํ ๋ ํธ๋ฆฌ๊ฑฐํ ๊ฒฝ๊ณ ๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด SLA ์๊ฐ๋ณด๋ค ๊ธด ๋๊ธฐ์ด์ ์ํ์ง ์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ๋ชจ๋ํฐ๋งํ๋ ๋ค๋ฅธ ์ ์ฉํ ๋ฉํธ๋ฆญ์๋ DAG ๊ตฌ๋ฌธ ๋ถ์ ์๊ฐ ๋ฐ ์ค์ผ์ค๋ฌ ๋ฃจํ ์๊ฐ์ด ํฌํจ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด Airflow์ ํต์ฌ์ ์ํฅ์ ๋ฏธ์น๊ณ ์ ์ฒด ์์ฉ ํ๋ก๊ทธ๋จ์ ๋๋ฆฌ๊ฒ ๋ง๋๋ ๋ฌธ์ ๋ฅผ ๋น ๋ฅด๊ฒ ์๋ณํ ์ ์์ต๋๋ค.
Airflow์ ๋ฉํ๋ฐ์ดํฐ ๊ด๋ฆฌํ๊ธฐ
๋ฉํ๋ฐ์ดํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ฑ๊ณต์ ์ธ Airflow ๊ตฌํ์ ์ค์ํ ๋ถ๋ถ์ผ๋ก, ์ฑ๋ฅ์ ์ ํ์ํค๊ฑฐ๋ Airflow๋ฅผ ์ค๋จ์ํฌ ์ ์์ต๋๋ค.
์์์ ์ธ๊ธํ Airflow ๋
ธ๋ ๋ฐ ์ฑ๋ฅ ๋ฉํธ๋ฆญ์ ๋ชจ๋ํฐ๋ง ์ธ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ ๋ฉํธ๋ฆญ์ ๋ชจ๋ํฐ๋งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. PostgreSQL ๋๋ MySQL์ ์ฌ์ฉํ๊ณ ์๋์ง์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ง๋ง(์ ๋ฐ SQLite๋ฅผ ์ฌ์ฉํ์ง ๋ง์ญ์์ค ๐), ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฉํธ๋ฆญ์ CPU ์ฌ์ฉ๋, ์ฌ์ฉ ๊ฐ๋ฅํ ์ ์ฅ์, ์ฐ๊ฒฐ ์ ๋ฑ์
๋๋ค.
๋ ๋ค๋ฅธ ์ข์ ์ค์ฒ ๋ฐฉ๋ฒ์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ค๋๋๊ณ ์ฌ์ฉ๋์ง ์๋ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ๋ฆฌํ๋ ๊ฒ์
๋๋ค. ์ด์๋ ์์
, `dag_run` , `task_instance`, `log`, `xcom, sla_miss`, `dags`, `task_reschedule`, `task_fail`๋ฑ๊ณผ ๊ฐ์ ํ
์ด๋ธ์ด ํฌํจ๋ ์ ์์ต๋๋ค. ์ด ๋ชจ๋ ๋ฉํ๋ฐ์ดํฐ๋ Airflow ๋ด์์ ๊ณ์ํด์ ์์ด๋ฉฐ, ์์
์ํ๋ฅผ ๊ฒ์ํ๋ ํ๊ท ์ฟผ๋ฆฌ๊ฐ ๋ ๊ธธ์ด์ง ์ ์์ต๋๋ค. Airflow๊ฐ ๋จ์ํ ๋ก๋๋๊ณ ํ์ํ๋ ๋ฐ ๋๋ฆฐ ๊ฒ์ผ๋ก ๋๊ปด์ง ์ ์ด ์๋ค๋ฉด ๋ฉํ๋ฐ์ดํฐ๊ฐ ์์ด๋ ๊ฒ์ด ๊ทธ ์์ธ์ผ ์ ์์ต๋๋ค.
Airflow์๋ ๋ฉํ๋ฐ์ดํฐ ์ ๋ฆฌ๋ฅผ ์ํ ๋ค์ดํฐ๋ธ ๋ช
๋ น์ธ airflow db clean์ด ์์ผ๋ฉฐ, ์ถ๊ฐ์ ์ธ ์ต์
์ ์ฌ๊ธฐ๋ฅผ ํ์ธํ์ธ์.
Kubernetes๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์ด๋ฅผ ์ํ CronJob์ Airflow ์ฐจํธ์ ์ถ๊ฐ ๋ฆฌ์์ค๋ก ์ค์ ํ์ฌ ์ง์ ํ ํ๋๊ทธ์ ํจ๊ป ์ฃผ๊ธฐ์ ์ผ๋ก airflow db clean ๋ช
๋ น์ ์คํํ๋ ๊ฒ์ด ์ข์ ๋ฐฉ๋ฒ์
๋๋ค. ์ผ์ผ ๋๋ ์ฃผ๊ฐ์ผ๋ก ์คํํด์ผ ํ ์ ์์ต๋๋ค.