日志扩展#

本文档描述了 Triton 的日志扩展。日志扩展使客户端能够在 Triton 运行时配置日志设置。Triton 在其服务器元数据的扩展字段中报告“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 描述一个“名称”/“值”对,其中“名称”是日志设置的 $string 表示形式,而“值”是设置值的 $string$bool$number 表示形式。目前,定义了以下日志设置

  • “log_file”:一个 $string 日志文件位置,日志输出将保存到该位置。如果为空,则日志输出将流式传输到控制台。

  • “log_info”:一个 $boolean 参数,用于控制 Triton 服务器是否记录 INFO 级别消息。

  • “log_warning”:一个 $boolean 参数,用于控制 Triton 服务器是否记录 WARNING 级别消息。

  • “log_error”:一个 $boolean 参数,用于控制 Triton 服务器是否记录 ERROR 级别消息。

  • “log_verbose_level”:一个 $number 参数,用于控制 Triton 服务器是否输出不同程度的详细消息。此值可以是任何 >= 0 的整数。如果“log_verbose_level”为 0,则将禁用详细日志记录,并且 Triton 服务器将不输出详细消息。如果“log_verbose_level”为 1,则 Triton 服务器将输出级别 1 的详细消息。如果“log_verbose_level”为 2,则 Triton 服务器将输出级别 <= 2 的所有详细消息,依此类推。尝试将“log_verbose_level”设置为小于 0 的数字将导致错误。

  • “log_format”:一个 $string 参数,用于控制 Triton 服务器日志消息的格式。目前有两种格式:“default”和“ISO8601”。

日志设置响应 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 库通过以下方式调用日志记录协议扩展(假设 Triton 服务器在 localhost:8000 上运行)

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) {}
}

日志设置 API 返回最新的日志设置。错误由请求返回的 google.rpc.Status 指示。OK 代码表示成功,其他代码表示失败。日志设置的请求和响应消息是

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”来禁用此行为,但无法通过日志记录扩展进行更改。

日志条目可以是单行或多行。多行条目有一个可选的标题,后跟对象(例如表格或 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  |
+--------+---------+--------+