跳到内容

日志配置

来源 https://github.com/vllm-project/vllm/blob/main/examples/others/logging_configuration.md

vLLM 利用 Python 的 logging.config.dictConfig 功能,对 vLLM 使用的各种记录器进行稳健且灵活的配置。

vLLM 提供了两个环境变量,可用于满足从简单且固定到复杂且灵活的各种日志配置需求。

  • 无 vLLM 日志(简单且固定)
    • 设置 VLLM_CONFIGURE_LOGGING=0 (且不设置 VLLM_LOGGING_CONFIG_PATH
  • vLLM 的默认日志配置(简单且固定)
    • 保持 VLLM_CONFIGURE_LOGGING 为空或设置为 VLLM_CONFIGURE_LOGGING=1
  • 细粒度自定义日志配置(更复杂、更灵活)
    • 保持 VLLM_CONFIGURE_LOGGING 为空或设置为 VLLM_CONFIGURE_LOGGING=1,并设置 VLLM_LOGGING_CONFIG_PATH=<path-to-logging-config.json>

日志配置环境变量

VLLM_CONFIGURE_LOGGING

VLLM_CONFIGURE_LOGGING 用于控制 vLLM 是否对所使用的记录器进行配置。此功能默认启用,但可以通过在运行 vLLM 时设置 VLLM_CONFIGURE_LOGGING=0 来禁用。

如果启用了 VLLM_CONFIGURE_LOGGING 且未指定 VLLM_LOGGING_CONFIG_PATH 的值,vLLM 将使用内置的默认配置来配置根 vLLM 记录器。默认情况下,不会配置其他 vLLM 记录器,因此所有 vLLM 记录器都依赖根 vLLM 记录器来处理所有日志记录决策。

如果禁用了 VLLM_CONFIGURE_LOGGING 但又提供了 VLLM_LOGGING_CONFIG_PATH 的值,启动 vLLM 时会报错。

VLLM_LOGGING_CONFIG_PATH

VLLM_LOGGING_CONFIG_PATH 允许用户指定一个 JSON 文件路径,该文件包含替代的自定义日志配置,用于取代 vLLM 内置的默认日志配置。日志配置应以 JSON 格式提供,并遵循 Python 日志配置字典模式 中指定的架构。

如果指定了 VLLM_LOGGING_CONFIG_PATH 但禁用了 VLLM_CONFIGURE_LOGGING,启动 vLLM 时会报错。

示例

示例 1:自定义 vLLM 根记录器

在此示例中,我们将自定义 vLLM 根记录器,以使用 python-json-logger(该组件已包含在容器镜像中),将日志以 JSON 格式输出到控制台的 STDOUT,并将日志级别设为 INFO

首先,创建一个合适的 JSON 日志配置文件

/path/to/logging_config.json
{
  "formatters": {
    "json": {
      "class": "pythonjsonlogger.jsonlogger.JsonFormatter"
    }
  },
  "handlers": {
    "console": {
      "class" : "logging.StreamHandler",
      "formatter": "json",
      "level": "INFO",
      "stream": "ext://sys.stdout"
    }
  },
  "loggers": {
    "vllm": {
      "handlers": ["console"],
      "level": "INFO",
      "propagate": false
    }
  },
  "version": 1
}

最后,运行 vLLM 并将 VLLM_LOGGING_CONFIG_PATH 环境变量设置为自定义日志配置 JSON 文件的路径

VLLM_LOGGING_CONFIG_PATH=/path/to/logging_config.json \
    vllm serve mistralai/Mistral-7B-v0.1 --max-model-len 2048

示例 2:静默特定的 vLLM 记录器

要静默特定的 vLLM 记录器,必须为目标记录器提供自定义日志配置,将其配置为不向根 vLLM 记录器传播其日志消息。

当为任何记录器提供自定义配置时,也必须同时为根 vLLM 记录器提供配置,因为任何自定义记录器配置都会覆盖 vLLM 使用的内置默认日志配置。

首先,创建一个包含根 vLLM 记录器以及您希望静默的记录器配置的 JSON 日志配置文件

/path/to/logging_config.json
{
  "formatters": {
    "vllm": {
      "class": "vllm.logging_utils.NewLineFormatter",
      "datefmt": "%m-%d %H:%M:%S",
      "format": "%(levelname)s %(asctime)s %(filename)s:%(lineno)d] %(message)s"
    }
  },
  "handlers": {
    "vllm": {
      "class" : "logging.StreamHandler",
      "formatter": "vllm",
      "level": "INFO",
      "stream": "ext://sys.stdout"
    }
  },
  "loggers": {
    "vllm": {
      "handlers": ["vllm"],
      "level": "DEBUG",
      "propagate": false
    },
    "vllm.example_noisy_logger": {
      "propagate": false
    }
  },
  "version": 1
}

最后,运行 vLLM 并将 VLLM_LOGGING_CONFIG_PATH 环境变量设置为自定义日志配置 JSON 文件的路径

VLLM_LOGGING_CONFIG_PATH=/path/to/logging_config.json \
    vllm serve mistralai/Mistral-7B-v0.1 --max-model-len 2048

示例 3:禁用 vLLM 默认日志配置

要禁用 vLLM 的默认日志配置并静默所有 vLLM 记录器,只需在运行 vLLM 时设置 VLLM_CONFIGURE_LOGGING=0。这将阻止 vLLM 配置根 vLLM 记录器,从而静默所有其他 vLLM 记录器。

VLLM_CONFIGURE_LOGGING=0 \
    vllm serve mistralai/Mistral-7B-v0.1 --max-model-len 2048

示例 4:禁用健康检查接口的访问日志

在生产环境中,负载均衡器和监控系统会频繁调用如 /health/metrics/ping 等健康检查接口,从而产生大量重复的访问日志。要减少日志噪音同时保留其他接口的日志,请使用 --disable-access-log-for-endpoints 选项。

禁用健康和指标接口的访问日志

vllm serve mistralai/Mistral-7B-v0.1 --max-model-len 2048 \
    --disable-access-log-for-endpoints /health,/metrics,/ping

建议过滤的常见接口

端点 描述 典型调用者
/health 健康检查 Kubernetes 存活/就绪探针、负载均衡器
/metrics Prometheus 指标 Prometheus 采集器(每 15-60 秒)
/ping SageMaker 健康检查 SageMaker 基础设施
/load 服务器负载指标 自定义监控

注意事项

  • 此选项仅影响 uvicorn 访问日志,不影响 vLLM 应用程序日志
  • 通过逗号分隔(无空格)指定多个接口
  • 过滤器使用精确路径匹配,查询参数会被忽略(例如,/health?verbose=true 匹配 /health
  • 如果需要完全禁用所有访问日志,请改用 --disable-uvicorn-access-log

其他资源