

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon GameLift Servers의 서버 메시지 로깅
<a name="logging-server-messages"></a>

Amazon GameLift Servers 서버의 사용자 지정 서버 메시지를 로그 파일로 캡처할 수 있습니다. 로깅을 구성하는 방법은 사용자 지정 서버 또는 Amazon GameLift Servers Realtime을 사용하는지 여부, 그리고 관리형 EC2 플릿을 사용하는지 또는 컨테이너 플릿을 사용하는지 여부에 따라 달라집니다(이 장의 해당 하위 섹션들 참조).

**Topics**
+ [로깅 차이: 관리형 EC2 플릿 대 컨테이너 플릿 비교](logging-server-messages-ec2-vs-containers.md)
+ [서버 메시지 로깅(사용자 지정 서버)](logging-server-messages-custom.md)

# 로깅 차이: 관리형 EC2 플릿 대 컨테이너 플릿 비교
<a name="logging-server-messages-ec2-vs-containers"></a>

로깅 동작은 관리형 EC2 플릿과 컨테이너 플릿 간에 크게 다릅니다. 이러한 차이를 이해하는 것은 EC2에서 컨테이너로 마이그레이션하거나 로깅 요구 사항에 적합한 플릿 유형을 선택할 때 매우 중요합니다.

## 주요 차이점 개요
<a name="logging-ec2-vs-containers-overview"></a>


| 기능 | 관리형 EC2 플릿 | 컨테이너 플릿 | 
| --- | --- | --- | 
| 로그 스토리지 | 게임 세션이 종료된 후 Amazon S3에 자동으로 업로드됨 | Amazon CloudWatch Logs 또는 사용자 지정 로깅 솔루션을 구성해야 함 | 
| GetGameSessionLogUrl API | 사용 가능 - 로그 다운로드를 위해 Amazon S3 URL 반환 | 사용할 수 없음 - Amazon S3에 로그가 자동으로 저장되지 않음 | 
| 로그 보존 | Amazon S3에서 14일(자동) | 로깅 구성에 따라 다름 | 
| 실시간 모니터링 | 제한 - 게임 세션이 종료된 후에만 로그 사용 가능 | Amazon CloudWatch Logs 통합으로 사용 가능 | 
| 설정 복잡성 | 자동 - 추가 구성 필요 없음 | 명시적 로깅 구성 필요 | 

## 관리형 EC2 플릿 로깅
<a name="logging-ec2-managed-behavior"></a>

관리형 EC2 플릿의 경우 Amazon GameLift Servers는 자동 로그 관리를 제공합니다.
+ **자동 업로드:** 게임 세션이 종료되면 서버 로그가 Amazon S3에 자동 업로드
+ **GetGameSessionLogUrl API:** 이 API를 사용하여 Amazon S3에서 로그를 다운로드하기 위해 미리 서명된 URL 검색
+ **14일 보존:** 로그는 자동 삭제 전 14일 동안 Amazon S3에 보존
+ **크기 제한:** 로그 파일에는 게임 세션당 크기 제한이 있음([Amazon GameLift Servers 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/gamelift.html) 참조)

자세한 내용은 [서버 메시지 로깅(사용자 지정 서버)](logging-server-messages-custom.md) 및 [GetGameSessionLogUrl API 참조](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_GetGameSessionLogUrl.html)를 참조하세요.

## 컨테이너 플릿 로깅
<a name="logging-container-behavior"></a>

컨테이너 플릿에서는 로깅을 명시적으로 구성해야 합니다.
+ **자동 Amazon S3 업로드 없음:** 로그가 Amazon S3에 자동으로 업로드되지 않음
+ **GetGameSessionLogUrl 사용할 수 없음:** 이 API는 컨테이너 플릿에서 작동하지 않음
+ **Amazon CloudWatch Logs 통합:** 중앙 집중식 로깅을 위해 Amazon CloudWatch Logs로 로그를 전송하도록 컨테이너 구성
+ **사용자 지정 로깅 솔루션:** 로그 드라이버 또는 사이드카 컨테이너를 사용하여 자체 로깅 인프라 구현
+ **실시간 액세스:** 적절한 구성을 사용하면 게임 세션 중에 로그에 실시간으로 액세스할 수 있음

