Grpc Access Log

Logs how each gRPC call ended

Versions marked “overview” do not contain this page. Selecting one opens that version’s documentation overview.

Category: Setup-dependent integration
Task: Logs how each gRPC call ended

Prerequisites: The external service, credentials, or certificates referenced by this configuration.

Run it: Use ghcr.io/praxis-proxy/praxis:0.7.2 and follow the first reverse-proxy tutorial to mount and start the configuration.

This configuration comes from the selected release. The example has not been run here; external services are not bundled.

Download the source file.

# gRPC Access Logging
#
# Logs how each gRPC call ended. A gRPC call's outcome is not its HTTP
# status — that is 200 even for a failed call — but the `grpc-status`
# trailer sent after the response body, so an ordinary access log
# records every call as a success.
#
# Adds four access log fields:
#   grpc_status              numeric grpc-status (e.g. 5)
#   grpc_status_name         canonical name (e.g. NOT_FOUND)
#   grpc_message             grpc-message, percent-encoded as received
#   grpc_status_details_bin  grpc-status-details-bin, base64 as received
#
# They render "-" for non-gRPC responses, so one listener can carry
# mixed traffic. Trailers require an HTTP/2 upstream leg, hence
# `http.version: h2` on the cluster.
#
listeners:
  - name: grpc
    address: "127.0.0.1:8080"
    protocol: http
    filter_chains: [main]

filter_chains:
  - name: main
    filters:
      - filter: access_log
        fields:
          - method
          - path
          - status
          - duration_ms
          - cluster
          - grpc_status
          - grpc_status_name
          - grpc_message

      - filter: router
        routes:
          - path_prefix: "/"
            cluster: grpc-backend

      - filter: load_balancer
        clusters:
          - name: grpc-backend
            endpoints:
              - "127.0.0.1:50051"
            http:
              version: h2

insecure_options:
  allow_private_endpoints: true # example proxies to a local backend