Overview

전사 플랫폼에 적용할 모니터링 프로젝트로 다양한 metric, log, trace, apm을 지원하기 위해 진행하는 프로젝트이다. 아래 PDF는 민감 정보를 제외한 프로젝트 기획서로서 유료 솔류션 및 예상 과금 서베이로 서술한다.

Observability Report (No Template).pdf

Architecture

image.png

Extraction

로그를 수집하는데 사용하는 framework는 fluent-bit으로 fluent-d에서 훨씬 작은 리소스로 k8s 환경에 최적화 된 오픈 소스 수집 프레임워크입니다.. K8S에서 Fluent-bit는 Daemonset으로 동작하는 것을 권장하고 있기 때문에 마찬가지로 Daemonset으로 구성 후에 label을 원하는 pod, node, namespace에 붙여 해당 pod이 배포되거나 하면 자동으로 읽을 수 있도록 구성할 것 입니다.

수집한 로그는 원래라면 Flink 및 Kafka로 전달하여 전처리 후에 Loki로 전달하여 실시간 모니터링을 하는 편이지만, Dev, Audit, Prod 등 모든 VPC에서 확인하고자 하는 것이 실시간 보다 중요하기 때문에 S3(Object Storage)로 전달하여 로그를 한번에 저장 후, 읽는 방법으로 진행하고자 합니다.

편의상 S3로 ObjectStorage 말하고자 한다.(동일한 라이브러리 로직 사용하기 때문)

테스트로 저장하는 경로는 다음과 같다. aidt-bucket버킷에 k8s-log 디렉토리(임시) /../env=dev/service_name/year=2025/month=07/day=15/hour=13/minute=29/second=30/{uuid}.json 형태로 저장하고 있습니다.

image.png

image.png

해당 경로는 파티셔닝 프루닝(Partition Pruning)을 적용한 것으로 대규모 분산 저장소나 분산 SQL 엔진에서, 데이터를 파티션 단위로 나누어 저장·관리할 때, 쿼리 실행 시 읽어야 할 파티션만 선택적으로 접근함으로써 I/O·CPU·메모리 자원을 획기적으로 절약하는 최적화 기법입니다.

이렇게 저장 된 log files은 Flink에서 Filesystem source로서 읽히게 됩니다.

Transformation

아키텍처에서 데이터 가공을 위한 프레임워크는 Flink입니다. Flink는 JVM 위에서 동작하는 오픈 소스로서 Spark, Kafka Stream과 비슷한 Streaming processor 역할을 할 수 있습니다.

Streaming process에는 데이터 변환 단계에서 Elastic Logstash와 같은 역할을 할 수 있습니다. 해당 아키텍처에서는 S3에 저장된 로그 파일을 Source(input)으로 받아 pre-processing 후에 Sink(output)으로 Kafka에 전달하는 역할을 하고 있습니다.

image.png

단순히 Log Observability에서 변환 뿐만 아니라, Airflow와 연동되어 데이터 파이프라인으로서 배치를 수행하는 역할도 또한 합니다. (현재 데이터팀 요청 파이프라인 구축에 이용)

Temporary Storage