오픈소스 기여 : 경량 시스템 모니터링 오픈소스 [beszel]

2025. 6. 26. 10:51· 개발/오픈소스
목차
  1. 💡 어떤 프로젝트?
  2. ‼️어떤 문제?
  3. 🛠️ 해결 방법

최근에 회사 일이 너무 바빠서 진짜 오랜만에 글을 작성하네요~~ 앞으로는 꾸준히 작성해 보도록 노력하겠습니다.


💡 어떤 프로젝트?

내가 이번에 기여에 참여한 프로젝트 beszel이라는 경랑 시스템 모니터링 툴이다!
가볍고 직관적인 UI로 시스템 상태를 실시간으로 보여주는 도구인데, 특히 소규모 서버 환경에서 꽤 유용하다.

SMTP 프로토콜도 지원해서 서버의 상태별로 이메일을 전송해 줄 수 있다.


‼️어떤 문제?

[Bug]: Windows agent installer fails on Server 2022 core

회사에서 경량 시스템 모니터링 툴을 도입하려던 중 beszel이라는 오픈소스를 알게 되었다. 이 프로젝트에는 시스템에 모니터링 에이전트를 설치하는 beszel-agent가 포함되어 있으며, Windows 환경에서는 이 에이전트를 서비스로 등록해서 실행할 수 있도록 파워셸 설치 스크립트를 제공하고 있다.

하지만 Windows Server Core 환경에 beszel-agent를 설치하려는 과정에서 문제가 발생했다.
Windows Server Core는 winget을 사용할 수 없기 때문에, 설치 스크립트 내에서 scoop 방식으로 설치하게 된다. 그런데 scoop을 이용한 설치 방식에서는 nssm을 통해 서비스를 등록할 때, Application 경로와 AppDirectory 경로가 비정상적으로 오염되는 문제가 발생했다.

 

문제가 된 파워셸 코드 일부는 아래와 같다:

Github : installer-agent.ps1

function Install-BeszelAgentWithScoop {
    Write-Host "Adding beszel bucket..."
    scoop bucket add beszel https://github.com/henrygd/beszel-scoops | Out-Null

    Write-Host "Installing / updating beszel-agent..."
    scoop install beszel-agent          # 출력이 그대로 남아 있음

    if (-not (Test-CommandExists "beszel-agent")) {
        throw "Failed to install beszel-agent"
    }

    return $(Join-Path -Path $(scoop prefix beszel-agent) -ChildPath "beszel-agent.exe")
}

이 함수에서는 scoop install beszel-agent 명령어의 출력 결과를 따로 버리지 않고 그대로 둔 채, 이후 Join-Path를 통해 반환되는 값이 함수의 반환값이 된다.

문제는 PowerShell 함수에서 출력이 반환값에 함께 포함된다는 점이다. 즉, 설치 메시지와 실행 경로가 함께 섞여 반환되고, 이 값이 이후 nssm install 명령의 실행 경로로 그대로 전달된다. 이로 인해, 서비스 등록 시 Application과 AppDirectory 값에 불필요한 메시지가 포함되어 실행이 실패하거나 예기치 않은 동작을 하게 된다.

결국, 스크립트에서 출력 제어를 명확히 하지 않으면 Windows Server Core 환경에서 서비스 등록이 깨질 수 있는 문제가 있었다.

 

🛠️ 해결 방법

해결 방법은 생각보다 단순했다. 예전에도 PowerShell 자동화 스크립트를 작성하면서 비슷한 문제를 겪은 적이 있었기에, 익숙한 방식으로 접근했다.

문제의 원인은 scoop install beszel-agent 명령의 출력 결과가 그대로 함수의 반환값에 포함되면서, 이후 NSSM 서비스 등록에 사용되는 경로가 오염되는 것이었다. 따라서 해결책은 해당 명령의 출력을 명시적으로 버리는 것이다.

PowerShell에서는 명령의 출력을 버릴 때 Out-Null cmdlet을 사용한다.
따라서 다음과 같이 수정하면 된다:

scoop install beszel-agent | Out-Null

이렇게 하면 scoop 명령의 출력은 더 이상 반환값에 영향을 주지 않게 되고, 이후 NSSM 등록 시 사용하는 $AgentPath 변수에는 오직 실행 파일 경로만 담기게 된다.

 

이제 아래 NSSM 설치 명령도 정상적으로 작동한다:

& $nssmCommand install beszel-agent $AgentPath

이 변경을 통해 Windows Server Core 환경에서도 scoop 방식으로 beszel-agent를 정상적으로 설치하고 등록할 수 있게 되었다.

PR 링크: https://github.com/henrygd/beszel/pull/918

  1. 💡 어떤 프로젝트?
  2. ‼️어떤 문제?
  3. 🛠️ 해결 방법
SUSEOL
SUSEOL
SUSEOL
SSU의 코딩블로그 :)
SUSEOL
전체
오늘
어제
  • 분류 전체보기 (17)
    • 개발 (16)
      • DevOps (4)
      • Backend (0)
      • Frontend (1)
      • RDBMS (2)
      • WEB (6)
      • 디자인 패턴 (2)
      • 오픈소스 (1)
      • 사이드 프로젝트 (0)
    • 잡잡잡잡설 (1)
    • 회사분석 (0)
    • 한줄메모 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 보안
  • oAuth
  • SSL
  • API 보안
  • 디자인 패턴
  • 자동배포
  • XSS
  • 추상
  • 지속적인 통합
  • Jenkins
  • ci/cd
  • RDBMS
  • Authentication
  • Authorization
  • restapi
  • Factory Pattern
  • transaction
  • 팩토리 패턴
  • TLS
  • OAuth2.0

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
SUSEOL
오픈소스 기여 : 경량 시스템 모니터링 오픈소스 [beszel]
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.