← 목록

팰월드 서버 새벽 재시작에 예고 방송 붙이기

#palworld#gameserver#automation#homeserver

팰월드 전용서버는 메모리가 샌다. 이건 내가 고칠 수 있는게 아니고 그냥 게임이 그렇다. 놔두면 며칠만에 몇 기가씩 부풀어서 컨테이너에 11GB 캡을 걸어놨는데, 캡은 어디까지나 보험이고 결국 주기적으로 재시작해주는게 답이다.

내장 기능의 함정

도커 이미지(thijsvanloef/palworld-server-docker)에 자동 재시작 기능이 있어서 매일 05:00으로 걸어놨었다. 옵션 중에 "접속자 있으면 건너뛰기"가 있고 당연히 켜놨다. 친절한 기능처럼 보이는데 생각해보면 이상하다. 밤새 누가 접속해 있으면 재시작이 계속 밀린다. 메모리 누수 잡으려고 만든 재시작이 정작 서버가 제일 부풀어있을 때(=사람들이 밤새 달릴 때) 안 도는 것임

접속자가 있어도 재시작은 해야 한다. 대신 예고를 하면 된다.

예고 방송

팰월드 서버엔 공식 REST API가 있다(8212, basic auth). announce 엔드포인트로 인게임 공지를 쏠 수 있다. RCON에도 broadcast가 있긴 한데 메시지에 공백 들어가면 잘리는 유서깊은 버그가 있어서 REST쪽이 낫다.

Discord 공지는 웹훅 하나면 끝. 마침 Alertmanager 알림용으로 만들어둔 웹훅이 있어서 재사용했다.

크론이 05:55에 스크립트를 돌리고, 흐름은 이렇다.

  • 접속자 확인 (REST /v1/api/players)
  • 있으면: 인게임+Discord로 5분 전 예고 → 3분 전 → 1분 전
  • 없으면: 예고 생략하고 바로
  • 월드 저장(/v1/api/save) 치고 docker restart
  • 10분 안에 API가 응답 안 하면 Discord로 경보

재시작 완료 메시지는 접속자가 있었을 때만 보낸다. 매일 아침 6시마다 봇이 채널에 도장 찍는건 그거대로 공해라서.

모니터링이 운다

이대로 두면 매일 아침 6시에 PalworldServerDown 알림이 울게 된다. 재시작하는 몇 분 동안 palworld_up이 0이 되니까. 의도한 다운이랑 장애를 구분 못하는건 모니터링의 고질병인데, 제일 간단한 해법은 시간 창으로 피하는 것이다.

time_intervals:
  - name: 'palworld-restart-window'
    time_intervals:
      - times:
          - start_time: '05:55'
            end_time: '06:20'
        location: 'Asia/Seoul'

라우트에서 이 알림에만 mute_time_intervals를 걸어두면 새벽 재시작 창에서는 조용하고, 그 외 시간의 진짜 장애는 정상적으로 운다.

마치며

이제 새벽 6시엔 예고 방송 나가고 서버가 알아서 환기된다. 밤샘 유저들은... 5분이면 도망갈 시간 충분함

← 목록으로
오늘 0·전체 0