IT Info

Fluentd 활용하기 - CloudFlare Logpush 연동

로픽 2024. 11. 25. 20:57
300x250

Fluentd 활용하기 - CloudFlare Logpush 연동

 

Fluentd 활용 사례에 대해 간략하게 서술. (후술 기능은 모두 Chatgpt 로 구현)

 

 

[Architecture]

 -  1) CloudFlare Logpush  >>  2) Cloud 저장소 (S3, R2)  >>  3) Fluentd  >>  4) 로그 서버

    

    1) S3, R2 Logpush 기능으로 데이터 post

    2) 데이터 저장

    3-1) 저장소마다 다른 방식으로 데이터 get.

        > S3 : SQS

        > R2 : 일정 시간마다 데이터 get

    3-2) filter 를 이용한 데이터 파싱

    3-3) 파싱된 데이터를 output으로 로그 서버로 forward

    4) 로그 최종 저장

 

    # 로그 서버에 직접적으로 S3 Object에 대한 get 이 불가하여 위와 같이 구성.

    # Logstash 와 Fluentd 중 조금 더 가벼운 Fluentd 를 선택

 

 

[Point]

 - S3, R2 에 대한 Object get 이 모두 가능해야 함.

 - 데이터 실시간 get 이 가능해야 함.

 - Cloud 저장소에 대한 예외처리 가능해야 함. ( 초기 실행 시 Cloud 저장소 상태 검증 및 주기적인 상태 검증 )

 - 데이터 Parsing 후 로그 서버로 Forwarding 가능해야 함.

 

 

[기능 구현 - plugin]

 - S3 저장소 검증을 위해 기존 fluent S3 플러그인 Custom source 제작

 - R2 저장소 검증 및 Object get 을 위해 Custom source 제작

 - 원하는 포맷으로 데이터 파싱을 위해 Custom filter 제작

 - UDP Forwarder 제작을 위해 Custom Output 제작

 - 암호화된 payload에 대한 복호화를 위해 Cloudflare에서 제공하는 matched-data-cli 를 dll로 제작

 

>> 공인 CA로 서명한 SSL 인증서를 사용할 수 있는 경우, HTTP 를 통해 간단하게 구현 가능

>> CloudFlare의 HTTP 방식은 HTTPS 만 허용하며, 공인 CA로 서명된 SSL 인증서 아니면 HTTP 사용 불가

 

 

[테스트 환경]

 - OS : Windows 11

 - Fluentd Version : v5.0.4

 - Collect data : Cloudflare WAF

 

 

[Project Directory]

 >> 중요 디렉터리 : etc (fluentd.conf), key (Decryption key), plugin (Custom Plugins)

 

 

[Plugin Directory]

>> 기능 구현한 plugin 디렉토리 

     - dll : payalod 복호화를 위한 dll 저장

     - in , filter, out : 수집, 파싱, 전달을 담당하는 플러그인

 

# Cloudflare Workers ( AWS lambda 와 같은 기능) 를 통해 복호화를 수행 가능

# 하지만 Workers 도 사용한 만큼 과금되므로 matched-data-cli 를 dll로 데이터 수집 후 바로 복호화하도록 설정

 

# matched-data-cli : https://github.com/cloudflare/matched-data-cli

 

GitHub - cloudflare/matched-data-cli: Tool to interact with the firewall matched data feature.

Tool to interact with the firewall matched data feature. - cloudflare/matched-data-cli

github.com

 >> 위 페이지에 소스코드가 있으므로 dll로 제작하여 사용 가능

 

 

[실행 명령어]

 >> fluentd -p C:\opt\fluent\plugin

 

# gem 을 생성해서 설치하는게 가장 베스트

# 하지만 초기 소스코드 수정 단계에서 gem 을 사용하면 설치 > 빌드 > 삭제 과정을 반복하면서 테스트해야하므로 plugin 폴더를 변수로 넣는 방식으로 선택

 

 

[실행 결과]

 >> 비정상 S3, SQS, R2 에 대한 검증 수행, 검증에 실패하면 해당 Source는 Skip

 

 >> payload 복호화 및 주기적인 S3, SQS 검증

 

 >> R2 에 대한 데이터 get

 

 

[미 구현 기능]

 - S3, R2 저장소 추가 시 자동으로 source 추가. >> Fluentd를 재기동해야하는 이슈 조치.

 - 서버 재기동 시 자동 활성화를 위한 nssm 추가. >> Windows 환경에서 자동 서비스 재기동을 위함.

 

 

-- 간략한 기능 설명 완료 --

반응형