HotFoxy
불여우의 전직 이야기
게임 서버 개발자가 되어 보죠!
전체 방문자
오늘
어제
  • 분류 전체보기 (135)
    • 연구한 이야기 (26)
      • 깊게 공부해보기 (7)
      • 문제 해결 이야기 (12)
      • 맡은 업무 이야기 (6)
    • 전직 이야기 (0)
      • 1년이라는 시간 (5)
      • 프로카데미 이야기 (5)
    • 공부한 이야기 (87)
      • 알고리즘 (7)
      • 리눅스 (11)
      • 클라우드 (24)
      • 윈도우 OS (17)
      • 윈도우 소켓 프로그래밍 (11)
      • 네트워크 (16)
      • Docker & K8S (0)
      • 기타 (1)
    • 자격증 이야기 (12)
  • MSB : Mad Square's Brawl
  • GITHUB

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
HotFoxy

불여우의 전직 이야기

연구한 이야기/문제 해결 이야기

서버 로그가 누락되고 있어요..!

2024. 3. 31. 21:44

게임 서버가 출력하는 게임 로그가, 로그 DB로 일부만 들어가는.. 크리티컬한 문제가 발견되었다.

분명 이것저것 테스트까지 완료한 서비스들과 설정대로 패키징하여 퍼블리셔사에 전달드렸는데..!
퍼블리셔사에서 서버 로그가 누락되는 것 같다고 전달해주셨을 때 가슴이 철렁 했다.
이제 개발 환경을 구축중인, 신작 프로젝트라 그나마 다행이지..

한 번, 로그 관리 플로우를 되짚어 보자.

게임 서버는 로그를 로컬 파일에 한 라인씩 append해가며 작성해 나간다.
만약 로그 파일이 생성된지 5분이 넘었거나, 파일 크기가 5MB가 넘었다면, 새 파일을 열어 그곳에서 이어간다.

그리고, 쉘 스크립트를 기반으로 하는 서비스에 의해, 해당 로그 폴더에서 생성된지 6분 이상 지난 파일이 logstash 서버로 전송된다.
그리고, logstash는 들어온 로그 파일을 읽어 한줄한줄 tsv를 해석해 나가며, RDBMS에 bulk insert를 수행한다.

이 과정에서, logstash로 전송을 수행해주는 서비스는 전송 시에 파일 백업을 수행한다.
logstash또한, 처리가 완료된 파일은 gzip으로 압축하여 보관한다.

이 두 백업된 파일을 비교해 보니, logstash로 들어간 파일에 로그가 애초에 많이 누락된 상태였다.
아니, 이게 어디가 왜 문제가 생긴 걸까..하고 살펴본 결과,

https://hotfoxy.tistory.com/126

 

alpine리눅스와 stat

이번에, 마운트된 디렉터리 내 파일들이 만약 생성된지 5분 이상 지났다면 처리하는 프로그램을 만들게 되었다. 간단한 처리라, shell script (bash) 로 작성하여 alpine을 기반으로 하는 도커 이미지로

hotfoxy.tistory.com

저번 글에서 확인해봤다 싶이, stat 명령어를 사용하여 creation date 를 체크한다.
그리고 360초 이상 된 파일만 logstash로 cp, mv로 백업 시키는 서비스를 개발해서 사용중이다.

하지만, 모종의 이유..로 stat 명령어 수행 시 0 값이 나와서, 방금 막 생성된 로그 파일 또한 생성된지 오래된 것으로 인식하여,
logstash 폴더로 cp 시키고, 백업 폴더로 mv시킨다.

이 때, **백업 폴더로 mv** 시켰기 때문에, 게임 서버는 들고 있던 로그 파일 핸들에 계속하여 로그를 작성하면,
백업된 폴더로 이동된 로그파일에 append가 되어버리는 문제가 있는 구조였던 것이다.

애초에 리눅스, 유닉스에서는 file creation date 를 관리하지 않는다고 한다.
최근에서야 일부 파일시스템, 리눅스에서 제한적으로 file creation date 를 기록하고 관리한다.

따라서 file creation time을 못 가져오는 (nfs mount된 폴더의 파일들) 환경에서는,
last modified date 등을 사용하는 차선책을 안전 장치로 두어야 된다.

저작자표시

'연구한 이야기 > 문제 해결 이야기' 카테고리의 다른 글

MySQL "Not Supported" 에러와 handshake  (0) 2024.05.30
클라이언트 IP를 '잘' 가져오자  (0) 2024.04.21
alpine리눅스와 stat  (0) 2024.03.24
mysql connect 시에 timezone 관련해서 에러가 나요!  (2) 2024.03.02
Android Studio NDK breakpoint가 잡히지 않아요!  (0) 2024.03.02
    '연구한 이야기/문제 해결 이야기' 카테고리의 다른 글
    • MySQL "Not Supported" 에러와 handshake
    • 클라이언트 IP를 '잘' 가져오자
    • alpine리눅스와 stat
    • mysql connect 시에 timezone 관련해서 에러가 나요!
    HotFoxy
    HotFoxy
    1년 동안의 고군분투 전직 이야기! ..가 완료되어, 게임개발자로 살아남는 이야기!

    티스토리툴바