[c++] C++ 웹 서버의 로깅 및 모니터링 기능

C++로 웹 서버를 개발할 때, 로깅(log) 및 모니터링(monitoring) 기능은 매우 중요합니다. 이 기능들을 통해 서버의 동작을 추적하고 성능을 확인할 수 있습니다. 이번 글에서는 C++로 간단한 로깅 및 모니터링 기능을 구현하는 방법에 대해 알아보겠습니다.

1. 로깅(Logging)

로깅은 서버의 동작과 관련된 정보를 기록하는 것을 말합니다. 일반적으로 날짜, 시간, 요청 내용, 응답 코드 등이 로그에 포함됩니다. C++에서는 std::ofstream를 사용하여 간단하게 로그를 기록할 수 있습니다.

#include <iostream>
#include <fstream>

void log(const std::string& message) {
  std::ofstream logfile("server.log", std::ios_base::app);
  if (logfile.is_open()) {
    logfile << message << std::endl;
    logfile.close();
  } else {
    std::cerr << "Failed to open the log file" << std::endl;
  }
}

int main() {
  log("Server started");
  // 웹 서버 동작 로직
  log("Server stopped");
  return 0;
}

위 코드에서 log 함수는 server.log 파일에 메시지를 기록합니다. 이를 통해 서버의 시작, 정지, 요청 처리 등의 이벤트를 기록할 수 있습니다.

2. 모니터링(Monitoring)

서버의 성능 및 상태를 모니터링하는 것은 중요합니다. C++에서는 간단한 프로세스 정보를 확인할 수 있습니다. 예를 들어, 현재 실행 중인 프로세스의 메모리 사용량 및 CPU 사용량을 확인하는 기능을 추가할 수 있습니다.

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>

void monitor() {
  std::ifstream stat_file("/proc/self/stat");
  if (stat_file.is_open()) {
    std::string stat_line;
    std::getline(stat_file, stat_line);
    std::istringstream stat_stream(stat_line);
    std::string token;
    for (int i = 0; i < 17; i++) {
      stat_stream >> token;
    }
    std::cout << "Memory usage: " << token << " bytes" << std::endl;
  } else {
    std::cerr << "Failed to open the stat file" << std::endl;
  }
}

int main() {
  monitor();
  // 웹 서버 동작 로직
  return 0;
}

위 코드에서 monitor 함수는 /proc/self/stat 파일을 읽어와 현재 프로세스의 메모리 사용량을 표시합니다. 이를 통해 서버의 상태를 주기적으로 확인할 수 있습니다.

로깅 및 모니터링 기능은 웹 서버의 안정성 및 성능 향상에 중요한 역할을 합니다. 위의 예시를 활용하여 실제 웹 서버에 적용해 보시기 바랍니다.

참고 자료