Chapter 8. About vLLM uvicorn access logs in distributed inference


You can control vLLM uvicorn access log behavior to balance operational visibility with infrastructure capacity. When you enable access logs for all endpoints, the Endpoint Picker (EPP) scheduler generates a high volume of logs. This log volume can overwhelm the OpenShift web console log viewer and consume significant storage in log aggregation infrastructure.

In Red Hat OpenShift AI 3.5, the default LLMInferenceServiceConfig template uses the --disable-access-log-for-endpoints flag to filter specific endpoint paths. By default, the following endpoints are filtered from access logs:

  • /health - Kubernetes liveness and readiness probes
  • /metrics - Prometheus metrics scraping
  • /ping - Basic connectivity checks

All other endpoints remain visible in access logs, including:

  • /v1/completions - Text completion requests
  • /v1/chat/completions - Chat completion requests
  • Custom inference endpoints specific to your deployment

This targeted filtering approach restores visibility into inference request traffic while maintaining suppression of noisy health check and metrics endpoints.

Version-specific behavior

The logging behavior differs based on the vLLM version deployed:

vLLM 0.16 or later
Uses targeted endpoint filtering with --disable-access-log-for-endpoints /health,/metrics,/ping. By default, Uvicorn shows inference request logs and suppresses health check logs.
vLLM versions below 0.16
For vLLM versions below 0.16, the platform template reverts to the blanket --disable-uvicorn-access-log flag. This behavior disables all uvicorn access logs, including inference requests.

The version detection and fallback mechanism operates automatically without requiring manual configuration changes. Existing deployments that use pre-0.16 vLLM images continue to function with their original blanket suppression behavior after upgrading to Red Hat OpenShift AI 3.5.

When to customize endpoint filtering

The default filtered endpoint list balances operational visibility with log volume for most deployments. You might need to customize the filtered endpoint list in the following scenarios:

  • Your deployment includes custom health check endpoints beyond the standard /health, /metrics, and /ping paths
  • You want to filter additional endpoints that generate high-frequency traffic specific to your application
  • You need to temporarily see health check logs for debugging infrastructure issues
  • You want to reduce the filtered list to see logs for specific endpoints that are currently suppressed

When to enable all access logs

You might need to enable access logs for all vLLM endpoints, including health checks and metrics, in the following scenarios:

  • Debugging Kubernetes probe failures that require visibility into health check request patterns
  • Troubleshooting metrics scraping issues that prevent monitoring from functioning correctly
  • Investigating unexpected pod restart behavior that might be related to probe configuration
  • Analyzing complete request patterns during active troubleshooting sessions

You can customize the list of endpoints filtered from vLLM access logs to balance log volume with observability needs. By default, Red Hat OpenShift AI 3.5 filters /health, /metrics, and /ping endpoints while logging all other requests. You can override this default by specifying your own endpoint list in the LLMInferenceService custom resource. Your custom list replaces the default entirely, so include all endpoints you want filtered.

The --disable-access-log-for-endpoints flag uses exact path matching: /metrics matches /metrics but not /metrics/prometheus. Use a comma-separated list for multiple endpoints with no spaces (for example, /health,/metrics,/ping).

Prerequisites

  • You have vLLM version 0.16 or later installed
  • You have installed Red Hat OpenShift AI 3.5 or later
  • You have a running LLMInferenceService deployment
  • You have access to the OpenShift CLI (`oc`) or the OpenShift web console

Procedure

  1. Edit your LLMInferenceService custom resource:

    $ oc edit llminferenceservice <service_name> -n <namespace>

    Replace <service_name> with the name of your LLMInferenceService and <namespace> with the namespace where the LLMInferenceService is deployed.

  2. In the editor, navigate to the spec.template.containers section.
  3. Locate the container named main.
  4. Add the --disable-access-log-for-endpoints flag to the args list with your custom endpoint list:

    Note

    The default filtering behavior is applied automatically by the platform template and does not appear in the LLMInferenceService custom resource. When you add the flag to your args list, your custom list overrides the platform default.

    To use the same endpoint list as the platform default (filtering health checks and metrics):

    apiVersion: serving.kserve.io/v1alpha2
    kind: LLMInferenceService
    metadata:
      name: my-vllm-service
      namespace: <namespace>
    spec:
      replicas: 2
      model:
        uri: hf://RedHatAI/Qwen3-8B-FP8-dynamic
        name: RedHatAI/Qwen3-8B-FP8-dynamic
      router:
        route: {}
        gateway: {}
        scheduler: {}
      template:
        containers:
        - name: main
          args:
          - --disable-access-log-for-endpoints=/health,/metrics,/ping
          - --max-model-len=10000
          - --gpu-memory-utilization=0.9

    To filter additional endpoints such as /readyz and /livez, include them in your custom list along with the default endpoints:

    ...
        containers:
        - name: main
          args:
          - --disable-access-log-for-endpoints=/health,/metrics,/ping,/readyz,/livez
          - --max-model-len=10000
          - --gpu-memory-utilization=0.9
    ...

    To reduce filtering and see logs for the /ping endpoint, specify only the endpoints you want filtered:

    ...
        containers:
        - name: main
          args:
          - --disable-access-log-for-endpoints=/health,/metrics
          - --max-model-len=10000
          - --gpu-memory-utilization=0.9
    ...
  5. Save and close the editor.

    The LLMInferenceService controller automatically applies the updated configuration and restarts the affected pods.

