본문 바로가기

Fluent Bit

(7)
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)$ argoc..
Fluent Bit에 SQS Output 연결하기(feat. Golang) Fluent Bit에는 공식 SQS Output 플러그인이 없다. https://github.com/PayU/fluentBit-sqs-plugin GitHub - PayU/fluentBit-sqs-plugin: FluntBit custom output plugin which allows sending messages to AWS-SQS. FluntBit custom output plugin which allows sending messages to AWS-SQS. - GitHub - PayU/fluentBit-sqs-plugin: FluntBit custom output plugin which allows sending messages to AWS-SQS. github.com 하여 위의 플러그인을 이용한..
Fluent Bit의 버퍼링Buffering (번역) Fluent Bit의 공식 문서에서 버퍼링과 스토리지, 백프레셔에 관해 번역한 글입니다. 백프레셔 Fluent Bit의 목표는 중앙으로 로그를 모으고, 파싱하고, 필터링하고, 적재하는 것입니다. 이 과정에서 처리할 새로운 데이터를 받는데, 데이터를 빠르게 전송하지 못한다면 백프레셔backpressure를 마주하게 됩니다. 특정한 환경에서는 로그나 데이터가 목적지로 보낼 수 있는 여력보다 빠르게 유입됩니다. 흔한 케이스로는 큰 로그 파일을 읽어오고 네트워크를 통해 백엔드로 보내는 것이 있는데, 응답하기까지 시간이 걸리고, 이것은 서비스에서 큰 메모리 소모를 야기하는 백프레셔를 생성하게 됩니다. 버퍼링 Fluent Bit는 버퍼링으로 백프레셔와 일반적인 전송 실패 문제를 풀고자 합니다. 버퍼링은 데이터가 적..
Logstash는 로그를 왜 message라는 field로 저장할까? 요새 Fluent Bit를 써서 EKS 안의 애플리케이션 로그를 수집하고 Kinesis firehose를 버퍼로 사용한 후, 이를 Logstash에서 수집한 후 ES로 보내 Kibana에서 분석하는 환경을 구성 중이다. "log"=>"* 2022-02-16 12:38:44,245 [Timer-0] INFO |c.e.demo.SpringBootLoggerApplication: 12:38:44 ::: Hello World ::: 1"} 그 중에서 Fluent Bit는 로그 파일을 "log"라는 key에 저장해서, 기존 Logstash 설정을 사용하기 위해서는 "log" 를 "message"로 바꿔주어야 했다. { "message" => "Hello Logstash!" } 그럼 애초에 왜 Logstash는 "..
Kubernetes - Fluent Bit 로 사용자 로그 S3에 output 설정하기 부제 : 온갖 예외 케이스를 가정하여 사용자 로그의 S3 경로 잡기 1. Fluent Bit에서 S3으로 output 보내기 Fluent Bit 에서 S3 output을 쓰는 건 쉽다. [OUTPUT] Name s3 Match * bucket my-bucket region us-west-2 s3_key_format /$TAG[2]/$TAG[0]/%Y/%m/%d/$UUID.gz s3_key_format_tag_delimiters .- 이렇게 s3 output 설정을 넣어주고 butket과 key format을 지정해주면 된다. 나의 경우는 EKS 안의 애플리케이션에서 발생한 사용자 로그를 시스템 로그(var/log/containers/$podname~.log 식으로 저장되는 파드의 로그)와 분리하여 S3 ..
Fluent Bit Stream Processor 사용하여 데이터 특정 조건에 따라 다른 아웃풋으로 보내기 fluent-bit.conf: | [SERVICE] Flush 5 Log_Level info Daemon off Parsers_File parsers.conf Streams_File streams.conf HTTP_Server On HTTP_Listen 0.0.0.0 HTTP_Port 2020 먼저 [SERVICE]에 Streams_File 을 기재해줍니다. streams.conf: | [STREAM_TASK] Name check_one Exec CREATE STREAM three_check WITH (tag='userlog.*') AS SELECT * FROM TAG:'userlog.*' WHERE cluster_name = " " and pod_namespace = " " and pod_name = ..
Fluent Bit에서 특정 경로의 로그 파일 받아와 쿠버네티스 메타데이터 추가하기 한줄 미리보기 : 제목처럼 안 됩니다. 이거 되게 하려고 몇 시간을 허비했는지..... 저같이 '이거 설정 좀만 바꾸면 되는 거 아냐?' 하고 매달리실 분들을 위해 씁니다... 환경 : EKS (쿠버네티스 버전 1.8) fluent bit : latest fluent bit의 tail의 인풋 설정은 다음과 같은데, [INPUT] Name tail Tag kube.* Path /var/log/containers/*.log 여기서 Path를 /var/log/containers/custom-*.log 와 같이 조금이라도 바꾸면... 쿠버네티스 메타정보가 추가되지 않습니다. 시스템 로그(var/log/containers/~ 하위의 podname별로 생기는 {podname}_{namespace}_{containe..