Airflow (워크플로 관리 플랫폼)를 프로젝트에 사용하고 있다. 3대 서버에 Airflow를 구성 했고(1번 2번 3번 서버로 지칭), 각 서버에 로컬로 Airflow Task log 가 쌓인다. Airflow Webserver UI에서 log 를 통합하여 볼 수 있도록 MinIO (S3 호환 Object Storage)에 연결하는 방법을 작성한다.
(바꿔 말하면, 3번 로컬 서버에 작성된 Airflow log를 1번 또는 2번 Airflow Webserver(UI)에서도 볼 수 있도록 MinIO에 저장한다.)
MinIO에서 Bucket 을 생성했고, (airflow-logs) User('test') 생성 및 권한도 부여되었다. (지난번 MinIO 초기 구성 포스팅 참조)
사전 작업 Airflow S3 Connection API 라이브러리 설치 (현재 Airflow 버전에 맞춰 설치한다. Airflow 2.4.2 Version)
$ pip install apache-airflow[amazon]==2.4.2
$ pip list | grep amazon
apache-airflow-providers-amazon 7.2.0
Airflow Connection 추가
Airflow Webserver 접속 -> Admin -> Connections -> + 버튼 클릭 (Add a new record)
Connection Id : minio_test1
Connection Type : Amazono S3 선택
Extra : {"host": "http://10.xx.xx.xx:9000/", "aws_access_key_id": "test", "aws_secret_access_key": "test1234"}
참고로, apache-airflow-providers-amazon의 버전이 5.0.0 이후부터 Connection Type 'Amazon S3' 가 없어졌다.
대신 'Amazon Web Services'로 사용이 가능하다.(Extra 설정 부분 변경 : host -> endpoint_url 로 변경 필수)
Connection Id : minio_test1
Connection Type : Amazon Web Services 선택
Extra : {"endpoint_url": "http://10.xx.xx.xx:9000/", "aws_access_key_id": "test", "aws_secret_access_key": "test1234"}
https://airflow.apache.org/docs/apache-airflow-providers-amazon/5.0.0/connections/aws.html
Airflow.cfg 설정
--아래 3개 부분만 설정하면 된다.
remote_logging = True
remote_log_conn_id = minio_test1
remote_base_log_folder = s3://airflow-logs
Airflow DAG 테스트
Airflow 재기동 후, DAG를 실행하여, MinIO에 aiflow task log 파일이(Objects) 쌓이는지 확인해 보면 된다.
또는 Airflow Webserver에서 task 클릭해서 log 출력에 아래와 같이 찍히면 정상이다.
test001 (**hostname 출력) *** Reading remote log from s3://airflow-logs/XX_DAG/...scheduled__2023-06-26T02:30:00+00:00_0_1.log |
여담으로 airflow.cfg 또는 airflow connection 설정은 정상인데, MinIO에 로깅이 안될 경우 MinIO Web Console에 Airflow에서 접속 설정한 ID/PASSWORD (aws_access_key_id": "test"/"aws_secret_access_key": "test1234")로 접속 테스트 수행해 보길 권장한다.