Verification

  1. Verify that the LLMInferenceService is running:

    $ oc get llminferenceservice <service_name> -n <namespace>

    The output shows the service status:

    NAME              READY   AGE
    my-vllm-service   True    5m
  2. View the pod logs to confirm that health check and metrics requests are not logged:

    $ oc logs <pod_name> -n <namespace> | grep "/metrics"

    Replace <pod_name> with the name of one of the vLLM pods.

    The output should be empty, confirming that /metrics requests are filtered.

  3. Make a test inference request to the /v1/completions endpoint.
  4. View the pod logs again to verify that the inference request was logged:

    $ oc logs <pod-name> -n <namespace> | grep "/v1/completions"

    The output shows the inference request:

    INFO:     172.30.45.2:54325 - "POST /v1/completions HTTP/1.1" 200 OK

    The IP addresses shown are internal pod network addresses and will vary by deployment.

  5. Confirm that only actual API usage is logged while health checks are filtered.

8.2. Enable vLLM uvicorn access logs

You can enable vLLM uvicorn access logs for all endpoints, including health checks and metrics, to debug infrastructure issues and troubleshoot Kubernetes probe behavior. Inference request logs are visible by default through targeted endpoint filtering. This procedure demonstrates how you can enable the additional health check and metrics logs that are suppressed by default.

Note

For vLLM 0.16 or later, the platform template applies targeted filtering with the --disable-access-log-for-endpoints flag. For vLLM versions below 0.16, the platform template reverts to blanket suppression with the --disable-uvicorn-access-log flag.

Prerequisites

  • You have installed the OpenShift CLI (`oc`).
  • You have logged in as a user with cluster-admin privileges.
  • You have deployed an LLMInferenceService custom resource.
  • You know which vLLM version your deployment uses.

Procedure

  1. Determine which vLLM version your deployment uses.

    Tip

    The vLLM version is displayed in the pod startup logs as follows:

    [access-log-detect] vllm version='<version>'
    [access-log-detect] selected ACCESS_LOG_ARGS='<flags>'

    The version is also shown as a label in the OpenShift AI under the Deployment resource.

  2. For vLLM 0.16 or later, add the --disable-access-log-for-endpoints flag with an empty value:

    1. Edit the LLMInferenceService custom resource:

      $ oc edit llminferenceservice <service_name> -n <namespace>
    2. In the editor, navigate to spec.template.containers and find the container named main.
    3. Add the --disable-access-log-for-endpoints= flag with an empty value to the args list:

      spec:
        template:
          containers:
          - name: main
            args:
            - --disable-access-log-for-endpoints=
            - --max-model-len=10000
            - --gpu-memory-utilization=0.9

      The empty value disables endpoint filtering entirely, causing all endpoints to be logged.

    4. Save and close the editor.

      The LLMInferenceService controller automatically applies the updated configuration and restarts the affected pods.

  3. For vLLM versions below 0.16, add the --no-disable-uvicorn-access-log flag:

    Note

    This applies only to deployments using custom vLLM images below version 0.16. All shipped Red Hat OpenShift AI 3.5 images use vLLM 0.19.1 or later.

    1. Edit the LLMInferenceService custom resource:

      $ oc edit llminferenceservice <service_name> -n <namespace>
    2. In the editor, navigate to spec.template.containers and find the container named main.
    3. Add the --no-disable-uvicorn-access-log flag to the args list:

      spec:
        template:
          containers:
          - name: main
            args:
            - --no-disable-uvicorn-access-log
            - --max-model-len=10000
            - --gpu-memory-utilization=0.9
    4. Save and close the editor.

      The LLMInferenceService controller automatically applies the updated configuration and restarts the affected pods.

Verification

  1. Verify that the LLMInferenceService is running:

    $ oc get llminferenceservice <service_name> -n <namespace>

    The output shows the service status:

    NAME              READY   AGE
    my-vllm-service   True    5m
  2. View the pod logs to confirm that health check and metrics access log entries appear:

    $ oc logs <pod_name> -n <namespace> | grep -E "/(health|metrics|ping)"

    Replace <pod_name> with the name of one of the vLLM pods.

    The output shows HTTP access log entries for health checks and metrics:

    INFO:     172.30.45.2:54321 - "GET /metrics HTTP/1.1" 200 OK
    INFO:     172.30.45.2:54322 - "GET /health HTTP/1.1" 200 OK
    INFO:     172.30.45.2:54323 - "GET /ping HTTP/1.1" 200 OK

    The IP addresses shown are internal pod network addresses and will vary by deployment.

  3. Verify that inference request logs also appear:

    $ oc logs <pod_name> -n <namespace> | grep "/v1/completions"

    The output shows inference request access log entries:

    INFO:     172.30.45.2:54324 - "POST /v1/completions HTTP/1.1" 200 OK
  4. Confirm that all endpoint types are now logged.

These examples show how to use Distributed Inference with llm-d in common scenarios.

8.3.1. Single-node GPU deployment

Use single-GPU-per-replica deployment patterns for development, testing, or production deployments of smaller models, such as 7-billion-parameter models.

For examples using single-node GPU deployments, see Single-Node GPU Deployment Examples.

8.3.2. Multi-node deployment

For examples using multi-node deployments, see DeepSeek-R1 Multi-Node Deployment Examples.

You can configure the scheduler to track key-value (KV) cache blocks across inference endpoints and route requests to the endpoint with the highest cache hit rate. This configuration improves throughput and reduces latency by maximizing cache reuse.

For an example, see Precise Prefix KV Cache Routing.

Red Hat logoGithubRedditYoutubeTwitter

Learn

Try, buy, & sell

Communities

About Red Hat

We deliver hardened solutions that make it easier for enterprises to work across platforms and environments, from the core datacenter to the network edge.

Making open source more inclusive

Red Hat is committed to replacing problematic language in our code, documentation, and web properties. For more details, see the Red Hat Blog.

About Red Hat Documentation

Legal Notice

Theme

© 2026 Red Hat
Back to top