서문 이전 글에서 log forwarder에서 사용하는 config 파일을 작성하는 법에 대해 알아보았다. 이번 글에서는 도커로 log forwarder를 서비스하기 위한 dockerfile 작성에 대해서 알아보자. 도커파일만 다루기에 짧은 글이 될 것이다. 본문 Dockerfile : FROM fluent/fluentd:v1.14.6-debian-1.0 USER root //install git RUN apt-get update && apt-get install -y git //clone custom plugin RUN git clone https://github.com/SehyeonGil/fluent-plugin-split-array.git //install custom plugin RUN mkdir..
서문 이전 글에서 fluentd를 도입하게 된 발단부터 설계까지 알아보았다. 이번 글에서는 설계에 나온 부분 중, log forwarder 부분을 도입하는 부분에 대한 과정을 기록하였다. forwarder는 서버내에서 생성되는 로그 및 통계 데이터를 수집하여 1차 가공하고, log aggregator로 전송하는 역할을 한다. 본문 fluentd config forwarder를 구현하기 위하여, fluentd config 파일에 관한 간단한 설명을 먼저 진행한다. fluentd는 config 파일을 수정하여 동작을 제어한다. (nginx와 유사) config 파일은 plugin들의 집합으로 이루어져 있으며, 여기서 plugin은 크게 Input, Output 두가지 종류로 구분되고, 이를 보조하는 Filt..

서문 이전 글에서 특정 시간(배치작업 실행 중)에 DB Cpu 로드율이 100%에 도달하는 현상과 이에 대한 해결책으로 단일 row insert를 bulk insert로 변경하는 것에 효과에 대해 알아보았다. 이번 글엔 bulk insert를 어떻게 서비스 내에 구현할지에 대해 고민한 과정을 기록하였다. 발단 bulk insert를 구현하는 방법을 고민해보니, 크게 2가지로 정리되었다. redis와 같은 in-memory db에 올려놨다가, 특정 시간마다 batch 작업으로 db에 bulk 로 insert log file로 object storage(s3) 또는 서버 내 저장해두었다가, 특정 시간마다 마지막 insert된 row 이후 부터 bulk insert 위의 2가지 방법에서 한가지를 선택하려고 고..
서문 fluentd를 도입하게 되는 발단 및 원인에 관한 글. mysql bulk insert가 효율적인가에 대한 실험을 설명한 글이다. 이번 글에 fluentd에 관한 얘기는 안나온다. 발단 원할한 서비스를 위하여 정각, 30분단위 등 특정 시간마다 성능 최적화를 위한 raw 데이터 가공 등 여러 배치작업 처리하고 있다. 이러한 배치 작업을 처리하는 중 일시적으로 DB Cpu 로드율이 100%에 도달해버리는 너무 마음이 아픈 상황이 지속적으로 발생하였다. 고객수 및 고객사의 방문자 수가 점차 증가하면서 발생한 이슈여서 기쁜마음으로 해결을 위해 분석을 진행했다. 분석 배치작업을 위해 raw 데이터를 select하는 과정에서 테이블 락 상황에서 insert 되는 사용량 통계에 대한 데이터의 양이 상당하고,..
fluentd:v1.14.6-debian-1.0 도커 이미지를 기반으로 fluent-plugin-mysql을 사용하는 fluentd 컨테이너 구성 중, 로컬(wsl2)환경에서는 문제없던 도커파일이 개발서버에서는 아래와 같은 에러를 출력하면서, 빌드에 실패하였다. dpkg: dependency problems prevent configuration of libpaper-utils: libpaper-utils depends on libpaper1; however: Package libpaper1:amd64 is not configured yet. dpkg: error processing package libpaper-utils (--configure): dependency problems - leaving ..
반복문으로 uuid 생성 시, 같은값이 생성되어서 DB에 로그가 저장되지 않는 이슈가 발생하였다. uuid에 대한 설명은 링크의 글을 참조바란다. (https://velog.io/@ajongs/UUID-v1-vs-v4) node.js uuid 모듈로 아래와 같은 코드로 uuid를 생성 후, const uuidV1 = require("uuid").v1; for (const datum of data) { const uuid = uuidV1(); } 반복문으로 생성된 uuid를 비교한 결과 간혹 같은 값이 출력되는 경우가 발생하였다. uuid v1의 경우 타임스탬프 기준으로 생성되는데, 반복문의 빠른 실행으로 타임스탬프가 겹쳐 같은 uuid가 생성된 것으로 추측된다. uuid 생성 함수에 옵션으로 나노세컨드를..
통신사 이슈 이전글에서 설명한 것과 같이, Binary 파일을 바로 전송할 수 있게 SDK 수정을 마치고 실제 연동 테스트를 진행했다. 통신 3사 테스트 결과 KT, LG U+는 문제 없었으나 SKT만 통신사 API단에서 509 에러코드를 반환받고 전송에 실패했다. 특정 통신사만 이슈가 발생하고, 팝빌 SDK 가이드에서는 509 에러에 대한 안내가 없어 혼자 해결하기 힘들다고 판단했다. 즉시 팝빌 기술지원센터에 전화했고, 전송 실패한 이미지들의 제출을 요청 받았다. 이미지를 제출하고 10분정도 시간이 지나고 팝빌측에서 이미지가 jpeg가 아닌 webp라 SKT에서 처리하지 못한다는 답변을 받았다. 이미지 리사이징을 진행하는 코드 부분이 의심이 가서 확인하니, 실제로 jpeg 이미지를 webp로 바꾸고 다..
개요 고객사에서 문자전송 서비스 업체를 팝빌로 선정해서 SDK 연동이 필요했고, MMS 전송시 이미지를 담아 전송해야했다. 팝빌 SDK MMS 전송 함수 messageService.sendMMS(CorpNum, Sender, Receiver, ReceiverName, Subject, Contents, FilePaths, reserveDT, adsYN, requestNum, success, error) FilePaths 파라미터에 이미지 URL을 넣어야 한다는 API 문서를 보고 Object Storage에 저장된 이미지 External URL 이미지의 Data Uri 둘을 넣어서 API를 호출해 보았으나, 파일을 찾을 수 없다는 에러만 리턴받았다. 그래서 SDK를 열어봤더니, FilePaths를 입력받아..
- Total
- Today
- Yesterday
- tojson
- popbill
- reverse proxy
- bigint to number
- log
- log forwarder
- rewrite_tag_filter
- 혼자 공부하는 컴퓨터구조 + 운영체제
- fluentd-plugin-split-array
- nestjs
- 뉴스피드 시스템
- split_array
- forwarder
- default-libmysqlclient-dev
- fluentd
- uuid v1
- 대규모 시스템 설계 기초
- mms
- uuid 중복
- nginx cache
- fluent-plugin-s3
- nginx api cache
- reverse proxy cache
- 팝빌
- mms 연동
- rewrite-tag-filter
- log aggregator
- dockerfile
- fluent-plugin-mysql
- libpaper-utils
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |