로깅 확장

로깅 확장 (Logging Extension)

이 문서는 Triton의 로깅 확장을 설명해요. 로깅 확장은 클라이언트가 Triton 실행 중에 로그 설정을 구성할 수 있게 해줍니다. Triton은 Server Metadata의 extensions 필드에 "logging"을 보고해요.

HTTP/REST

이 문서의 모든 JSON 스키마에서 $number, $string, $boolean, $object, $array는 기본 JSON 타입을 가리킵니다. #optional은 선택적 JSON 필드를 나타내요.

Triton은 로깅 엔드포인트를 다음 URL로 노출합니다. 클라이언트는 HTTP GET 요청으로 현재 로그 설정을 조회할 수 있고, HTTP POST 요청은 로그 설정을 수정하며, 성공 시 갱신된 로그 설정을, 실패 시 오류를 반환합니다.

GET v2/logging

POST v2/logging

로그 설정 응답 JSON 객체

성공적인 로그 설정 요청은 200 HTTP 상태 코드로 표시돼요. 응답 객체는 $log_setting_response로 식별되며 모든 성공적인 로그 설정 요청의 HTTP 본문에 반환됩니다.

$log_setting_response =
{
  $log_setting, ...
}

$log_setting = $string : $string | $boolean | $number

$log_setting JSON은 "name"/"value" 쌍을 나타내는데, "name"은 로그 설정의 $string 표현이고 "value"는 설정 값의 $string·$bool·$number 표현이에요. 현재 정의된 로그 설정은 다음과 같습니다.

  • "log_file" : 로그 출력을 저장할 $string 로그 파일 위치. 비어 있으면 로그 출력이 콘솔로 스트리밍.
  • "log_info" : Triton 서버가 INFO 레벨 메시지를 로그할지 제어하는 $boolean 파라미터.
  • "log_warning" : Triton 서버가 WARNING 레벨 메시지를 로그할지 제어하는 $boolean 파라미터.
  • "log_error" : Triton 서버가 ERROR 레벨 메시지를 로그할지 제어하는 $boolean 파라미터.
  • "log_verbose_level" : Triton 서버가 다양한 정도의 상세(verbose) 메시지를 출력할지 제어하는 $number 파라미터. 값은 0 이상의 정수. log_verbose_level이 0이면 상세 로깅이 비활성화되고 Triton 서버는 상세 메시지를 출력하지 않음. 1이면 레벨 1 상세 메시지를, 2면 레벨 2 이하 모든 상세 메시지를 출력하는 식. log_verbose_level을 0보다 작은 숫자로 설정하려 하면 오류 발생.
  • "log_format" : Triton 서버 로그 메시지의 형식을 제어하는 $string 파라미터. 현재 "default"와 "ISO8601" 2가지 형식이 있음.

로그 설정 응답 JSON 오류 객체

실패한 로그 설정 요청은 HTTP 오류 상태(대개 400)로 표시됩니다. HTTP 본문은 $log_setting_error_response 객체를 담아요.

$log_setting_error_response =
{
  "error": $string
}
  • "error" : 오류에 대한 설명 메시지.

로그 설정 요청 JSON 객체

로그 설정 요청은 로깅 엔드포인트에 HTTP POST로 보냅니다. 해당 응답에서 HTTP 본문은 응답 JSON을 담아요. 성공적인 요청은 200 HTTP 상태 코드로 표시됩니다.

요청 객체는 $log_setting_request로 식별되며 HTTP 본문에 제공되어야 합니다.

$log_setting_request =
{
  $log_setting, ...
}

$log_setting JSON이 수신되면(위에 정의된 대로) 지정된 설정만 갱신됩니다. 현재 다음 로그 설정(위에 설명됨)을 갱신할 수 있어요.

  • "log_info"
  • "log_warning"
  • "log_error"
  • "log_verbose_level"
  • "log_format"

사용 예시

로깅 프로토콜 확장은 curl 라이브러리를 이용해 다음과 같이 호출할 수 있습니다(localhost:8000에서 Triton 서버가 실행 중이라고 가정):

