grafana/pkg/services/grpcserver
Eric Leijonmarck 868e3a5e8e
`grafana-iam`: Adds config opts for RBACRemoteClient for load balancing (#110819)
2025-09-16 09:49:37 +01:00
..
context
interceptors Authz: Remove legacy API Key permissions (#110860) 2025-09-12 13:59:37 +02:00
README.md `grafana-iam`: Adds config opts for RBACRemoteClient for load balancing (#110819) 2025-09-16 09:49:37 +01:00
health.go
reflection.go
service.go `grafana-iam`: Adds config opts for RBACRemoteClient for load balancing (#110819) 2025-09-16 09:49:37 +01:00

README.md

grpcserver

The grpcserver package provides the implementation of the gRPC server for handling remote procedure calls in Grafana. It enables communication between clients and the Grafana server using the gRPC protocol.

Structure

  • service.go: This file contains the main configuration of the gRPC service, which implements the registry.BackgroundService interface.
  • interceptors: This folder contains the middleware functions used for intercepting and modifying gRPC requests and responses.
  • context: This folder contains helpers related to getting and setting values in context.Context.
  • health.go: This provides the implementation of the gRPC health check service, which is automatically registered with the gRPC server.
  • reflection.go: This provides the implementation of the gRPC reflection service, which is automatically registered with the gRPC server.

Usage

Enable the gRPC server in Grafana by setting the grpcServer feature toggle to true in your custom.ini configuration file.

[feature_toggles]
grpcServer = true

You can specify the gRPC server specific settings in the grpc_server section of the configuration file.

[grpc_server]
network = "tcp"
address = "127.0.0.1:10000"
use_tls = false
cert_file =
key_file =
# this will log the request and response for each unary gRPC call
enable_logging = false
# Maximum size of a message that can be received in bytes. If not set, uses the gRPC default (4MiB).
max_recv_msg_size =
# Maximum size of a message that can be sent in bytes. If not set, uses the gRPC default (unlimited).
max_send_msg_size =

Optional: Connection Management and Load Balancing

These settings help with:

  • Resource management: Prevent resource leaks from idle connections
  • Connection health: Detect and clean up dead connections
  • Load balancing: Force connection recycling for better distribution across multiple server instances
  • DoS protection: Rate limit keepalive pings from clients
# Connection management options
# Maximum amount of time a connection may exist before it will be closed
max_connection_age = 300s
# Additional time to allow for pending RPCs to complete before forcibly closing connections
max_connection_age_grace = 10s
# Maximum amount of idle time before a connection is closed
max_connection_idle = 300s
# Frequency of server-to-client pings to check if a connection is still active
keepalive_time = 30s
# Amount of time the server waits for a response to keepalive pings before closing the connection
keepalive_timeout = 5s
# Minimum amount of time a client should wait before sending a keepalive ping
keepalive_min_time = 5s

Example Services

View [health.go] and [reflection.go] for examples of how to implement gRPC services in Grafana. These services are currently initialized by the background service registry.