FireLens/fluentbit 구성 검토 및 리노베이션

FireLens의 기사는 일단 완료되었지만, 신경이 쓰이는 부분을 개수합니다. 네 번째 기사입니다.
수정된 리소스를 V2 브랜치에 반영했습니다.
htps : // 기주 b. 코 m/안텐이 x/후레렌 s/t레에/v2

첫 번째 firelens를 사용한 로그 분할 및 모니터링 처리
두 번째 로컬에서 datag/S3로 데이터를 전송할 수 있는 docker 이미지 만들기
세 번째 Firelens에서 datag/S3로 데이터를 전송할 수 있는 docker 이미지 만들기

리노베이션 장소



datadog에서 S3에 업로드하지 않고 모든 fluentbit에서 S3에 업로드



도표에서는 LogB, LogC는 datag를 경유해, S3에 업로드된다고 가정했습니다만
로그 업로드 통신을 AWS 내에서 완결시키려고 했습니다.
그 때문에 datadog는 실시간 경고만 대응하고 그 후 로그를 파기합니다.

이전 구성(1회째)



이번에



웹 컨테이너의 로그 출력을 JSON 형식 → 문자열로 되돌리기



반드시 JSON으로 로그를 출력할 필요는 없고, 통상의 캐릭터 라인의 출력으로 되돌리기로 했습니다.
보다 느슨하게 결합으로 좋을까 생각합니다.

세 가지 유형의 로그를 fluentbit에서 수신하는 부분은 동일하지만 분류 방법을 검토합니다.
1. LogA(アクセスログ):stdoutのもの
2. LogB(エラーログ):stderrのもの
3. LogC(アプリケーションログ):stdout/stderrに関わらず、ログの先頭に「application」の識別子が付与されているもの

fluent-bit의 stream-processor 검토



stream-processor도 재설계합니다.
이 처리의 흐름은 보기 보기 어렵고, 흐름을 그림으로 했습니다. 대체로 아래와 같은 흐름이 된다고 인식하고 있습니다.


docker-compose에서 부여 태그 정의



이전 구성에서는 웹 컨테이너에서 표준 출력된 로그에 태그가 부여되지 않은 상태였습니다.
FireLens의 동작에 맞게 docker-compose 레벨에서 태그를 정의하고 로그 일치에 사용합니다.

docker-compose.yml
    logging:
      driver: fluentd    
      options:
        tag: "service-firelens-xxx"
        fluentd-address: "localhost:24224"
        fluentd-async-connect: "true"

로그 프로세스



이상의 처리의 결과, 로그가 아래와 같이 출력됩니다.
서식이 이런 느낌으로 바뀐다는 이미지만 잡아 주시면 좋겠습니다.

LogA

web-container-out
172.23.0.1 - - [16/Dec/2019:15:44:49 +0000] GET / HTTP/1.1 200 23578 - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 8956

fluentbit-continer-in
[0] xxx-firelens-xxx: [1576511089.000000000, {"source"=>"stdout", "log"=>"172.23.0.1 - - [16/Dec/2019:15:44:49 +0000] GET / HTTP/1.1 200 23578 - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 8956", "container_id"=>"a8b309523a4352f95164b67ab0b19cfd9104b76e51cab930a8ac7060d8707c41", "container_name"=>"/firelens_web_1"}]

fluentbit-continer-out
[0] access: [1576511781.000000000, {"source"=>"stdout", "message"=>"172.23.0.1 - - [16/Dec/2019:15:56:21 +0000] GET /?exception HTTP/1.1 200 - - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 2209", "container_id"=>"b6fcbeebca39a0b06822f7b16df1de80cd1245521392354fe48b2f915a421834", "container_name"=>"/firelens_web_1", "service"=>"access"}]

LogB

web-container-out
exception

fluentbit-continer-in
[0] xxx-firelens-xxx: [1576511122.000000000, {"container_id"=>"a8b309523a4352f95164b67ab0b19cfd9104b76e51cab930a8ac7060d8707c41", "container_name"=>"/firelens_web_1", "source"=>"stderr", "log"=>"exception"}]

fluentbit-continer-out
[0] error: [1576511781.000000000, {"source"=>"stderr", "message"=>"exception", "container_id"=>"b6fcbeebca39a0b06822f7b16df1de80cd1245521392354fe48b2f915a421834", "container_name"=>"/firelens_web_1", "service"=>"error"}]

LogC



web-container-out
application error error-text

fluentbit-continer-in
[1] xxx-firelens-xxx: [1576511198.000000000, {"log"=>"application error error-text", "container_id"=>"a8b309523a4352f95164b67ab0b19cfd9104b76e51cab930a8ac7060d8707c41", "container_name"=>"/firelens_web_1", "source"=>"stderr"}]

fluentbit-continer-out
[0] application: [1576511737.000000000, {"status"=>"error", "message"=>"error-text", "source"=>"stderr", "container_id"=>"b6fcbeebca39a0b06822f7b16df1de80cd1245521392354fe48b2f915a421834", "container_name"=>"/firelens_web_1", "service"=>"application"}]

기타 리노베이션



fluentbit의 S3 업로드 플러그인 버전 업그레이드와 함께
추가 수정을 했습니다.
S3 Prefix의 버그나, 복수 개소에의 S3의 업로드에 대응할 수 있는 것 같습니다.

요약



당초 이해가 부족했던 부분을 보완하고 반영할 수 있었습니다.
잘 부탁드립니다.

좋은 웹페이지 즐겨찾기