curl -s -w '\n%{http_code}\n' -d '{"log_verbose_level":1}' -X POST localhost:8000/v2/logging

이 명령은 다음과 같은 형식의 $log_setting_response JSON 객체를 반환해야 합니다.

{"log_file":"","log_info":true,"log_warnings":true,"log_errors":true,"log_verbose_level":1,"log_format":"default"}
200

log_verbose_level만 수정했는데도 모든 파라미터 필드의 현재 값이 반환되는 점에 유의하세요.

gRPC

로깅 확장을 위해 Triton은 다음 API를 구현합니다.

service GRPCInferenceService
{
  …

  // Update and get the log setting of the Triton server.
  rpc LogSettings(LogSettingsRequest)
          returns (LogSettingsResponse) {}
}

Log Setting API는 최신 로그 설정을 반환합니다. 오류는 요청에 대해 반환된 google.rpc.Status로 표시돼요. OK 코드는 성공, 그 외 코드는 실패를 나타냅니다. Log Settings의 요청·응답 메시지는 다음과 같습니다.

message LogSettingsRequest
{
  message SettingValue
  {
    oneof parameter_choice
    {
      // bool param option
      bool bool_param = 1;

      // uint32 param option
      uint32 uint32_param = 2;

      // string param option
      string string_param = 3;
    }
  }
  // The new setting values to be updated.
  // Unspecified settings will remain unchanged.
  map<string, SettingValue> settings = 1;
}

message LogSettingsResponse
{
  message SettingValue
  {
    oneof parameter_choice
    {
      // bool param option
      bool bool_param = 1;

      // uint32 param option
      uint32 uint32_param = 2;

      // string param option
      string string_param = 3;
    }
  }
  // The latest log settings values.
  map<string, SettingValue> settings = 1;
}

로깅 형식

로깅 확장은 두 가지 로깅 형식을 제공해요. 두 형식은 공통 필드 집합을 가지지만 로그 항목의 타임스탬프 표현 방식에서 차이가 있습니다. 메시지는 기본적으로 JSON 인코딩 규칙에 따라 직렬화됩니다. 이 동작은 서버 실행 시 환경변수 TRITON_SERVER_ESCAPE_LOG_MESSAGES를 "0"으로 설정하면 끌 수 있지만, 로깅 확장으로는 변경할 수 없어요.

로그 항목은 한 줄(single-line) 또는 여러 줄(multi-line)일 수 있어요. 여러 줄 항목은 테이블·protobuf 메시지 같은 객체의 구조화된 표현이 선택적 단일 헤딩 뒤에 이어지고, 다음 로그 항목이 시작될 때 끝납니다.

  1. TRITONSERVER_LOG_DEFAULT

한 줄 항목

<level><month><day><hour>:<min>:<sec>.<usec> <pid> <file>:<line>] <message>

예시:

I0520 20:03:25.829575 3355 model_lifecycle.cc:441] "AsyncLoad() 'simple'"

여러 줄 항목

<level><month><day><hour>:<min>:<sec>.<usec> <pid> <file>:<line>] <heading>
<object>

예시:

I0520 20:03:25.912303 3355 server.cc:676]
+--------+---------+--------+
| Model  | Version | Status |
+--------+---------+--------+
| simple | 1       | READY  |
+--------+---------+--------+
  1. TRITONSERVER_LOG_ISO8601

한 줄 항목

<year>-<month>-<day>T<hour>:<min>:<sec>Z <level> <pid> <file>:<line>] <message>

예시:

2024-05-20T20:03:26Z I 3415 model_lifecycle.cc:441] "AsyncLoad() 'simple'"

여러 줄 항목

<year>-<month>-<day>T<hour>:<min>:<sec>Z <level> <pid> <file>:<line>] <heading>
<object>

예시:

2024-05-20T20:03:26Z I 3415 server.cc:676]
+--------+---------+--------+
| Model  | Version | Status |
+--------+---------+--------+
| simple | 1       | READY  |
+--------+---------+--------+

출처: 공식 문서 - Logging Extension

더 알아보기 (Learn more)