본문 바로가기

인프라,데이터/Fluentd, Fluent Bit

argocd 로그 모니터링

argocd 에서 애플리케이션 배포시 생기는 로그를 수집했어야 했는데, 

파싱이나 설정 부분에서 좀 헤맸던 면이 있어 기록으로 남긴다..!

 

Fluent Bit conf

    [INPUT]
        Name              tail
        Tag               syslog.*
        Path              /var/log/containers/*.log
        storage.type      filesystem
        Parser            docker
        DB                /var/log/sys_kube.db
        Refresh_Interval  10
        Path_Key          path

/var/log/containers/~ 하위에 쌓이는 모든 로그를 syslog란 태그로 수집한다. 

 

    [FILTER]
        Name            rewrite_tag
        Match           syslog.*
        Rule            $kubernetes['namespace_name'] ^(argocd)$ argocd.$TAG true

namespace가 argocd인 경우는 tag를 argocd로 시작하도록 변경한다. 

 

    [FILTER]
        Name grep
        Match argocd.*
        Regex log /.*필터를 원하는 문자열.*/

argocd 태그의 데이터 중 "필터를 원하는 문자열"만 남도록 grep 필터를 사용하여 필터링한다. 

 

    [FILTER]
        Name            parser
        Match           argocd.*
        Key_Name        log
        Parser          argocd
        Reserve_Data    True

parser 필터를 사용하는데, 필터의 내용은 아래와 같다.

    [PARSER]
        Name    argocd
        Format  regex
        Regex   time=\"(?<time>[0-9-]+T[0-9:Z]+)\" level\=(?<level>\S+) msg\=\"(?<msg>.*)\" application\=(?<application>\S+) dest-namespace\=(?<dest_namespace>.*) dest-server\=\"(?<dest_server>.*)\" reason\=(?<reason>.*) type\=(?<type>.*)

argocd의 로그가 제각각이라 꼭 이 포맷은 아니니 주의.

또 주의해야 할 점은, 그룹에 <dest-folder> 와 같이 dash가 들어가면 제대로 fluent bit가 작동이 안 된다.

fluent bit invalid regex pattern 이라는 오류가 떠서 왜 안되나 계속 삽질했는데, 

<dest_folder>와 같이 - 를 _ 로 바꾸어주어야 한다.

 

    [OUTPUT]
        Name                         s3
        Match                        argocd.*
        bucket                       yourbucket
        region                       ap-northeast-2
        s3_key_format                /your/path/to/s3
        s3_key_format_tag_delimiters _.
        upload_timeout               1h

그리고 원하는 s3 버킷으로 내보낸다!