자세한 컨테이너 로깅 옵션은 [컨테이너 플릿 작동 방식](https://docs.aws.amazon.com/gameliftservers/latest/developerguide/containers-howitworks.html)을 참조하세요.

## 마이그레이션 고려 사항
<a name="logging-migration-considerations"></a>

관리형 EC2에서 컨테이너 플릿으로 마이그레이션할 때는 다음 로깅 변경 사항을 고려하세요.
+ **로그 검색 코드 업데이트:** GetGameSessionLogUrl API 호출을 Amazon CloudWatch Logs 쿼리 또는 사용자 지정 로깅 솔루션으로 대체
+ **로그 보존 구성:** Amazon CloudWatch Logs 또는 로깅 시스템에서 적절한 보존 정책 설정
+ **실시간 모니터링 구현:** 실시간 로그 액세스를 활용하여 관찰성 향상
+ **로그 볼륨 및 비용 검토:** Amazon CloudWatch Logs 요금은 관리형 EC2 플릿에 포함된 Amazon S3 스토리지와 다름Use this API to retrieve a pre-signed URL for downloading logs from Amazon S3

## 권장 컨테이너 로깅 설정
<a name="logging-recommended-container-setup"></a>

컨테이너 플릿의 경우 다음을 권장합니다.

1. **Amazon CloudWatch Logs 통합:** `awslogs` 로그 드라이버를 사용하도록 컨테이너 정의 구성

1. **구조화된 로깅:** 더 나은 검색 및 분석을 위해 구조화된 로그 형식(JSON) 사용

1. **로그 수준:** 세부 정보 및 비용을 제어하는 적절한 로그 수준 구현

1. **보존 정책:** 규정 준수 및 디버깅 요구 사항에 따라 보존 기간 설정

# 서버 메시지 로깅(사용자 지정 서버)
<a name="logging-server-messages-custom"></a>

Amazon GameLift Servers 서버의 사용자 지정 서버 메시지를 로그 파일로 캡처할 수 있습니다.

**중요**  
게임 세션당 로그 파일 크기에는 제한이 있습니다(*AWS 일반 참조*에서 [Amazon GameLift Servers 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/gamelift.html) 참조). 게임 세션이 종료되면 Amazon GameLift Servers는 서버 로그를 Amazon Simple Storage Service(Amazon S3)에 업로드합니다. Amazon GameLift Servers는 제한을 초과하는 로그를 업로드하지 않습니다. 로그는 매우 빠르게 증가하여 크기 제한을 초과할 수 있습니다. 로그를 모니터링하고 로그 출력을 필요한 메시지로만 제한해야 합니다.

## 사용자 지정 서버의 로깅 구성
<a name="configuring-logging-for-custom-servers"></a>

Amazon GameLift Servers 사용자 지정 서버를 사용하면 서버 프로세스 구성의 일부로 구성하는 로깅을 수행할 자체 코드를 작성합니다. Amazon GameLift Servers는 로깅 구성을 사용하여 각 게임 세션이 끝날 때 S3에 업로드해야 하는 파일을 식별합니다.

다음 지침은 간소화된 코드 예제를 사용하여 로깅을 구성하는 방법을 보여줍니다.

------
#### [ C\$1\$1 ]

**로깅을 구성하려면(C\$1\$1)**

1. 게임 서버 로그 파일의 디렉터리 경로인 문자열 벡터를 생성합니다.

   ```
   std::string serverLog("serverOut.log");        // Example server log file
   std::vector<std::string> logPaths;
   logPaths.push_back(serverLog);
   ```

1. 벡터를 [ProcessParameters](integration-server-sdk-cpp-ref-datatypes.md#integration-server-sdk-cpp-ref-dataypes-process) 객체의 [LogParameters](integration-server-sdk-cpp-ref-datatypes.md#integration-server-sdk-cpp-ref-dataypes-log)로 제공합니다.

   ```
   Aws::GameLift::Server::ProcessParameters processReadyParameter = Aws::GameLift::Server::ProcessParameters(
       std::bind(&Server::onStartGameSession, this, std::placeholders::_1),
       std::bind(&Server::onProcessTerminate, this),
       std::bind(&Server::OnHealthCheck, this),
       std::bind(&Server::OnUpdateGameSession, this),
       listenPort,
       Aws::GameLift::Server::LogParameters(logPaths));
   ```

1. [ProcessReady()](integration-server-sdk-cpp-ref-actions.md#integration-server-sdk-cpp-ref-processready)를 호출할 때 [ProcessParameters](integration-server-sdk-cpp-ref-datatypes.md#integration-server-sdk-cpp-ref-dataypes-process) 객체를 제공합니다.

   ```
   Aws::GameLift::GenericOutcome outcome = 
      Aws::GameLift::Server::ProcessReady(processReadyParameter);
   ```

전체 예제에 대한 자세한 내용은 [ProcessReady()](integration-server-sdk-cpp-ref-actions.md#integration-server-sdk-cpp-ref-processready) 섹션을 참조하세요.

------
#### [ C\$1 ]

**로깅을 구성하려면(C\$1)**

1. 게임 서버 로그 파일의 디렉터리 경로인 문자열 목록을 생성합니다.

   ```
   List<string> logPaths = new List<string>();
   logPaths.Add("C:\\game\\serverOut.txt");     // Example of a log file that the game server writes
   ```

1. 목록을 [ProcessParameters](integration-server-sdk-csharp-ref-datatypes.md#integration-server-sdk-csharp-ref-dataypes-process) 객체의 [LogParameters](integration-server-sdk-csharp-ref-datatypes.md#integration-server-sdk-csharp-ref-dataypes-log)로 제공합니다.

   ```
   var processReadyParameter = new ProcessParameters(
       this.OnGameSession,
       this.OnProcessTerminate,
       this.OnHealthCheck,
       this.OnGameSessionUpdate,
       port,
       new LogParameters(logPaths));
   ```

1. [ProcessReady()](integration-server-sdk-csharp-ref-actions.md#integration-server-sdk-csharp-ref-processready)를 호출할 때 [ProcessParameters](integration-server-sdk-csharp-ref-datatypes.md#integration-server-sdk-csharp-ref-dataypes-process) 객체를 제공합니다.

   ```
   var processReadyOutcome =
      GameLiftServerAPI.ProcessReady(processReadyParameter);
   ```

전체 예제에 대한 자세한 내용은 [ProcessReady()](integration-server-sdk-csharp-ref-actions.md#integration-server-sdk-csharp-ref-processready) 섹션을 참조하세요.

------

## 로그에 기록
<a name="writing-to-logs-for-custom-servers"></a>

로그 파일은 서버 프로세스가 시작된 후에 존재합니다. 어떤 방법으로든 파일에 기록하여 로그에 기록할 수 있습니다. 서버의 표준 출력 및 오류 출력을 모두 캡처하려면 다음 예제와 같이 출력 스트림을 로그 파일에 다시 매핑합니다.

------
#### [ C\$1\$1 ]

```
std::freopen("serverOut.log", "w+", stdout);
std::freopen("serverErr.log", "w+", stderr);
```

------
#### [ C\$1 ]

```
Console.SetOut(new StreamWriter("serverOut.txt"));
Console.SetError(new StreamWriter("serverErr.txt"));
```

------

## 서버 로그 액세스
<a name="accessing-logs-for-custom-servers"></a>

로그 액세스는 플릿 유형에 따라 다릅니다.

### 관리형 EC2 플릿
<a name="accessing-logs-managed-ec2"></a>

게임 세션이 종료되면 Amazon GameLift Servers가 자동으로 로그를 S3 버킷에 저장하고 14일간 보관합니다. 게임 세션에 대한 로그의 위치를 가져오려면 [GetGameSessionLogUrl](https://docs.aws.amazon.com/gamelift/latest/apireference/API_GetGameSessionLogUrl.html) API 작업을 사용할 수 있습니다. 로그를 다운로드하려면 작업에서 반환하는 URL을 사용합니다.

또는 원하는 로깅 서비스 또는 스토리지 위치로 직접 로그를 전송하도록 게임 서버를 구성하여 자체 로깅 솔루션을 설정할 수 있습니다. 자세한 내용은 [Amazon GameLift Servers 호스팅 게임 서버를 다른 AWS 리소스에 연결](gamelift-sdk-server-resources.md) 단원을 참조하십시오.

### 컨테이너 플릿
<a name="accessing-logs-containers"></a>

컨테이너 플릿은 모든 컨테이너에서 표준 출력 및 오류 스트림을 캡처합니다. 다음 옵션 중 하나를 사용하여 로깅을 구성할 수 있습니다.
+ 컨테이너 출력을 지정된 로그 그룹의 CloudWatch 로그 스트림으로 저장
+ S3 스토리지 버킷에 컨테이너 출력 저장
+ 로깅 끄기(컨테이너 출력이 저장되지 않음)

컨테이너 플릿을 생성할 때 로깅 옵션을 구성하는 방법에 대한 자세한 내용은 Amazon GameLift Servers API 참조의 [LogConfiguration](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_CreateContainerFleet.html#gameliftservers-CreateContainerFleet-request-LogConfiguration)을 참조하세요.