🔧 Configuration
Overview
In this page, you will find all the configuration options available for the relay-proxy.
The GO Feature Flag relay-proxy is highly configurable and can be adapted to your needs. Despite that you can start with a minimum configuration and fine tune it later.
Configuration file
The configuration of the relay proxy is based on a configuration file that you have to provide.
The configuration of the relay proxy is based on a configuration file that you have to provide.
This is a yaml file and usage is to call it goff-proxy.yaml but you can name it as you will.
You can provide the configuration file with the option --config=/path_to_your_file.yaml when launching the relay proxy.
go-feature-flag --config=/goff-proxy.yaml
By default, if you omit the --config option, the relay proxy will look for a configuration file named goff-proxy.yaml in (int this order):
./(the current directory)/goff//etc/opt/goff/
Configuration Patterns
One set of feature flags
Use one set of feature flags for all your applications. This is the default way of using GO Feature Flag, it requires a minimum configuration and is easy to setup
Use multiple flag sets
Separate your feature flags into different flag sets to give ownership to different teams or different usage, useful for multi-tenant applications or when you have different teams.
Getting Started
The minimum configuration to start the relay proxy is to provide where to retrieve your feature flags configuration.
retrievers:
- kind: file
path: /goff/flags.yaml # Location of your feature flag files
All the other options are optional and can be added to the configuration file to fine-tune the relay proxy.
Environment variables
The primary way to configure the relay proxy is through a configuration file, but you can also use environment variables if you prefer.
You can override file configurations using environment variables.
Here are some things to know when you are using environment variables:
-
To set an option, the environment variable should have the same name as the configuration option in uppercase.
For example, to set thelogLeveloption, you can set theLOGLEVELenvironment variable.export LOGLEVEL=debug -
If you want to set a nested field, you can use
_to separate each field.
For example, to set theserver.portoption, you can set theSERVER_PORTenvironment variable.export SERVER_PORT=8080 -
If you want to set an array of string, you can add multiple values separated by a comma.
export AUTHORIZEDKEYS_EVALUATION=my-first-key,my-second-key -
If you are modifying an array of objects, you can use the index to set the value.
export RETRIEVERS_0_KIND=github
If you want to avoid any collision with existing environment variables that are not specifically related to the relay proxy, you can prefix your environment variables.
You can configure the prefix using the envVariablePrefix field in your configuration file.
Configuration Options
server
This is the configuration related to the server behavior of the relay proxy. It allows the internal server behaviors such as your execution mode, monitoring port, etc ...
- option name:
server - type:
serverConfig - default: none
- mandatory:
- Check the server configuration types to have more information about the available options.
retrievers
This is the configuration on how to retrieve the configuration of the files.
- option name:
retrievers - type:
[]retriever - default: none
- mandatory:
- You can have multiple retrievers at the same time, check "Using multiple retrievers" to see how it works.
- Configuration of a retriever depends on the one you are choosing. Check the list of retrievers and go on the detail page of your choice to configure it.
retrievers:
- kind: file
path: /goff/my-flags.yaml
- kind: s3
bucket: my-featureflag-bucket
item: flag/flags.goff.yaml
startWithRetrieverError
By default, the relay proxy will crash if it is not able to retrieve the flags from the configuration.
If you don't want your relay proxy to crash, you can set startWithRetrieverError to true. Until the flag is retrievable the relay proxy will only answer with default values.
- option name:
startWithRetrieverError - type: boolean
- default:
false - mandatory:
persistentFlagConfigurationFile
If set, GO Feature Flag will store the flags configuration in this file to be able to serve the flags even if none of the retrievers is available during starting time.
By default, the flag configuration is not persisted and stays on the retriever system. By setting a file here, you ensure that GO Feature Flag will always start with a configuration but which can be out-dated.
- option name:
persistentFlagConfigurationFile - type: string
- default: none
- mandatory:
- example:
/tmp/goff_persist_conf.yaml
fileFormat
This is the format of your flag configuration file.
- option name:
fileFormat - type: string
- Acceptable values are :
yaml,json,toml. - default:
yaml - mandatory:
pollingInterval
This is the time interval in millisecond when the relay proxy is reloading the configuration file.
- option name:
pollingInterval - type: int
- default:
60000 - The minimum time accepted is 1000 millisecond (1 second).
- If you set a negative value, the polling will be disabled.
- mandatory:
enablePollingJitter
Set to true if you want to avoid having true periodicity when retrieving your flags. It is useful to avoid having spike on your flag configuration storage in case your application is starting multiple instance at the same time.
We ensure a deviation that is maximum ±10% of your polling interval.
- option name:
enablePollingJitter - type: boolean
- default:
false - mandatory:
logLevel
The log level to use for the relay proxy.
Check "Logging" to have more information.
- option name:
logLevel - type: string
- default:
INFO - Acceptable values are
ERROR,WARN,INFO,DEBUG. - mandatory:
- When in
DEBUGmode, the relay proxy will log the request body and response body, for large payloads this can be a lot of data and can impact the performance this is the reason why we truncate the body if it is larger than 8KiB.
logFormat
The format to use for structured logs from the relay proxy.
Check "Logging" to have more information.
- option name:
logFormat - type: string
- default:
json - Acceptable values are
jsonandlogfmt. - mandatory:
enablePprof
This param is used to enable pprof endpoints if you wish to enable profiling.
Check "Profiling" to have more information.
- option name:
enablePprof - type: boolean
- default:
false - mandatory:
exporters
Exporters is the configuration used to define how to export the data from GO Feature Flag.
- option name:
exporters - type: []exporter
- default: none
- mandatory:
- You can have multiple exporters at the same time, it will export the data to all the exporters you have configured in parallel.
- Configuration of an exporter depends on the one you are choosing. Check the list of exporters and go on the detail page of your choice to configure it.
exporters:
- kind: s3
bucket: evaluation-data-bucket
- kind: kafka
kafka:
topic: "go-feature-flag-events"
notifiers
Notifiers is the configuration on where to notify a flag changes.
- option name:
notifiers - type: []notifier
- default: none
- mandatory:
- Configuration of a notifier depends on the one you are choosing. Check the list of notifiers and go on the detail page of your choice to configure it.
disableNotifierOnInit
If disableNotifierOnInit is set to true, the relay proxy will not call any notifier when the flags are loaded for the 1st time (during initialization). This is useful if you do not want a Slack/Webhook notification saying that the flags have been added every time you start the proxy.
- option name:
disableNotifierOnInit - type: boolean
- default:
false - mandatory:
debug
If debug is set to true, we will set the log level to debug and set some components in debug mode (labstack/echo, pprof etc ...).
- option name:
debug - type: boolean
- default:
false - mandatory:
hideBanner
hideBanner can be used to hide the startup banner.
- option name:
hideBanner - type: boolean
- default:
false - mandatory:
swagger
Configuration related to the swagger behavior of the relay proxy.
- option name:
swagger - type: swagger
- default: none
- mandatory:
disableVersionHeader
If disableVersionHeader is set to true, the relay proxy will not add the header x-gofeatureflag-version with the GO Feature Flag version in the HTTP response.
- option name:
disableVersionHeader - type: boolean
- default:
false - mandatory:
authorizedKeys
List of authorized API keys.
If you don't set any API keys, the relay proxy will be fully open to all requests
- option name:
authorizedKeys - type: authorizedKeys
- default: none
- mandatory:
Runtime updates: API keys can be updated at runtime without restarting the relay proxy.
When the configuration file changes, the relay proxy automatically detects and applies the new API key configuration.
This works in both default mode and flagset mode.
evaluationContextEnrichment
It is a free field that will be merged with the evaluation context sent during the evaluation.
It is useful to add common attributes to all the evaluations, such as a server version, environment, etc. These fields will be included in the custom attributes of the evaluation context.
If in the evaluation context you have a field with the same name, it will be overridden by the evaluationContextEnrichment.
- option name:
evaluationContextEnrichment - type: object
- default: none
- mandatory:
openTelemetryOtlpEndpoint
Endpoint of your OpenTelemetry OTLP collector, used to send traces.
You will be able to forward those traces to your OpenTelemetry solution directly from the collector.
- option name:
openTelemetryOtlpEndpoint - type: string
- default: none
- mandatory:
flagSets
Flag sets allow you to organize your feature flags into separate groups, each with its own configuration, API keys, retrievers, exporters, and notifiers.
When you configure flag sets, the relay proxy operates in flag set mode instead of the default single configuration mode. Each flag set requires at least one API key and can have its own retrievers, exporters, and notifiers.
- option name:
flagSets - type: []flagSet
- default: none
- mandatory:
- If flag sets are configured, the relay proxy will ignore the top-level
retrievers,exporters, andnotifiersconfiguration.
server:
mode: http
port: 1031
flagSets:
- name: teamA
apiKeys:
- "team-a-api-key"
retrievers:
- kind: file
path: /flags/team-a-flags.yaml
exporter:
kind: log
- name: teamB
apiKeys:
- "team-b-api-key"
retrievers:
- kind: s3
bucket: my-feature-flag-bucket
item: team-b/flags.yaml
exporters:
- kind: s3
bucket: evaluation-data-bucket
envVariablePrefix
Prefix for your environment variables.
This useful if you want to avoid any collision with existing environment variables that are not specifically related to the relay proxy.
If you use this option you will have to prefix all your environment variables with the value you set here. For example if you want to override the port of the relay-proxy and the prefix is GOFF_.
export GOFF_SERVER_PORT=8080
- option name:
envVariablePrefix - type: string
- default: empty string
- mandatory:
enableBulkMetricFlagNames
Enables per-flag metrics for bulk evaluation endpoints.
This adds flag_name labels to the all_flags_evaluations_total_with_flag metric.
When enabled, this option provides more granular metrics by including the flag name in the metric labels for bulk evaluation endpoints. This can be useful for monitoring and alerting on specific flags, but may increase the cardinality of your metrics.
- option name:
enableBulkMetricFlagNames - type: boolean
- default:
false - mandatory:
Configuration Types
type authorizedKeys
authorizedKeys is an object were it is possible to configure the list of API Keys that are accepted by the relay proxy.
authorizedKeys.evaluation
If set, we will check for each evaluation if an authorized key is provided.
Each request will need to provide one of authorized key inside X-API-Key header.
- option name:
evaluation - type: []string
- default: none
- mandatory:
authorizedKeys.admin
You need to set API keys in this field if you want to access the /v1/admin/* endpoints.
Each request will need to provide one of authorized key inside X-API-Key header.
- option name:
evaluation - type: []string
- default: none
- mandatory:
- If no api key is configured the endpoint will be unreachable.
Example
# ...
authorizedKeys:
evaluation:
- "my-first-key"
- "my-second-key"
admin:
- "my-first-admin-key"
- "my-second-admin-key"
type serverConfig
Configuration related to the server behavior of the relay proxy.
server.mode
The execution mode of the relay proxy, you can choose to start the relay-proxy in different modes depending how you want to call the APIs.
- option name:
mode - type: string
- Acceptable values are :
http,lambda,unixsocket. - default: http
- mandatory:
http: Start the relay proxy as a HTTP server.
lambda: Start the relay proxy as an AWS Lambda handler.
unixsocket: Start the relay proxy and listen on a Unix socket, you have to set theunixSocketPathfield to define where the socket file will be created.
server.unixSocketPath
The path where the Unix socket file will be created when the relay proxy is started in unixsocket mode.
If used in combination with server.monitoringPort monitoring endpoints will be served via http on the provided port.
- option name:
unixSocketPath - type: string
- default: none
- mandatory:
- This field is mandatory if the
modeis set tounixsocket.
server.host
The server host used by the relay proxy to bind the HTTP server.
- option name:
host - type: string
- default:
0.0.0.0 - mandatory:
- This field is used only in
httpmode.
server.port
The server port used by the relay proxy to bind the HTTP server.
- option name:
port - type: int
- default: 1031
- mandatory:
- This field is used only in
httpmode.
server.monitoringPort
If set the monitoring endpoints will be served on this specific port.
Check "Use specific port for the monitoring" to have more information.
- option name:
monitoringPort - type: int
- default: none
- mandatory:
- This field is used only in
httpmode.
server.awsLambdaAdapter
This parameter allow you to decide which type of AWS lambda handler you want to use.
- option name:
awsLambdaAdapter - type: string
- default:
APIGatewayV2 - Acceptable values are
APIGatewayV2,APIGatewayV1,ALB. - mandatory:
- This param is used only if
server.modeis set tolambda.