日志配置¶
来源 https://github.com/vllm-project/vllm/blob/main/examples/features/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=<日志配置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 使用的内置默认日志配置。
首先,创建一个相应的 JSON 日志配置文件,其中包括 vLLM 根日志记录器和您希望静默的日志记录器的配置
/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 日志记录器。
示例 4:禁用健康检查端点的访问日志¶
在生产环境中,/health、/metrics 和 /ping 等健康检查端点经常被负载均衡器和监控系统调用,从而产生大量重复的访问日志。要减少日志噪音并保留其他端点的日志,请使用 --disable-access-log-for-endpoints 选项。
禁用 health 和 metrics 端点的访问日志
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