Customize your Refinery configuration with general settings, peer management, and storage options beyond the default installation values.
Update the fields in config.yaml to customize your Refinery configuration.
The default configuration at installation contains the minimum configuration needed to run Refinery.Complete your Refinery setup after configuring config.yaml by customizing your Sampling Methods configuration in rules.yaml.
This content applies to Refinery version 3.0 and later.
For Refinery version 1.x, visit our GitHub repo for documentation on config and rules.We recommend upgrading to Refinery 3.0 to benefit from new features and improvements.
The default Refinery configuration uses a hardcoded peer list for file-based peer management.
It uses the DeterministicSampler Sampling Method and a SampleRate of 1, meaning that no traffic will be dropped.
In the Refinery GitHub repository, a minimal default configuration file exists.To see the full set of available options, refer below to the Refinery Config File.
In the Refinery GitHub repository, a fully-commented configuration file version exists that can be used as a template.
These recommended settings are not required when using Refinery, but highlighted for their useful purposes.To control access, use Network and Access Key configuration settings.
For peer management, refer to Peer Management configuration, or if using Redis, Redis Peer Management.If needed, Debugging contains configuration values used when setting up and debugging Refinery.When configured, the Stress Relief mechanism can prevent Refinery from being overwhelmed by a large number of traces.
It sheds load when Refinery is under duress and prevents crash loops.
The Refinery config file is a YAML file.
The file is split into sections; each section is a group of related configuration options.
Each section has a name, and the name is used to refer to the section in other parts of the config file.
ConfigurationVersion is the file format of this particular configuration file.This file is version 2.
This field is required.
It exists to allow the configuration system to adapt to future changes in the configuration file format.
MinRefineryVersion is the minimum version of Refinery that can load this configuration file.This setting specifies the lowest Refinery version capable of loading all of the features used in this file.
If this value is present, then Refinery will refuse to start if its version is less than this setting.
DatasetPrefix is a prefix that can be used to distinguish a dataset from an environment in the rules.If telemetry is being sent to both a classic dataset and a new environment called the same thing, such as production, then this parameter can be used to distinguish these cases.
When Refinery receives telemetry using an API key associated with a Honeycomb Classic dataset, it will then use the prefix in the form {prefix}. {dataset} when trying to resolve the rules definition.
ConfigReloadInterval is the average interval between attempts at reloading the configuration file.Refinery will attempt to read its configuration and check for changes at approximately this interval.
This time is varied by a random amount up to 10% to avoid all instances refreshing together.
In installations where configuration changes are handled by restarting Refinery, which is often the case when using Kubernetes, disable this feature with a value of 0s.
As of Refinery v2.7, news of a configuration change is immediately propagated to all peers, and they will attempt to reload their configurations.
Note that external factors (for example, Kubernetes ConfigMaps) may cause delays in propagating configuration changes.
ListenAddr is the address where Refinery listens for incoming requests.This setting is the IP and port on which Refinery listens for incoming HTTP requests.
These requests include traffic formatted as Honeycomb events, proxied requests to the Honeycomb API, and OpenTelemetry data using the http protocol.
Incoming traffic is expected to be HTTP, so if SSL is a requirement, put something like nginx in front to do the decryption.
PeerListenAddr is the IP and port on which to listen for traffic being rerouted from a peer.Incoming traffic is expected to be HTTP, so if using SSL use something like nginx or a load balancer to do the decryption.
HTTPIdleTimeout is the duration the http server waits for activity on the connection.This is the amount of time after which if the http server does not see any activity, then it pings the client to see if the transport is still alive.
“0s” means no timeout.
HoneycombAPI is the URL of the upstream Honeycomb API where the data will be sent.This setting is the destination to which Refinery sends all events that it decides to keep.
AdditionalHeaders is a map of additional HTTP headers to add to all upstream Honeycomb API requests.These headers will be added to all HTTP requests made to the upstream Honeycomb API endpoint, including trace data, OTel metrics, OTel traces, and logs.
This is useful for scenarios where requests need to pass through an mTLS proxy that requires additional headers like FORWARD_TO_URL.
Both keys and values must be strings.
Reserved Honeycomb header prefixes (“x-honeycomb-” and “x-hny-”) cannot be set.
ReceiveKeys is a set of Honeycomb API keys that the proxy will treat specially.This list only applies to span traffic - other Honeycomb API actions will be proxied through to the upstream API directly without modifying keys.
ReceiveKeyIDs is a set of Honeycomb Ingest Key IDs that the proxy will treat specially.When AcceptOnlyListedKeys is true, traffic using an API key whose Honeycomb ingest key ID matches an entry in this list will be accepted.
The key ID is the id field returned by the Honeycomb /1/auth endpoint; it is distinct from the full API key value.
This allows authorization based on key IDs rather than full key values, which avoids storing secret key material in the configuration file.
Both ReceiveKeys and ReceiveKeyIDs may be used simultaneously.
Note: This feature does not support legacy API keys.
Only Honeycomb Ingest Keys (which have a key ID) are compatible with this setting.
AcceptOnlyListedKeys is a boolean flag that causes events arriving with API keys not in the ReceiveKeys list to be rejected.If true, then only traffic using the keys listed in ReceiveKeys or whose key ID is listed in ReceiveKeyIDs is accepted.
Events arriving with API keys not in either list will be rejected with an HTTP 401 error.
If false, then all traffic is accepted and ReceiveKeys is ignored.
This setting is applied before the SendKey and SendKeyMode settings.
SendKey is an optional Honeycomb API key that Refinery can use to send data to Honeycomb, depending on configuration. Setting this value via a command line flag may expose credentials - it is recommended to use the environment variable or a configuration file.If SendKey is set to a valid Honeycomb key, then Refinery can use the listed key to send data.
The exact behavior depends on the value of SendKeyMode.
SendKeyMode controls how SendKey is used to replace or augment API keys used in incoming telemetry.Controls how SendKey is used to replace or supply API keys used in incoming telemetry.
If AcceptOnlyListedKeys is true, then SendKeys will only be used for events with keys listed in ReceiveKeys.
none uses the incoming key for all telemetry (default).
all overwrites all keys, even missing ones, with SendKey.
nonblank overwrites all supplied keys but will not inject SendKey if the incoming key is blank.
listedonly overwrites only the keys listed in ReceiveKeys.
unlisted uses the SendKey for all events except those with keys listed in ReceiveKeys, which use their original keys.
missingonly uses the SendKey only to inject keys into events with blank keys.
All other events use their original keys.
Eligible for live reload.
Type: string
Default: none
Options: none, all, nonblank, listedonly, unlisted, missingonly
AddRuleReasonToTrace controls whether to decorate traces with Refinery rule evaluation results.When enabled, this setting causes traces that are sent to Honeycomb to include the field meta.refinery.reason.
This field contains text indicating which rule was evaluated that caused the trace to be included.
This setting also includes the field meta.refinery.send_reason, which contains the reason that the trace was sent.
Possible values of this field are trace_send_got_root, which means that the root span arrived; trace_send_expired, which means that TraceTimeout was reached; trace_send_ejected_full, which means that the trace cache was full; and trace_send_ejected_memsize, which means that Refinery was out of memory.
These names are also the names of metrics that Refinery tracks.
We recommend enabling this setting whenever a rules-based sampler is in use, as it is useful for debugging and understanding the behavior of your Refinery installation.
AddSpanCountToRoot controls whether to add a metadata field to root spans that indicates the number of child elements in a trace.The added metadata field, meta.span_count, indicates the number of child elements on the trace at the time the sampling decision was made.
If true and AddCountsToRoot is set to false, then Refinery will add meta.span_count to the root span.
AddCountsToRoot controls whether to add metadata fields to root spans that indicates the number of child spans, span events, span links, and honeycomb events.If true, then Refinery will ignore the AddSpanCountToRoot setting and add the following fields to the root span based on the values at the time the sampling decision was made:
meta.span_count: the number of child spans on the trace
meta.span_event_count: the number of span events on the trace
meta.span_link_count: the number of span links on the trace
meta.event_count: the number of honeycomb events on the trace
AddHostMetadataToTrace specifies whether to add host metadata to traces.If true, then Refinery will add the following tag to all traces: - meta.refinery.local_hostname: the hostname of the Refinery node
SendDelay is the duration to wait after the root span arrives before sending a trace.This setting is a short timer that is triggered when a trace is marked complete by the arrival of the root span.
Refinery waits for this duration before sending the trace.
This setting exists to allow for asynchronous spans and small network delays to elapse before sending the trace.
SendDelay is not applied if the TraceTimeout expires or the SpanLimit is reached.
BatchTimeout is how frequently Refinery sends unfulfilled batches.By default, this setting uses the DefaultBatchTimeout in libhoney as its value, which is 100ms.
TraceTimeout is the duration to wait before making the trace decision on an incomplete trace.A long timer; it represents the outside boundary of how long to wait before making the trace decision about an incomplete trace.
Normally trace decisions (send or drop) are made when the root span arrives.
Sometimes the root span never arrives (for example, due to crashes).
Once this timer fires, Refinery will make a trace decision based on the spans that have arrived so far.
This ensures sending a trace even when the root span never arrives.
After the trace decision has been made, Refinery retains a record of that decision for a period of time.
When additional spans (including the root span) arrive, they will be kept or dropped based on the original decision.
If particularly long-lived traces are present in your data, then you should increase this timer.
Note that this increase will also increase the memory requirements for Refinery.
SpanLimit is the number of spans after which a trace becomes eligible for a trace decision.This setting helps to keep memory usage under control.
If a trace has more than this set number of spans, then it becomes eligible for a trace decision.
It’s most helpful in a situation where a sudden burst of many spans in a large trace hits Refinery all at once, causing memory usage to spike and possibly crashing Refinery.
MaxBatchSize is the maximum number of events to be included in each batch for sending.This value is used to set the BatchSize field in the libhoney library used to send data to Honeycomb.
If you have particularly large traces, then you should increase this value.
Note that this will also increase the memory requirements for Refinery.
SendTicker is the interval between checks for traces to send.A short timer that determines the duration between trace cache review runs to send.
Increasing this will spend more time processing incoming events to reduce incoming_ or peer_router_dropped spikes.
Decreasing this will check the trace cache for timeouts more frequently.
MaxExpiredTraces is the maximum number of expired traces to process.This setting controls how many traces are processed when it is time to make a sampling decision.
Up to this many traces will be processed every SendTicker duration.
If this number is too small it will mean Refinery is spending less time calculating sampling decisions, resulting in data arriving at Honeycomb slower.
Additionally, MaxExpiredTraces indirectly affects the system’s health check behavior.
The HealthCheckTimeout will be automatically adjusted based on this value to ensure health checks remain accurate relative to the configured processing load.
If your collector_collect_loop_duration_ms is above 3 seconds it is recommended to reduce this value and the SendTicker duration.
This will mean Refinery makes fewer sampling decision calculations each SendTicker tick, but gets the chance to make decisions more often.
DebugServiceAddr is the IP and port where the debug service runs.The debug service is generally only used when debugging Refinery itself, and will only run if the command line option -d is specified.
If this value is not specified, then the debug service runs on the first open port between localhost:6060 and localhost:6069.
QueryAuthToken is the token that must be specified to access the /query endpoint. Setting this value via a command line flag may expose credentials - it is recommended to use the environment variable or a configuration file.This token must be specified with the header “X-Honeycomb-Refinery-Query” in order for a /query request to succeed.
These /query requests are intended for debugging Refinery during setup and are not typically needed in normal operation.
If not specified, then the /query endpoints are inaccessible.
AdditionalErrorFields is a list of span fields to include when logging errors happen during the ingestion of events.For example, the span too large error.
This is primarily useful in trying to track down misbehaving senders in a large installation.
The fields dataset, apihost, and environment are always included.
If a field is not present in the span, then it will not be present in the error log.
DryRun controls whether sampling is applied to incoming traces.If enabled, then Refinery marks the traces that would be dropped given the current sampling rules, and sends all traces regardless of the sampling decision.
This is useful for evaluating sampling rules.
When DryRun is enabled, traces is decorated with meta.refinery. dryrun.kept that is set to true or false, based on whether the trace would be kept or dropped.
In addition, SampleRate will be set to the incoming rate for all traces, and the field meta.refinery.dryrun.sample_rate will be set to the sample rate that would have been used.
NOTE: This setting is not compatible with TraceCache=distributed, because drop trace decisions shared among peers do not contain all the relevant information needed to send traces to Honeycomb.
Type is the type of logger to use.The setting specifies where (and if) Refinery sends logs.
none means that logs are discarded.
honeycomb means that logs will be forwarded to Honeycomb as events according to the set Logging settings.
stdout means that logs will be written to stdout.
Level is the logging level above which Refinery should send a log to the logger.warn is the recommended level for production.
debug is very verbose, and should not be used in production environments.
APIHost is the URL of the Honeycomb API where Refinery sends its logs.Refinery’s internal logs will be sent to this host using the standard Honeycomb Events API.
APIKey is the API key used to send Refinery’s logs to Honeycomb. Setting this value via a command line flag may expose credentials - it is recommended to use the environment variable or a configuration file.It is recommended that you create a separate team and key for Refinery logs.
SamplerEnabled controls whether logs are sampled before sending to Honeycomb.The sample rate is controlled by the SamplerThroughput setting.
The sampler used throttles the rate of logs sent to Honeycomb from any given source within Refinery — it should effectively limit the rate of redundant messages.
SamplerThroughput is the sampling throughput for logs in events per second.The sampling algorithm attempts to make sure that the average throughput approximates this value, while also ensuring that all unique logs arrive at Honeycomb at least once per sampling period.
AdditionalAttributes adds the provided attributes to all logs written by the Honeycomb logger.When supplying via a environment variable, the value should be a string of comma-separated key-value pairs.
When supplying via the command line, the value should be a key value pair.
If multiple key-value pairs are needed, each should be supplied via its own command line flag.
The key-value pairs must use ’:’ as the separator.
SamplerThroughput is the sampling throughput for logs in events per second.The sampling algorithm attempts to make sure that the average throughput approximates this value, while also ensuring that all unique logs arrive at stdout at least once per sampling period.
Enabled controls whether to expose Refinery metrics over the PrometheusListenAddr port.Each of the metrics providers can be enabled or disabled independently.
Metrics can be sent to multiple destinations.
ListenAddr is the IP and port the Prometheus Metrics server will run on.Determines the interface and port on which Prometheus will listen for requests for /metrics.
Must be different from the main Refinery listener.
Only used if Enabled is true in PrometheusMetrics.
OTelMetrics contains configuration for Refinery’s OpenTelemetry (OTel) metrics.
This is the preferred way to send metrics to Honeycomb.
New installations should prefer OTelMetrics.
Enabled controls whether to send metrics via OpenTelemetry.Each of the metrics providers can be enabled or disabled independently.
Metrics can be sent to multiple destinations.
APIHost is the URL of the OpenTelemetry API to which metrics will be sent.Refinery’s internal metrics will be sent to the /v1/metrics endpoint on this host.
APIKey is the API key used to send Honeycomb metrics via OpenTelemetry. Setting this value via a command line flag may expose credentials - it is recommended to use the environment variable or a configuration file.It is recommended that you create a separate team and key for Refinery metrics.
If this is blank, then Refinery will not set the Honeycomb-specific headers for OpenTelemetry, and your APIHost must be set to a valid OpenTelemetry endpoint.
Compression is the compression algorithm to use when sending OpenTelemetry metrics to Honeycomb.gzip is the default and recommended value.
In rare circumstances, compression costs may outweigh the benefits, in which case none may be used.
AdditionalAttributes adds the provided attributes as resource attributes on all OpenTelemetry metrics emitted by Refinery.This is useful for injecting deployment-specific metadata (such as a cluster ID or environment name) into metrics so they can be filtered or grouped in the metrics backend.
Both keys and values must be strings.
When supplying via a environment variable, the value should be a string of comma-separated key-value pairs.
When supplying via the command line, the value should be a key value pair.
If multiple key-value pairs are needed, each should be supplied via its own command line flag.
The key-value pairs must use ’:’ as the separator.
APIHost is the URL of the OpenTelemetry API to which traces will be sent.Refinery’s internal traces will be sent to the /v1/traces endpoint on this host.
APIKey is the API key used to send Refinery’s traces to Honeycomb. Setting this value via a command line flag may expose credentials - it is recommended to use the environment variable or a configuration file.It is recommended that you create a separate team and key for Refinery telemetry.
If this value is blank, then Refinery will not set the Honeycomb-specific headers for OpenTelemetry, and your APIHost must be set to a valid OpenTelemetry endpoint.
SampleRate is the rate at which Refinery samples its own traces.This is the Honeycomb sample rate used to sample traces sent by Refinery.
Since each incoming span generates multiple outgoing spans, a minimum sample rate of 100 is strongly advised.
Insecure controls whether to send Refinery’s own OpenTelemetry traces via http instead of https.When true Refinery will export its internal traces over http instead of https.
Useful if you plan on sending your traces to a different refinery instance for tail sampling.
Type is the type of peer management to use.Peer management is the mechanism by which Refinery locates its peers.
file means that Refinery gets its peer list from the Peers list in this config file.
It also prevents Refinery from using a publish/subscribe mechanism to propagate peer lists, stress levels, and configuration changes.
redis means that Refinery uses a Publish/Subscribe mechanism, implemented on Redis, to propagate peer lists, stress levels, and notification of configuration changes much more quickly than the legacy mechanism.
The recommended setting is redis, especially for new installations.
If redis is specified, fields in RedisPeerManagement must also be set.
Identifier specifies the identifier to use when registering itself with peers.By default, when using a peer registry, Refinery will use the local hostname to identify itself to other peers.
If your environment requires something else, (for example, if peers cannot resolve each other by name), then you can specify the exact identifier, such as an IP address, to use here.
Overrides IdentifierInterfaceName, if both are set.
IdentifierInterfaceName specifies a network interface to use when finding a local hostname.By default, when using a peer registry, Refinery will use the local hostname to identify itself to other peers.
If your environment requires that you use IPs as identifiers (for example, if peers cannot resolve each other by name), then you can specify the network interface that Refinery is listening on here.
Refinery will use the first unicast address that it finds on the specified network interface as its identifier.
UseIPV6Identifier specifies that Refinery should use an IPV6 address as its identifier.If using IdentifierInterfaceName, Refinery will default to the first IPv4 unicast address it finds for the specified interface.
If this value is specified, then Refinery will use the first IPV6 unicast address found.
Peers is the list of peers to use when Type is “file”, excluding self.This list is ignored when Type is “redis”.
The format is a list of strings of the form “scheme://host:port”.
ClusterHosts is a list of host and port pairs for the instances in a Redis Cluster, and used for managing peer cluster membership.This configuration enables Refinery to connect to a Redis deployment setup in Cluster Mode.
Each entry in the list should follow the format host:port.
If ClusterHosts is specified, the Host setting will be ignored.
Username is the username used to connect to Redis for peer cluster membership management. Setting this value via a command line flag may expose credentials - it is recommended to use the environment variable or a configuration file.Many Redis installations do not use this field.
Password is the password used to connect to Redis for peer cluster membership management. Setting this value via a command line flag may expose credentials - it is recommended to use the environment variable or a configuration file.Many Redis installations do not use this field.
AuthCode is the string used to connect to Redis for peer cluster membership management using an explicit AUTH command. Setting this value via a command line flag may expose credentials - it is recommended to use the environment variable or a configuration file.Many Redis installations do not use this field.
ClusterName is a cluster identifier used as a prefix for Redis pubsub channel names.ClusterName is used to namespace Redis pubsub channels when multiple Refinery clusters share the same Redis instance.
If set, all pubsub channel names will be prefixed with this value (e.g., “production:peers”).
This allows multiple clusters to coexist without interfering with each other.
Must be alphanumeric if specified.
UseTLS enables TLS when connecting to Redis for peer cluster membership management.When enabled, this setting sets the MinVersion in the TLS configuration to 1.2.
UseTLSInsecure disables certificate checks when connecting to Redis for peer cluster membership management.This setting is intended for use with self-signed certificates and sets the InsecureSkipVerify flag within Redis.
Collection contains the settings that are relevant to collecting spans together to make traces.
If none of the memory settings are used, then Refinery will not attempt to limit its memory usage.
This is not recommended for production use since a burst of traffic could cause Refinery to run out of memory and crash.
PeerQueueSize is the maximum number of in-flight spans redirected from other peers stored in the peer span queue.The peer span queue serves as a buffer for spans redirected from other peers before they are processed.
In the event that this queue reaches its capacity, any subsequent spans will be discarded.
The size of this queue is contingent upon the number of peers within the cluster.
Specifically, with N peers, the queue’s span capacity is determined by (N-1)/N of the total number of spans.
Its minimum value should be at least three times the CacheCapacity.
IncomingQueueSize is the number of in-flight spans to keep in the incoming span queue.The incoming span queue is used to buffer spans before they are processed.
If this queue fills up, then subsequent spans will be dropped.
Its minimum value should be at least three times the CacheCapacity.
AvailableMemory is the amount of system memory available to the Refinery process.This value will typically be set through an environment variable controlled by the container or deploy script.
If this value is zero or not set, then MaxMemoryPercentage cannot be used to calculate the maximum allocation and MaxAlloc will be used instead.
If set, then this must be a memory size.
Sizes with standard unit suffixes (such as MB and GiB) and Kubernetes units (such as M and Gi) are supported.
Fractional values with a suffix are supported.
If AvailableMemory is set, Collections.MaxAlloc must not be defined.
A useful value for this setting will leave 1-2GB of pod memory for overages.
For typical configurations this may be about 85%-90% of the pod’s total memory.
MaxMemoryPercentage is the maximum percentage of memory that should be allocated by the span collector.If nonzero, then it must be an integer value between 1 and 100, representing the target maximum percentage of memory that should be allocated by the span collector.
If set to a non-zero value, then once per tick (see SendTicker) the collector will compare total allocated bytes to this calculated value.
If allocation is too high, then traces will be ejected from the cache early to reduce memory.
Useful values for this setting are generally in the range of 70-90.
MaxAlloc is the maximum number of bytes that should be allocated by the Collector.If set, then this must be a memory size.
Sizes with standard unit suffixes (such as MB and GiB) and Kubernetes units (such as M and Gi) are supported.
Fractional values with a suffix are supported.
See MaxMemoryPercentage for more details.
If set, Collections.AvailableMemory must not be defined.
ShutdownDelay controls the maximum time Refinery can use while draining traces at shutdown.This setting controls the duration that Refinery expects to have to drain in-process traces before shutting down an instance.
When asked to shut down gracefully, Refinery stops accepting new spans immediately and drains the remaining traces by sending them to remaining peers.
This value should be set to a bit less than the normal timeout period for shutting down without forcibly terminating the process.
HealthCheckTimeout controls the maximum duration allowed for collection health checks to complete.The HealthCheckTimeout setting specifies the maximum duration allowed for the health checks of the collection subsystems to complete.
If a subsystem does not respond within this timeout period, it will be marked as unhealthy.
This timeout value should be set carefully to ensure that transient delays do not lead to unnecessary failure detection while still allowing for timely identification of actual health issues.
This timeout should be configured to balance responsiveness and stability — allowing for timely detection of real health issues without being overly sensitive to brief or harmless delays.
Refinery will adjust the timeout based on the configured MaxExpiredTraces, so that health checks remain effective under varying system conditions.
WorkerCount is the number of parallel collection workers to run for trace processing.Controls the number of parallel collection workers used for processing traces.
Each worker processes a subset of traces independently using consistent hashing.
Values greater than 1 enable parallel processing which can improve throughput on multi-core systems.
The default of 0 means Refinery will automatically set this value to the number of logical CPUs available at startup.
EnvironmentCacheTTL is the duration for which environment information is cached.This is the amount of time for which Refinery caches environment information, which it looks up from Honeycomb for each different APIKey.
This information is used when making sampling decisions.
If you have a very large number of environments, then you may want to increase this value.
CompressPeerCommunication determines whether Refinery will compress span data it forwards to peers.If it costs money to transmit data between Refinery instances (for example, when spread across AWS availability zones), then you almost certainly want compression enabled to reduce your bill.
The option to disable it is provided as an escape hatch for deployments that value lower CPU utilization over data transfer costs.
AdditionalAttributes is a map that can be used for injecting user-defined attributes into every span.For example, it could be used for naming a Refinery cluster.
Both keys and values must be strings.
TraceNames is the list of field names to use for the trace ID.The first field in the list that is present in an incoming span will be used as the trace ID.
If none of the fields are present, then Refinery treats the span as not being part of a trace and forwards it immediately to Honeycomb.
ParentNames is the list of field names to use for the parent ID.The first field in the list that is present in an event will be used as the parent ID.
A trace without a parent_id is assumed to be a root span.
ListenAddr is the address Refinery listens to for incoming GRPC OpenTelemetry events.Incoming traffic is expected to be unencrypted, so if using SSL, then put something like nginx in front to do the decryption.
MaxConnectionIdle is the amount of time to permit an idle connection.A duration for the amount of time after which an idle connection will be closed by sending a GoAway.
“Idle” means that there are no active RPCs.
“0s” sets duration to infinity, but this is not recommended for Refinery deployments behind a load balancer, because it will prevent the load balancer from distributing load evenly among peers.
MaxConnectionAge is the maximum amount of time a gRPC connection may exist.After this duration, the gRPC connection is closed by sending a GoAway.
A random jitter of +/-10% will be added to MaxConnectionAge to spread out connection storms.
0s sets duration to infinity; a value measured in low minutes will help load balancers to distribute load among peers more evenly.
MaxConnectionAgeGrace is the duration beyond MaxConnectionAge after which the connection will be forcibly closed.This setting is in case the upstream node ignores the GoAway request.
“0s” sets duration to infinity.
KeepAlive is the duration between keep-alive pings.After this amount of time, if the client does not see any activity, then it pings the server to see if the transport is still alive.
“0s” sets duration to 2 hours.
KeepAliveTimeout is the duration the server waits for activity on the connection.This is the amount of time after which if the server does not see any activity, then it pings the client to see if the transport is still alive.
“0s” sets duration to 20 seconds.
MaxSendMsgSize is the maximum message size the server can send.The server enforces a maximum message size to avoid exhausting the memory available to the process by a single request.
The size is expressed in bytes.
MaxRecvMsgSize is the maximum message size the server can receive.The server enforces a maximum message size to avoid exhausting the memory available to the process by a single request.
The size is expressed in bytes.
KeptSize is the number of traces preserved in the cuckoo kept traces cache.Refinery keeps a record of each trace that was kept and sent to Honeycomb, along with some statistical information.
This is most useful in cases where the trace was sent before sending the root span, so that the root span can be decorated with accurate metadata.
Default is 10_000 traces.
Each trace in this cache consumes roughly 200 bytes.
DroppedSize is the size of the cuckoo dropped traces cache.This cache consumes 4-6 bytes per trace at a scale of millions of traces.
Changing its size with live reload sets a future limit, but does not have an immediate effect.
SizeCheckInterval controls how often the cuckoo cache re-evaluates its remaining capacity.This cache is quite resilient so it does not need to happen very often, but the operation is also inexpensive.
Default is 10 seconds.
StressRelief controls the Stress Relief mechanism, which is used to prevent Refinery from being overwhelmed by a large number of traces.There is a metric called stress_level that is emitted as part of Refinery metrics.
It is a measure of Refinery’s throughput rate relative to its processing rate, combined with the amount of room in its internal queues, and ranges from 0 to 100.stress_level is generally expected to be 0 except under heavy load.
When stress levels reach 100, there is an increased chance that Refinery will become unstable.
To avoid this problem, the Stress Relief system can do deterministic sampling on new trace traffic based solely on TraceID, without having to store traces in the cache or take the time processing sampling rules.
Existing traces in flight will be processed normally, but when Stress Relief is active, trace decisions are made deterministically on a per-span basis; all spans will be sampled according to the SamplingRate specified here.Once Stress Relief activates (by exceeding the ActivationLevel), it will not deactivate until stress_level falls below the DeactivationLevel.When it deactivates, normal trace decisions are made — and any additional spans that arrive for traces that were active during Stress Relief will respect the decisions made during that time.
The measurement of stress is a lagging indicator and is highly dependent on Refinery configuration and scaling.
Other configuration values should be well tuned first, before adjusting the Stress Relief Activation parameters.
Stress Relief is not a substitute for proper configuration and scaling, but it can be used as a safety valve to prevent Refinery from becoming unstable under heavy load.
Mode is a string indicating how to use Stress Relief.This setting sets the Stress Relief mode.
“never” means that Stress Relief will never activate.
“monitor” is the recommended setting, and means that Stress Relief will monitor the status of Refinery and activate according to the levels set by fields such as ActivationLevel.
“always” means that Stress Relief is always on, which may be useful in an emergency situation.
ActivationLevel is the stress_level (from 0-100) at which Stress Relief is triggered.This value must be greater than DeactivationLevel and should be high enough that it is not reached in normal operation.
DeactivationLevel is the stress_level (from 0-100) at which Stress Relief is turned off.This setting is subject to MinimumActivationDuration.
The value must be less than ActivationLevel.
SamplingRate is the sampling rate to use when Stress Relief is activated.All new traces will be deterministically sampled at this rate based only on the traceID.
It should be chosen to be a rate that sends fewer samples than the average sampling rate Refinery is expected to generate.
For example, if Refinery is configured to normally sample at a rate of 1 in 10, then Stress Relief should be configured to sample at a rate of at least 1 in 30.
If this value is configured to send more data to Honeycomb during stress relief than the normal average sampling strategy, it may overwhelm the upstream send queue and have the opposite of the desired effect.
MinimumActivationDuration is the minimum time that Stress Relief will stay enabled once activated.This setting helps to prevent oscillations.
Eligible for live reload.
Type: duration
Default: 10s
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Honeycomb Docs","colors":{"primary":"#0298ec","light":"#0298ec","dark":"#0160a4"},"logo":{"light":"https://mintcdn.com/honeycomb/TYbxiKcJ1fL3Sm5n/_assets/logos/light.svg?fit=max\u0026auto=format\u0026n=TYbxiKcJ1fL3Sm5n\u0026q=85\u0026s=27a1eaed720bce94471b9408761a57a5","dark":"https://mintcdn.com/honeycomb/TYbxiKcJ1fL3Sm5n/_assets/logos/dark.svg?fit=max\u0026auto=format\u0026n=TYbxiKcJ1fL3Sm5n\u0026q=85\u0026s=37c10aab54c3f49068831ba2b3f72519"},"favicon":"https://mintcdn.com/honeycomb/FS58DPvSVOqwGF9Q/favicon.ico?fit=max\u0026auto=format\u0026n=FS58DPvSVOqwGF9Q\u0026q=85\u0026s=f2dcbbe978265dbef9b3e5c895466dfc","navbar":{"links":[{"href":"https://status.honeycomb.io/","label":"Status"},{"href":"https://support.honeycomb.io/","label":"Support"}],"primary":{"type":"button","label":"Log in to Honeycomb","href":"https://ui.honeycomb.io/"}},"footer":{"socials":{"bluesky":"https://bsky.app/profile/honeycomb.io","github":"https://github.com/honeycombio","linkedin":"https://linkedin.com/company/honeycomb.io","youtube":"https://www.youtube.com/channel/UCty8KGQ3oAP0MQQmLIv7k0Q"}},"fonts":{"heading":{"family":"Roboto","weight":600},"body":{"family":"Roboto","weight":400}},"styling":{"eyebrows":"breadcrumbs","codeblocks":{},"latex":true},"integrations":{"amplitude":{"apiKey":"3b49e4f1b31c8cc751801eb555172ee7"},"ga4":{"measurementId":"G-6GB1G2KSLD"},"plausible":{"domain":"docs.honeycomb.io","server":"stats.honeycomb.io"},"telemetry":{"enabled":true},"cookies":{"key":"honeycomb_docs_consent","value":"yes"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"navigation":{"global":{"anchors":[{"anchor":"Docs Home","icon":"home","href":"/"},{"anchor":"Blog","icon":"bullhorn","href":"https://www.honeycomb.io/blog"},{"anchor":"Honeycomb Academy","icon":"book","href":"https://academy.honeycomb.io/"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"honeycomb","hasAudioNarration":false,"actualSubdomain":"honeycomb","customDomains":["docs.honeycomb.io"],"gitSource":{"type":"github","owner":"honeycombio","repo":"docs","deployBranch":"main","contentDirectory":"mintlify","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae36b78da69a4c580ba6e85","collectionId":"97922678-a54f-4f6e-9745-0805daf8d120","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae36b78da69a4c580ba6e85"},"feedback":{"thumbs":true,"contextualFeedback":{"allowEmail":false}},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED","enabled":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED","enabled":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae36b78da69a4c580ba6e85","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"Send Data","count":234},{"language":"default","tag":"Manage Pipelines","count":148},{"language":"default","tag":"Honeycomb Telemetry Pipeline","count":145},{"language":"default","tag":"Pipeline Manager","count":142},{"language":"default","tag":"API Reference","count":108},{"language":"default","tag":"Sources","count":93},{"language":"default","tag":"API Endpoints","count":90},{"language":"default","tag":"Investigate","count":65},{"language":"default","tag":"Get Started","count":62},{"language":"default","tag":"Processors","count":41}],"searchSettings":{"maxResults":15}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"_assets/stylesheets/badges.css","content":"[class*=hny-badge-]{background-color:var(--hny-badge-bg)!important;color:var(--hny-badge-text)!important;border-color:var(--hny-badge-bg)!important;min-width:4rem!important;height:1.75rem!important;justify-content:center!important;align-items:center!important}[class*=hny-badge-].border,html.dark [class*=hny-badge-].border{background-color:transparent!important;border-color:var(--hny-badge-text)!important}html.dark [class*=hny-badge-]{background-color:var(--hny-badge-bg-dark)!important;color:var(--hny-badge-text-dark)!important;border-color:var(--hny-badge-bg-dark)!important}html.dark [class*=hny-badge-].border{border-color:var(--hny-badge-text-dark)!important;color:var(--hny-badge-text-dark)!important}@media (prefers-color-scheme:dark){html:not(.light) [class*=hny-badge-]{background-color:var(--hny-badge-bg-dark)!important;color:var(--hny-badge-text-dark)!important;border-color:var(--hny-badge-bg-dark)!important}html:not(.light) [class*=hny-badge-].border{background-color:transparent!important;border-color:var(--hny-badge-text-dark)!important;color:var(--hny-badge-text-dark)!important}}.hny-badge-enterprise,.hny-badge-enterprise-addon{--hny-badge-bg:#EAE6F1;--hny-badge-text:#302054;--hny-badge-bg-dark:#60606F;--hny-badge-text-dark:#FFFFFF}.hny-badge-pro{--hny-badge-bg:#E0F2FC;--hny-badge-text:#015B8D;--hny-badge-bg-dark:#163144;--hny-badge-text-dark:#1BA2ED}.hny-badge-beta,.hny-badge-early-access{--hny-badge-bg:#FEEDE2;--hny-badge-text:#954209;--hny-badge-bg-dark:#3B2A23;--hny-badge-text-dark:#F97C27}"},{"filePath":"_assets/stylesheets/icons.css","content":".hny-icon{background-color:var(--hny-icon-color)}"},{"filePath":"_assets/stylesheets/images.css","content":".dark img[src^=http]:not(.nav-logo){background-color:transparent;border-radius:0;padding:0}[data-rmiz-content] img,[data-rmiz-modal-img]{background-color:transparent;box-sizing:border-box;border-radius:.4rem}a.card{border-radius:0!important}a.card img[data-component-part=card-image]{object-fit:contain!important}.dark .integration-logo-invert{filter:invert(1)}.integration-logo-grayscale{filter:grayscale(1)}.dark .integration-logo-grayscale.integration-logo-invert{filter:grayscale(1) invert(1)}"},{"filePath":"_assets/stylesheets/kapa.css","content":"#kapa-ask-ai-btn{display:inline-flex;align-items:center;gap:.4rem;flex-shrink:0;height:2.25rem;padding:0 1rem;margin-left:.5rem;border-radius:.75rem;border:0;background:0 0;box-shadow:0 0 0 1px rgba(156,163,175,.3);color:#6b7280;font-size:.875rem;cursor:pointer;white-space:nowrap;transition:box-shadow .15s ease}#kapa-ask-ai-btn:hover,.dark #kapa-ask-ai-btn{box-shadow:0 0 0 1px rgba(75,85,99,.3)}.kapa-btn-icon svg{width:16px;height:16px}.kapa-btn-icon svg path{fill:#6b7280}.dark .kapa-btn-icon svg path{fill:rgba(255,255,255,.5)}.dark #kapa-ask-ai-btn{color:rgba(255,255,255,.5)}.dark #kapa-ask-ai-btn:hover{box-shadow:0 0 0 1px rgba(107,114,128,.3)}.dark #kapa-ask-ai-btn img{filter:invert(1) opacity(.5)}"},{"filePath":"_assets/stylesheets/links.css","content":".prose a[href^=http]:not(.card):not(:has(img))::after{content:\"↗\";font-size:.75em;vertical-align:baseline;margin-left:2px}"},{"filePath":"_assets/stylesheets/style.css","content":"/* cyrillic-ext */\n@font-face {\n font-family: 'Roboto Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/robotomono/v31/L0xuDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vq_SeW4Ep0.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Roboto Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/robotomono/v31/L0xuDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vq_QOW4Ep0.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek */\n@font-face {\n font-family: 'Roboto Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/robotomono/v31/L0xuDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vq_R-W4Ep0.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Roboto Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/robotomono/v31/L0xuDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vq_S-W4Ep0.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Roboto Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/robotomono/v31/L0xuDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vq_SuW4Ep0.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Roboto Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/robotomono/v31/L0xuDF4xlVMF-BfR8bXMIhJHg45mwgGEFl0_3vq_ROW4.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n.nav-logo{height:2.5rem!important}.prose,.prose-gray{--tw-prose-body:var(--lat-color-foreground-primary-default);--tw-prose-headings:var(--lat-color-foreground-primary-default);--tw-prose-lead:var(--lat-color-foreground-secondary-default);--tw-prose-links:var(--lat-color-foreground-link-default);--tw-prose-bold:var(--lat-color-foreground-primary-default);--tw-prose-invert-body:var(--lat-color-foreground-inverse-default);--tw-prose-invert-headings:var(--lat-color-foreground-inverse-default);--tw-prose-invert-lead:var(--lat-color-foreground-inverse-secondary);--tw-prose-invert-links:var(--lat-color-foreground-inverse-link-default);--tw-prose-invert-bold:var(--lat-color-foreground-inverse-default)}.prose{color:var(--lat-color-foreground-primary-default)!important;line-height:var(--lat-ref-font-line-height-5)!important}#page-title,.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--lat-color-foreground-primary-default)!important;font-weight:var(--lat-ref-font-weight-500)!important;font-size:var(--lat-ref-font-size-700)!important;line-height:var(--lat-ref-font-line-height-8)!important}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--lat-color-foreground-primary-default)!important;font-weight:var(--lat-ref-font-weight-600)!important;font-size:var(--lat-ref-font-size-600)!important;line-height:var(--lat-ref-font-line-height-6)!important}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--lat-color-foreground-primary-default)!important;font-weight:var(--lat-ref-font-weight-600)!important;font-size:var(--lat-ref-font-size-500)!important;line-height:var(--lat-ref-font-line-height-5)!important}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:var(--lat-ref-font-weight-400)!important;line-height:var(--lat-ref-font-line-height-4)!important}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--lat-color-foreground-primary-default)!important;font-weight:600!important}th{color:var(--lat-color-foreground-primary-default)!important}.prose a.link{border-color:var(--lat-color-foreground-link-default)}.font-mono,code,kbd,pre,samp{font-family:var(--lat-ref-font-family-roboto-mono)}code,kbd,pre,samp{font-feature-settings:normal;font-variation-settings:normal;font-size:1em}.sidebar-group{margin-top:.05rem}a.card{border-radius:var(--lat-border-radius-xsmall)!important}"},{"filePath":"_assets/stylesheets/tables.css","content":".schema-table table{font-family:var(--hny-font-mono);font-size:var(--hny-font-mono-size);width:fit-content;min-width:unset}.permissions-table table,.permissions-table td,.permissions-table th{border:0}.flex-style-table table,.permissions-table table{width:100%}.permissions-table tbody tr:nth-child(even),.permissions-table thead tr:nth-child(odd){background-color:var(--hny-table-stripe)}.permissions-table th{padding:var(--hny-permissions-header-padding-v, 10px) .75rem;text-align:center}.permissions-table th:first-child{text-align:left}.permissions-table td{text-align:center;padding-top:var(--hny-permissions-cell-padding-v, 5px);padding-bottom:var(--hny-permissions-cell-padding-v, 5px);padding-left:.75rem;padding-right:.75rem}.permissions-table td:first-child{width:var(--hny-permissions-col1-width, 50%);text-align:left}"},{"filePath":"_assets/stylesheets/tokens.css","content":":root{--hny-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco,\n Consolas, \"Liberation Mono\", \"Courier New\",\n monospace;--hny-font-mono-size:0.8rem;--hny-permissions-col1-width:50%;--hny-permissions-cell-padding-v:5px;--hny-permissions-header-padding-v:10px}html.light{--hny-table-stripe:rgba(107, 114, 128, 0.1);--hny-icon-color:#33383F}html.dark{--hny-table-stripe:#1e2128;--hny-icon-color:#C9CDD2}@media (prefers-color-scheme:dark){html.dark{--hny-table-stripe:#1e2128;--hny-icon-color:#C9CDD2}}"},{"filePath":"_assets/stylesheets/mermaid.css","content":".mermaid .label{font-size:.875rem!important;padding:1rem .25rem!important}foreignObject>div>span>p{font-size:.75rem!important;padding:.25rem!important;text-align:justified!important}"},{"filePath":"_assets/stylesheets/sidebar.css","content":"ul.list-none{padding-bottom:1rem;border-bottom:1px solid rgb(107 114 128/.4)}.nav-anchor{margin-bottom:.25rem}#navigation-items>ul.sidebar-group{border-top:.5px solid var(--border-color);padding-top:1rem}div.sidebar-group-header{margin-top:-.5rem;margin-bottom:.1rem;text-transform:uppercase;letter-spacing:.01rem}div.sidebar-group{margin-bottom:1rem;font-size:.9rem}#sidebar-content li>a,#sidebar-content li>button,#sidebar-content li[data-active]>button{padding-top:.1rem;padding-bottom:.1rem;font-size:.9rem}#navigation-items>ul.sidebar-group:last-of-type{margin-top:0!important;padding-top:0!important}#navigation-items>ul.sidebar-group:nth-last-of-type(2){border-top:1px solid var(--border-color);padding-top:1rem;margin-top:1rem!important}.nav-tag-pill{min-width:2rem;text-align:center}.flex-1.flex.min-w-0.flex-wrap{flex-wrap:nowrap}.nav-tag-pill-text{text-transform:uppercase;background:0 0;padding:0;border-left:1px solid currentColor;border-radius:0;padding-left:.25rem}#sidebar-content a[href^=\"https://docs.honeycomb.io\"]::after,#sidebar-content a[href^=\"https://docs.honeycomb.io/\"] svg{display:none}"},{"filePath":"_assets/stylesheets/tabs.css","content":".hny-client-tabs>.tabs.tab-container>ul[data-component-part=tabs-list]{border-bottom:none;flex-wrap:wrap;gap:8px;margin-bottom:.375rem!important}.hny-client-tabs>.tabs.tab-container>ul[data-component-part=tabs-list]>li{list-style:none}.hny-client-tabs>.tabs.tab-container>ul[data-component-part=tabs-list]>li [data-component-part=tab-button]{border:1px solid #b9c2cc;border-radius:6px;padding:6px 14px!important;margin-bottom:0!important;color:#25303e;font-weight:500}.hny-client-tabs>.tabs.tab-container>ul[data-component-part=tabs-list]>li [data-component-part=tab-button][data-active=true]{background:#0160a4;border-color:#0160a4;color:#fff}.dark .hny-client-tabs>.tabs.tab-container>ul[data-component-part=tabs-list]>li [data-component-part=tab-button]{border-color:#4b5563;color:#e5e7eb}.hny-client-tabs>.tabs.tab-container>div>[data-component-part=tab-content]{border:1px solid #cbd5e1;border-radius:12px;padding:1.25rem 1.5rem;margin-top:.75rem}.dark .hny-client-tabs>.tabs.tab-container>div>[data-component-part=tab-content]{border-color:#475569!important}.hny-client-tabs [data-component-part=tab-button]:focus-visible{outline:2px solid #0298ec;outline-offset:2px}"},{"filePath":"_assets/stylesheets/_tokens.css","content":":root{--lat-ref-border-radius-0:0px;--lat-ref-border-radius-50:2px;--lat-ref-border-radius-75:3px;--lat-ref-border-radius-100:4px;--lat-ref-border-radius-200:8px;--lat-ref-border-radius-300:12px;--lat-ref-border-radius-400:16px;--lat-ref-border-radius-2000:80px;--lat-ref-border-width-0:0px;--lat-ref-border-width-25:1px;--lat-ref-border-width-50:2px;--lat-ref-color-blue-500:#225dbe;--lat-ref-color-blue-600:#1c4c9c;--lat-ref-color-blue-700:#0f3880;--lat-ref-color-blue-800:#002566;--lat-ref-color-blue-900:#00173e;--lat-ref-color-gold-100:#ffeab2;--lat-ref-color-gold-1000:#a94a04;--lat-ref-color-gold-1100:#7a3302;--lat-ref-color-gold-200:#ffdd81;--lat-ref-color-gold-300:#ffd14d;--lat-ref-color-gold-400:#ffc626;--lat-ref-color-gold-50:#fffae1;--lat-ref-color-gold-500:#ffbc04;--lat-ref-color-gold-600:#ffb000;--lat-ref-color-gold-700:#ff9b03;--lat-ref-color-gold-800:#fe8a04;--lat-ref-color-gold-900:#f26905;--lat-ref-color-gray-100:#ebeff4;--lat-ref-color-gray-1000:#1e2023;--lat-ref-color-gray-1050:#1b1d20;--lat-ref-color-gray-1100:#191a1b;--lat-ref-color-gray-200:#dee3ec;--lat-ref-color-gray-300:#c9d1df;--lat-ref-color-gray-400:#b0baca;--lat-ref-color-gray-50:#f5f7fa;--lat-ref-color-gray-500:#8f94a9;--lat-ref-color-gray-600:#717a89;--lat-ref-color-gray-700:#59606d;--lat-ref-color-gray-800:#444a53;--lat-ref-color-gray-850:#3c4149;--lat-ref-color-gray-900:#33383f;--lat-ref-color-gray-950:#272b30;--lat-ref-color-green-100:#d8efc0;--lat-ref-color-green-1000:#005700;--lat-ref-color-green-200:#bde596;--lat-ref-color-green-300:#a1db6a;--lat-ref-color-green-400:#8ad243;--lat-ref-color-green-50:#eff9e6;--lat-ref-color-green-500:#73ca0d;--lat-ref-color-green-600:#64ba00;--lat-ref-color-green-700:#4ca600;--lat-ref-color-green-800:#329200;--lat-ref-color-green-900:#007000;--lat-ref-color-indigo-100:#d3cdf0;--lat-ref-color-indigo-1000:#100e38;--lat-ref-color-indigo-200:#b4ace6;--lat-ref-color-indigo-300:#9186d9;--lat-ref-color-indigo-400:#7165cc;--lat-ref-color-indigo-50:#edeaf8;--lat-ref-color-indigo-500:#5549be;--lat-ref-color-indigo-600:#4538a8;--lat-ref-color-indigo-700:#362c8f;--lat-ref-color-indigo-800:#282275;--lat-ref-color-indigo-900:#1b185a;--lat-ref-color-miscellaneous-charcoal:#191a1b;--lat-ref-color-miscellaneous-white:#ffffff;--lat-ref-color-pink-100:#fad4e9;--lat-ref-color-pink-1000:#3e0827;--lat-ref-color-pink-200:#f5b0d5;--lat-ref-color-pink-300:#ee84bb;--lat-ref-color-pink-400:#e563a5;--lat-ref-color-pink-50:#fdeef6;--lat-ref-color-pink-500:#dc4d90;--lat-ref-color-pink-600:#c23a7c;--lat-ref-color-pink-700:#a22868;--lat-ref-color-pink-800:#821a53;--lat-ref-color-pink-900:#61103d;--lat-ref-color-purple-100:#dfd3eb;--lat-ref-color-purple-1000:#2e1260;--lat-ref-color-purple-200:#cbb8df;--lat-ref-color-purple-300:#b89bce;--lat-ref-color-purple-400:#ac8dc7;--lat-ref-color-purple-50:#f7f3fb;--lat-ref-color-purple-500:#9b77c2;--lat-ref-color-purple-600:#8659b4;--lat-ref-color-purple-700:#6a37a1;--lat-ref-color-purple-800:#54298f;--lat-ref-color-purple-900:#431e80;--lat-ref-color-red-100:#f7d2d7;--lat-ref-color-red-1000:#85322e;--lat-ref-color-red-200:#e4a3a5;--lat-ref-color-red-300:#d78184;--lat-ref-color-red-400:#e16767;--lat-ref-color-red-50:#fbedf0;--lat-ref-color-red-500:#e65b53;--lat-ref-color-red-600:#d75450;--lat-ref-color-red-700:#c54b49;--lat-ref-color-red-800:#b74643;--lat-ref-color-red-900:#a63f3a;--lat-ref-color-sky-100:#b9def8;--lat-ref-color-sky-1000:#002f7a;--lat-ref-color-sky-200:#8dcaf5;--lat-ref-color-sky-300:#60b5f0;--lat-ref-color-sky-400:#3aa5ee;--lat-ref-color-sky-50:#e3f2fc;--lat-ref-color-sky-500:#0296ec;--lat-ref-color-sky-600:#0088df;--lat-ref-color-sky-700:#0077cc;--lat-ref-color-sky-800:#0066ba;--lat-ref-color-sky-900:#00489c;--lat-ref-color-teal-100:#cce8f0;--lat-ref-color-teal-1000:#023040;--lat-ref-color-teal-200:#aad8e6;--lat-ref-color-teal-300:#7ec3d8;--lat-ref-color-teal-400:#50adc8;--lat-ref-color-teal-50:#eaf6f7;--lat-ref-color-teal-500:#2297b6;--lat-ref-color-teal-600:#0d83a0;--lat-ref-color-teal-700:#0a6d87;--lat-ref-color-teal-800:#085870;--lat-ref-color-teal-900:#054558;--lat-ref-size-0:0px;--lat-ref-size-100:4px;--lat-ref-size-200:8px;--lat-ref-size-300:12px;--lat-ref-size-400:16px;--lat-ref-size-500:20px;--lat-ref-size-600:24px;--lat-ref-size-700:28px;--lat-ref-size-800:32px;--lat-ref-size-900:36px;--lat-ref-size-1000:40px;--lat-ref-size-1100:44px;--lat-ref-size-1200:48px;--lat-ref-size-1300:52px;--lat-ref-size-1400:56px;--lat-ref-size-1500:60px;--lat-ref-size-1600:64px;--lat-ref-size-2000:80px;--lat-ref-space-0:0px;--lat-ref-space-1:2px;--lat-ref-space-2:4px;--lat-ref-space-3:8px;--lat-ref-space-4:12px;--lat-ref-space-5:16px;--lat-ref-space-6:20px;--lat-ref-space-7:24px;--lat-ref-space-8:28px;--lat-ref-space-9:32px;--lat-ref-space-10:36px;--lat-ref-space-11:40px;--lat-ref-space-12:44px;--lat-ref-space-13:48px;--lat-ref-font-line-height-0:0rem;--lat-ref-font-line-height-1:1rem;--lat-ref-font-line-height-2:1.125rem;--lat-ref-font-line-height-3:1.25rem;--lat-ref-font-line-height-4:1.375rem;--lat-ref-font-line-height-5:1.5rem;--lat-ref-font-line-height-6:1.875rem;--lat-ref-font-line-height-7:2.25rem;--lat-ref-font-line-height-8:2.5rem;--lat-ref-font-size-100:0.625rem;--lat-ref-font-size-200:0.75rem;--lat-ref-font-size-300:0.875rem;--lat-ref-font-size-400:1rem;--lat-ref-font-size-500:1.25rem;--lat-ref-font-size-600:1.5rem;--lat-ref-font-size-700:2rem;--lat-ref-font-weight-400:400;--lat-ref-font-weight-500:500;--lat-ref-font-weight-600:600;--lat-ref-font-weight-700:700;--lat-ref-font-family-poppins:'Poppins', Arial, Helvetica, sans-serif;--lat-ref-font-family-roboto:'Roboto', Arial, Helvetica, sans-serif;--lat-ref-font-family-roboto-mono:'Roboto Mono', monospace}.light,:root{--lat-border-radius-zero:0px;--lat-border-radius-xsmall:2px;--lat-border-radius-small:4px;--lat-border-radius-medium:8px;--lat-border-radius-primary-default:8px;--lat-border-radius-secondary-default:12px;--lat-border-radius-container:8px;--lat-border-radius-control-small:4px;--lat-border-radius-circle:80px;--lat-border-width-zero:0px;--lat-border-width-primary-default:1px;--lat-border-width-secondary-default:2px;--lat-color-background-critical-bold:var(--lat-ref-color-red-700);--lat-color-background-critical-bolder:var(--lat-ref-color-red-800);--lat-color-background-critical-boldest:var(--lat-ref-color-red-900);--lat-color-background-critical-default:var(--lat-ref-color-red-100);--lat-color-background-critical-hover:var(--lat-ref-color-red-200);--lat-color-background-critical-subtle:var(--lat-ref-color-red-300);--lat-color-background-informational-default:var(--lat-ref-color-sky-100);--lat-color-background-informational-hover:var(--lat-ref-color-sky-200);--lat-color-background-informational-subtle:var(--lat-ref-color-sky-300);--lat-color-background-interactive-active:var(--lat-ref-color-sky-900);--lat-color-background-interactive-default:var(--lat-ref-color-sky-700);--lat-color-background-interactive-disabled:var(--lat-ref-color-gray-100);--lat-color-background-interactive-hover:var(--lat-ref-color-sky-800);--lat-color-background-inverse-active:var(--lat-ref-color-gray-700);--lat-color-background-inverse-default:var(--lat-ref-color-gray-950);--lat-color-background-inverse-disabled:var(--lat-ref-color-gray-1050);--lat-color-background-inverse-hover:var(--lat-ref-color-gray-900);--lat-color-background-neutral-active:var(--lat-ref-color-sky-50);--lat-color-background-neutral-bold:var(--lat-ref-color-gray-400);--lat-color-background-neutral-bolder:var(--lat-ref-color-gray-600);--lat-color-background-neutral-boldest:var(--lat-ref-color-gray-800);--lat-color-background-neutral-default:var(--lat-ref-color-gray-100);--lat-color-background-neutral-disabled:var(--lat-ref-color-gray-200);--lat-color-background-neutral-hover:var(--lat-ref-color-gray-300);--lat-color-background-neutral-subtle:var(--lat-ref-color-gray-300);--lat-color-background-pink-default:var(--lat-ref-color-pink-100);--lat-color-background-primary-active:var(--lat-ref-color-sky-50);--lat-color-background-primary-default:var(--lat-ref-color-miscellaneous-white);--lat-color-background-primary-disabled:var(--lat-ref-color-gray-100);--lat-color-background-primary-hover:var(--lat-ref-color-gray-50);--lat-color-background-primary-selected:var(--lat-ref-color-gray-200);--lat-color-background-purple-default:var(--lat-ref-color-purple-100);--lat-color-background-secondary-default:var(--lat-ref-color-gray-50);--lat-color-background-secondary-hover:var(--lat-ref-color-gray-200);--lat-color-background-secondary-selected:var(--lat-ref-color-sky-700);--lat-color-background-success-bold:var(--lat-ref-color-green-400);--lat-color-background-success-bolder:var(--lat-ref-color-green-600);--lat-color-background-success-default:var(--lat-ref-color-green-100);--lat-color-background-success-hover:var(--lat-ref-color-green-200);--lat-color-background-success-subtle:var(--lat-ref-color-green-300);--lat-color-background-teal-default:var(--lat-ref-color-teal-100);--lat-color-background-warning-default:var(--lat-ref-color-gold-100);--lat-color-background-warning-hover:var(--lat-ref-color-gold-200);--lat-color-background-warning-subtle:var(--lat-ref-color-gold-300);--lat-color-border-contrast:var(--lat-ref-color-miscellaneous-white);--lat-color-border-contrast-focus:var(--lat-ref-color-miscellaneous-white);--lat-color-border-critical-default:var(--lat-ref-color-red-1000);--lat-color-border-critical-subtle:var(--lat-ref-color-red-1000);--lat-color-border-focus:var(--lat-ref-color-sky-700);--lat-color-border-informational-default:var(--lat-ref-color-sky-800);--lat-color-border-informational-subtle:var(--lat-ref-color-sky-900);--lat-color-border-inverse-active:var(--lat-ref-color-gray-600);--lat-color-border-inverse-default:var(--lat-ref-color-gray-400);--lat-color-border-inverse-disabled:var(--lat-ref-color-gray-700);--lat-color-border-inverse-focus:var(--lat-ref-color-sky-400);--lat-color-border-inverse-hover:var(--lat-ref-color-gray-500);--lat-color-border-neutral-subtle:var(--lat-ref-color-gray-900);--lat-color-border-neutral-subtlest:var(--lat-ref-color-gray-100);--lat-color-border-primary-active:var(--lat-ref-color-gray-700);--lat-color-border-primary-default:var(--lat-ref-color-gray-300);--lat-color-border-primary-disabled:var(--lat-ref-color-gray-200);--lat-color-border-primary-hover:var(--lat-ref-color-gray-700);--lat-color-border-secondary-default:var(--lat-ref-color-gray-600);--lat-color-border-success-default:var(--lat-ref-color-green-900);--lat-color-border-success-subtle:var(--lat-ref-color-green-1000);--lat-color-border-transparent:#ffffff00;--lat-color-border-warning-default:var(--lat-ref-color-gold-1000);--lat-color-border-warning-subtle:var(--lat-ref-color-gold-1100);--lat-color-foreground-critical-default:var(--lat-ref-color-red-1000);--lat-color-foreground-critical-hover:var(--lat-ref-color-red-900);--lat-color-foreground-critical-subtle:var(--lat-ref-color-red-1000);--lat-color-foreground-informational-default:var(--lat-ref-color-sky-900);--lat-color-foreground-informational-subtle:var(--lat-ref-color-sky-900);--lat-color-foreground-inverse-critical-default:var(--lat-ref-color-red-300);--lat-color-foreground-inverse-default:var(--lat-ref-color-miscellaneous-white);--lat-color-foreground-inverse-disabled:var(--lat-ref-color-gray-700);--lat-color-foreground-inverse-link-active:var(--lat-ref-color-sky-300);--lat-color-foreground-inverse-link-default:var(--lat-ref-color-sky-200);--lat-color-foreground-inverse-link-hover:var(--lat-ref-color-sky-300);--lat-color-foreground-inverse-link-visited:var(--lat-ref-color-purple-300);--lat-color-foreground-inverse-secondary:var(--lat-ref-color-gray-300);--lat-color-foreground-inverse-success-default:var(--lat-ref-color-green-500);--lat-color-foreground-inverse-warning-default:var(--lat-ref-color-gold-500);--lat-color-foreground-link-active:var(--lat-ref-color-blue-700);--lat-color-foreground-link-default:var(--lat-ref-color-sky-900);--lat-color-foreground-link-hover:var(--lat-ref-color-blue-700);--lat-color-foreground-link-visited:var(--lat-ref-color-purple-700);--lat-color-foreground-neutral-default:var(--lat-ref-color-gray-700);--lat-color-foreground-neutral-subtle:var(--lat-ref-color-gray-900);--lat-color-foreground-pink-boldest:var(--lat-ref-color-pink-1000);--lat-color-foreground-primary-default:var(--lat-ref-color-gray-900);--lat-color-foreground-primary-disabled:var(--lat-ref-color-gray-600);--lat-color-foreground-purple-boldest:var(--lat-ref-color-purple-1000);--lat-color-foreground-secondary-default:var(--lat-ref-color-gray-700);--lat-color-foreground-secondary-disabled:var(--lat-ref-color-gray-600);--lat-color-foreground-success-boldest:var(--lat-ref-color-green-1000);--lat-color-foreground-success-default:var(--lat-ref-color-green-900);--lat-color-foreground-teal-boldest:var(--lat-ref-color-teal-1000);--lat-color-foreground-warning-boldest:var(--lat-ref-color-gold-1100);--lat-color-foreground-warning-default:var(--lat-ref-color-gold-1000);--lat-color-page-primary:var(--lat-ref-color-miscellaneous-white);--lat-color-page-secondary:var(--lat-ref-color-gray-50);--lat-gradient-rainbow:linear-gradient(90deg, #F96E10, #FFC305, #FFE84F, #78E898, #3EDFFF, #0298EC);--lat-motion-duration-instant:100ms;--lat-motion-duration-fast:150ms;--lat-motion-duration-moderate:200ms;--lat-motion-duration-slow:300ms;--lat-motion-duration-deliberate:500ms;--lat-motion-ease-standard:cubic-bezier(0.4, 0, 0.2, 1);--lat-motion-ease-entrance:cubic-bezier(0.16, 1, 0.3, 1);--lat-motion-ease-exit:cubic-bezier(0.4, 0, 1, 1);--lat-motion-spin-fast:1s;--lat-motion-spin-slow:2.5s;--lat-motion-pulse-slow:1.4s;--lat-motion-type-chart:35ms;--lat-motion-type-erase:20ms;--lat-motion-type-pause:1200ms;--lat-shadow-popover:0 1px 2px rgba(25, 26, 27, 0.06), 0 2px 6px rgba(25, 26, 27, 0.08);--lat-shadow-focus:0 4px 4px rgba(0, 0, 0, 0.12);--lat-shadow-tooltip:0 1px 2px rgba(25, 26, 27, 0.06), 0 2px 6px rgba(25, 26, 27, 0.08);--lat-shadow-small:0 1px 2px rgba(25, 26, 27, 0.06), 0 2px 6px rgba(25, 26, 27, 0.08);--lat-shadow-medium:0 2px 4px rgba(25, 26, 27, 0.06), 0 6px 16px rgba(25, 26, 27, 0.10);--lat-shadow-large:0 4px 8px rgba(25, 26, 27, 0.08), 0 12px 28px rgba(25, 26, 27, 0.14);--lat-shadow-overflow-left:-4px 0 8px rgba(25, 26, 27, 0.08);--lat-shadow-overflow-right:4px 0 8px rgba(25, 26, 27, 0.08);--lat-shadow-overflow-bottom:0 4px 8px rgba(25, 26, 27, 0.08);--lat-size-x0:0px;--lat-size-x1:4px;--lat-size-x2:8px;--lat-size-x3:12px;--lat-size-x4:16px;--lat-size-x5:20px;--lat-size-x6:24px;--lat-size-x7:28px;--lat-size-x8:32px;--lat-size-x9:36px;--lat-size-x10:40px;--lat-size-x11:44px;--lat-size-x12:48px;--lat-size-x13:52px;--lat-size-x14:56px;--lat-size-x15:60px;--lat-size-x16:64px;--lat-size-x20:80px;--lat-space-inline-text:4px;--lat-space-text-to-separator-padding:4px;--lat-space-trigger-to-anchor:4px;--lat-space-gutter-s:8px;--lat-space-text-to-text-s:8px;--lat-space-trigger-s:8px;--lat-space-card-padding:12px;--lat-space-form-s:12px;--lat-space-gutter-m:12px;--lat-space-text-to-component-s:12px;--lat-space-text-to-text-m:12px;--lat-space-trigger-m:12px;--lat-space-form-m:16px;--lat-space-section-s:16px;--lat-space-text-to-component-m:16px;--lat-space-section-m:20px;--lat-space-modal-padding:24px;--lat-space-page-padding:24px;--lat-space-pane:24px;--lat-space-x0:0px;--lat-space-x1:4px;--lat-space-x2:8px;--lat-space-x3:12px;--lat-space-x4:16px;--lat-space-x5:20px;--lat-space-x6:24px;--lat-space-x7:28px;--lat-space-x8:32px;--lat-space-x9:36px;--lat-space-x10:40px;--lat-space-x11:44px;--lat-space-x12:48px;--lat-text-body-default:400 0.875rem 'Roboto', Arial, Helvetica, sans-serif;--lat-text-body-default-italic:italic 400 0.875rem 'Roboto', Arial, Helvetica, sans-serif;--lat-text-body-default-medium:500 0.875rem 'Roboto', Arial, Helvetica, sans-serif;--lat-text-body-small:400 0.75rem 'Roboto', Arial, Helvetica, sans-serif;--lat-text-body-small-medium:500 0.75rem 'Roboto', Arial, Helvetica, sans-serif;--lat-text-body-large:400 1rem 'Roboto', Arial, Helvetica, sans-serif;--lat-text-body-large-italic:italic 400 1rem 'Roboto', Arial, Helvetica, sans-serif;--lat-text-body-large-medium:500 1rem 'Roboto', Arial, Helvetica, sans-serif;--lat-text-code-small:400 0.75rem 'Roboto Mono', monospace;--lat-text-code-medium:400 0.875rem 'Roboto Mono', monospace;--lat-text-heading-1:600 2rem 'Roboto', Arial, Helvetica, sans-serif;--lat-text-heading-2:600 1.5rem 'Roboto', Arial, Helvetica, sans-serif;--lat-text-heading-3:600 1.25rem 'Roboto', Arial, Helvetica, sans-serif;--lat-text-heading-4:600 1rem 'Roboto', Arial, Helvetica, sans-serif;--lat-text-heading-5:600 0.875rem 'Roboto', Arial, Helvetica, sans-serif;--lat-text-heading-6:600 0.75rem 'Roboto', Arial, Helvetica, sans-serif;--lat-z-base:0;--lat-z-sticky:50;--lat-z-chrome:100;--lat-z-overlay:500;--lat-z-modal:600;--lat-z-popover:1000;--lat-z-toast:1500;--lat-z-tooltip:2000;--lat-comp-badge-background-critical-bold:var(--lat-color-background-critical-bold);--lat-comp-badge-background-critical-default:#d781844d;--lat-comp-badge-background-informational-default:#60b5f04d;--lat-comp-badge-background-neutral-default:#c9d1df4d;--lat-comp-badge-background-success-default:#a1db6a4d;--lat-comp-badge-background-warning-default:#ffd14d4d;--lat-comp-badge-border-contrast-default:var(--lat-color-border-contrast);--lat-comp-badge-foreground-critical-default:var(--lat-color-foreground-critical-subtle);--lat-comp-badge-foreground-informational-default:var(--lat-color-foreground-informational-subtle);--lat-comp-badge-foreground-inverse-default:var(--lat-color-foreground-inverse-default);--lat-comp-badge-foreground-neutral-default:var(--lat-color-foreground-neutral-subtle);--lat-comp-badge-foreground-success-default:var(--lat-color-foreground-success-boldest);--lat-comp-badge-foreground-warning-default:var(--lat-color-foreground-warning-boldest);--lat-comp-banner-background-critical-default:#d781844d;--lat-comp-banner-background-critical-hover:var(--lat-color-background-critical-hover);--lat-comp-banner-background-informational-default:#60b5f04d;--lat-comp-banner-background-informational-hover:var(--lat-color-background-informational-hover);--lat-comp-banner-background-neutral-default:#c9d1df4d;--lat-comp-banner-background-neutral-hover:var(--lat-color-background-neutral-hover);--lat-comp-banner-background-success-default:#a1db6a4d;--lat-comp-banner-background-success-hover:var(--lat-color-background-success-hover);--lat-comp-banner-background-warning-default:#ffd14d4d;--lat-comp-banner-background-warning-hover:var(--lat-color-background-warning-hover);--lat-comp-banner-border-critical-default:var(--lat-color-border-critical-subtle);--lat-comp-banner-border-informational-default:var(--lat-color-border-informational-subtle);--lat-comp-banner-border-neutral-default:var(--lat-color-border-neutral-subtle);--lat-comp-banner-border-success-default:var(--lat-color-border-success-subtle);--lat-comp-banner-border-warning-default:var(--lat-color-border-warning-subtle);--lat-comp-banner-foreground-critical-default:var(--lat-color-foreground-critical-subtle);--lat-comp-banner-foreground-informational-default:var(--lat-color-foreground-informational-subtle);--lat-comp-banner-foreground-neutral-default:var(--lat-color-foreground-neutral-subtle);--lat-comp-banner-foreground-success-default:var(--lat-color-foreground-success-boldest);--lat-comp-banner-foreground-warning-default:var(--lat-color-foreground-warning-boldest);--lat-comp-toast-background-primary-default:var(--lat-color-background-inverse-default);--lat-comp-toast-background-primary-hover:var(--lat-color-background-inverse-hover);--lat-comp-toast-foreground-critical-default:var(--lat-color-foreground-inverse-critical-default);--lat-comp-toast-foreground-link-active:var(--lat-color-foreground-inverse-link-active);--lat-comp-toast-foreground-link-default:var(--lat-color-foreground-inverse-link-default);--lat-comp-toast-foreground-link-hover:var(--lat-color-foreground-inverse-link-hover);--lat-comp-toast-foreground-link-visited:var(--lat-color-foreground-inverse-link-visited);--lat-comp-toast-foreground-primary-default:var(--lat-color-foreground-inverse-default);--lat-comp-toast-foreground-success-default:var(--lat-color-foreground-inverse-success-default);--lat-comp-tooltip-background-primary-default:var(--lat-color-background-inverse-default);--lat-comp-tooltip-foreground-primary-default:var(--lat-color-foreground-inverse-default)}.dark{--lat-color-background-critical-bold:var(--lat-ref-color-red-400);--lat-color-background-critical-bolder:var(--lat-ref-color-red-300);--lat-color-background-critical-boldest:var(--lat-ref-color-red-200);--lat-color-background-critical-default:var(--lat-ref-color-red-1000);--lat-color-background-critical-hover:var(--lat-ref-color-red-300);--lat-color-background-critical-subtle:var(--lat-ref-color-red-500);--lat-color-background-informational-default:var(--lat-ref-color-sky-900);--lat-color-background-informational-hover:var(--lat-ref-color-blue-700);--lat-color-background-informational-subtle:var(--lat-ref-color-sky-500);--lat-color-background-interactive-active:var(--lat-ref-color-sky-200);--lat-color-background-interactive-default:var(--lat-ref-color-sky-400);--lat-color-background-interactive-disabled:var(--lat-ref-color-gray-900);--lat-color-background-interactive-hover:var(--lat-ref-color-sky-300);--lat-color-background-inverse-active:var(--lat-ref-color-sky-50);--lat-color-background-inverse-default:var(--lat-ref-color-miscellaneous-white);--lat-color-background-inverse-disabled:var(--lat-ref-color-gray-100);--lat-color-background-inverse-hover:var(--lat-ref-color-gray-50);--lat-color-background-neutral-active:var(--lat-ref-color-gray-700);--lat-color-background-neutral-bold:var(--lat-ref-color-gray-800);--lat-color-background-neutral-bolder:var(--lat-ref-color-gray-600);--lat-color-background-neutral-boldest:var(--lat-ref-color-gray-400);--lat-color-background-neutral-default:var(--lat-ref-color-gray-900);--lat-color-background-neutral-disabled:var(--lat-ref-color-gray-1000);--lat-color-background-neutral-hover:var(--lat-ref-color-gray-800);--lat-color-background-neutral-subtle:var(--lat-ref-color-gray-500);--lat-color-background-pink-default:var(--lat-ref-color-pink-900);--lat-color-background-primary-active:var(--lat-ref-color-gray-700);--lat-color-background-primary-default:var(--lat-ref-color-gray-1000);--lat-color-background-primary-disabled:var(--lat-ref-color-gray-1050);--lat-color-background-primary-hover:var(--lat-ref-color-gray-900);--lat-color-background-primary-selected:var(--lat-ref-color-gray-800);--lat-color-background-purple-default:var(--lat-ref-color-purple-900);--lat-color-background-secondary-default:var(--lat-ref-color-gray-950);--lat-color-background-secondary-hover:var(--lat-ref-color-gray-800);--lat-color-background-secondary-selected:var(--lat-ref-color-sky-700);--lat-color-background-success-bold:var(--lat-ref-color-green-700);--lat-color-background-success-bolder:var(--lat-ref-color-green-400);--lat-color-background-success-default:var(--lat-ref-color-green-1000);--lat-color-background-success-hover:var(--lat-ref-color-green-900);--lat-color-background-success-subtle:var(--lat-ref-color-green-500);--lat-color-background-teal-default:var(--lat-ref-color-teal-900);--lat-color-background-warning-default:var(--lat-ref-color-gold-1000);--lat-color-background-warning-hover:var(--lat-ref-color-gold-1100);--lat-color-background-warning-subtle:var(--lat-ref-color-gold-500);--lat-color-border-contrast:var(--lat-ref-color-miscellaneous-charcoal);--lat-color-border-contrast-focus:var(--lat-ref-color-miscellaneous-white);--lat-color-border-critical-default:var(--lat-ref-color-red-500);--lat-color-border-critical-subtle:var(--lat-ref-color-red-400);--lat-color-border-focus:var(--lat-ref-color-sky-400);--lat-color-border-informational-default:var(--lat-ref-color-sky-500);--lat-color-border-informational-subtle:var(--lat-ref-color-sky-400);--lat-color-border-inverse-active:var(--lat-ref-color-gray-700);--lat-color-border-inverse-default:var(--lat-ref-color-gray-300);--lat-color-border-inverse-disabled:var(--lat-ref-color-gray-200);--lat-color-border-inverse-focus:var(--lat-ref-color-sky-700);--lat-color-border-inverse-hover:var(--lat-ref-color-gray-700);--lat-color-border-neutral-subtle:var(--lat-ref-color-gray-400);--lat-color-border-neutral-subtlest:var(--lat-ref-color-gray-900);--lat-color-border-primary-active:var(--lat-ref-color-gray-500);--lat-color-border-primary-default:var(--lat-ref-color-gray-900);--lat-color-border-primary-disabled:var(--lat-ref-color-gray-700);--lat-color-border-primary-hover:var(--lat-ref-color-gray-500);--lat-color-border-secondary-default:var(--lat-ref-color-gray-600);--lat-color-border-success-default:var(--lat-ref-color-green-400);--lat-color-border-success-subtle:var(--lat-ref-color-green-400);--lat-color-border-transparent:#ffffff00;--lat-color-border-warning-default:var(--lat-ref-color-gold-600);--lat-color-border-warning-subtle:var(--lat-ref-color-gold-400);--lat-color-foreground-critical-default:var(--lat-ref-color-red-300);--lat-color-foreground-critical-hover:var(--lat-ref-color-red-200);--lat-color-foreground-critical-subtle:var(--lat-ref-color-red-100);--lat-color-foreground-informational-default:var(--lat-ref-color-sky-500);--lat-color-foreground-informational-subtle:var(--lat-ref-color-sky-100);--lat-color-foreground-inverse-critical-default:var(--lat-ref-color-red-1000);--lat-color-foreground-inverse-default:var(--lat-ref-color-gray-1050);--lat-color-foreground-inverse-disabled:var(--lat-ref-color-gray-500);--lat-color-foreground-inverse-link-active:var(--lat-ref-color-blue-700);--lat-color-foreground-inverse-link-default:var(--lat-ref-color-sky-900);--lat-color-foreground-inverse-link-hover:var(--lat-ref-color-blue-700);--lat-color-foreground-inverse-link-visited:var(--lat-ref-color-purple-700);--lat-color-foreground-inverse-secondary:var(--lat-ref-color-gray-700);--lat-color-foreground-inverse-success-default:var(--lat-ref-color-green-900);--lat-color-foreground-inverse-warning-default:var(--lat-ref-color-gold-1000);--lat-color-foreground-link-active:var(--lat-ref-color-sky-300);--lat-color-foreground-link-default:var(--lat-ref-color-sky-200);--lat-color-foreground-link-hover:var(--lat-ref-color-sky-300);--lat-color-foreground-link-visited:var(--lat-ref-color-purple-300);--lat-color-foreground-neutral-default:var(--lat-ref-color-gray-100);--lat-color-foreground-neutral-subtle:var(--lat-ref-color-gray-100);--lat-color-foreground-pink-boldest:var(--lat-ref-color-pink-100);--lat-color-foreground-primary-default:var(--lat-ref-color-gray-50);--lat-color-foreground-primary-disabled:var(--lat-ref-color-gray-700);--lat-color-foreground-purple-boldest:var(--lat-ref-color-purple-100);--lat-color-foreground-secondary-default:var(--lat-ref-color-gray-300);--lat-color-foreground-secondary-disabled:var(--lat-ref-color-gray-600);--lat-color-foreground-success-boldest:var(--lat-ref-color-green-100);--lat-color-foreground-success-default:var(--lat-ref-color-green-500);--lat-color-foreground-teal-boldest:var(--lat-ref-color-teal-100);--lat-color-foreground-warning-boldest:var(--lat-ref-color-gold-100);--lat-color-foreground-warning-default:var(--lat-ref-color-gold-500);--lat-color-page-primary:var(--lat-ref-color-gray-1050);--lat-color-page-secondary:var(--lat-ref-color-gray-1100);--lat-gradient-rainbow:linear-gradient(90deg, #F96E10, #FFC305, #FFE84F, #78E898, #3EDFFF, #0298EC);--lat-shadow-popover:0 0 0 1px rgba(255, 255, 255, 0.06), 0 2px 6px rgba(0, 0, 0, 0.35);--lat-shadow-focus:0 4px 8px rgba(0, 0, 0, 0.20);--lat-shadow-tooltip:0 0 0 1px rgba(255, 255, 255, 0.06), 0 2px 6px rgba(0, 0, 0, 0.35);--lat-shadow-small:0 0 0 1px rgba(255, 255, 255, 0.06), 0 2px 6px rgba(0, 0, 0, 0.35);--lat-shadow-medium:0 0 0 1px rgba(255, 255, 255, 0.06), 0 6px 16px rgba(0, 0, 0, 0.40);--lat-shadow-large:0 0 0 1px rgba(255, 255, 255, 0.05), 0 12px 28px rgba(0, 0, 0, 0.45);--lat-shadow-overflow-left:-4px 0 8px rgba(0, 0, 0, 0.35);--lat-shadow-overflow-right:4px 0 8px rgba(0, 0, 0, 0.35);--lat-shadow-overflow-bottom:0 4px 8px rgba(0, 0, 0, 0.35);--lat-comp-badge-background-critical-bold:var(--lat-color-background-critical-bold);--lat-comp-badge-background-critical-default:#e65b534d;--lat-comp-badge-background-informational-default:#0296ec4d;--lat-comp-badge-background-neutral-default:#8f94a94d;--lat-comp-badge-background-success-default:#73ca0d4d;--lat-comp-badge-background-warning-default:#ffbc044d;--lat-comp-badge-border-contrast-default:var(--lat-color-border-contrast);--lat-comp-badge-foreground-critical-default:var(--lat-color-foreground-critical-subtle);--lat-comp-badge-foreground-informational-default:var(--lat-color-foreground-informational-subtle);--lat-comp-badge-foreground-inverse-default:var(--lat-color-foreground-inverse-default);--lat-comp-badge-foreground-neutral-default:var(--lat-color-foreground-neutral-subtle);--lat-comp-badge-foreground-success-default:var(--lat-color-foreground-success-boldest);--lat-comp-badge-foreground-warning-default:var(--lat-color-foreground-warning-boldest);--lat-comp-banner-background-critical-default:#e65b534d;--lat-comp-banner-background-critical-hover:var(--lat-color-background-critical-hover);--lat-comp-banner-background-informational-default:#0296ec4d;--lat-comp-banner-background-informational-hover:var(--lat-color-background-informational-hover);--lat-comp-banner-background-neutral-default:#8f94a94d;--lat-comp-banner-background-neutral-hover:var(--lat-color-background-neutral-hover);--lat-comp-banner-background-success-default:#73ca0d4d;--lat-comp-banner-background-success-hover:var(--lat-color-background-success-hover);--lat-comp-banner-background-warning-default:#ffbc044d;--lat-comp-banner-background-warning-hover:var(--lat-color-background-warning-hover);--lat-comp-banner-border-critical-default:var(--lat-color-border-critical-subtle);--lat-comp-banner-border-informational-default:var(--lat-color-border-informational-subtle);--lat-comp-banner-border-neutral-default:var(--lat-color-border-neutral-subtle);--lat-comp-banner-border-success-default:var(--lat-color-border-success-subtle);--lat-comp-banner-border-warning-default:var(--lat-color-border-warning-subtle);--lat-comp-banner-foreground-critical-default:var(--lat-color-foreground-critical-subtle);--lat-comp-banner-foreground-informational-default:var(--lat-color-foreground-informational-subtle);--lat-comp-banner-foreground-neutral-default:var(--lat-color-foreground-neutral-subtle);--lat-comp-banner-foreground-success-default:var(--lat-color-foreground-success-boldest);--lat-comp-banner-foreground-warning-default:var(--lat-color-foreground-warning-boldest);--lat-comp-toast-background-primary-default:var(--lat-color-background-neutral-default);--lat-comp-toast-background-primary-hover:var(--lat-color-background-neutral-hover);--lat-comp-toast-foreground-critical-default:var(--lat-color-foreground-critical-default);--lat-comp-toast-foreground-link-active:var(--lat-color-foreground-link-active);--lat-comp-toast-foreground-link-default:var(--lat-color-foreground-link-default);--lat-comp-toast-foreground-link-hover:var(--lat-color-foreground-link-hover);--lat-comp-toast-foreground-link-visited:var(--lat-color-foreground-link-visited);--lat-comp-toast-foreground-primary-default:var(--lat-color-foreground-primary-default);--lat-comp-toast-foreground-success-default:var(--lat-color-foreground-success-default);--lat-comp-tooltip-background-primary-default:var(--lat-color-background-neutral-default);--lat-comp-tooltip-foreground-primary-default:var(--lat-color-foreground-primary-default)}#navbar-transition{background-color:var(--lat-color-background-secondary-default)}"}],"page":{"pagePath":"manage-data-volume/sample/honeycomb-refinery/configure","slug":"/manage-data-volume/sample/honeycomb-refinery/configure","pageMetadata":{"title":"Configure Honeycomb Refinery","description":"Customize your Refinery configuration with general settings, peer management, and storage options beyond the default installation values.","sidebarTitle":"Configure","href":"/manage-data-volume/sample/honeycomb-refinery/configure"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Customize your Refinery configuration with general settings, peer management, and storage options beyond the default installation values.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Update the fields in `,_jsx(_components.code,{children:`config.yaml`}),` to customize your Refinery configuration.\nThe `,_jsx(_components.a,{href:`#default-configuration`,children:`default configuration at installation`}),` contains the minimum configuration needed to run Refinery.`]}),`\n`,_jsxs(_components.p,{children:[`Complete your Refinery setup after configuring `,_jsx(_components.code,{children:`config.yaml`}),` by customizing your `,_jsx(_components.a,{href:`/manage-data-volume/sample/honeycomb-refinery/sampling-methods/`,children:`Sampling Methods configuration`}),` in `,_jsx(_components.code,{children:`rules.yaml`}),`.`]}),`\n`,_jsxs(Tip,{children:[_jsxs(_components.p,{children:[`This content applies to Refinery version 3.0 and later.\nFor Refinery version 1.x, visit our GitHub repo for documentation on `,_jsx(_components.a,{href:`https://github.com/honeycombio/refinery/blob/v1.21.0/config_complete.toml`,children:_jsx(_components.code,{children:`config`})}),` and `,_jsx(_components.a,{href:`https://github.com/honeycombio/refinery/blob/v1.21.0/rules_complete.toml`,children:_jsx(_components.code,{children:`rules`})}),`.`]}),_jsxs(_components.p,{children:[`We recommend `,_jsx(_components.a,{href:`/troubleshoot/product-lifecycle/recommended-migrations/upgrade-refinery/`,children:`upgrading to Refinery 3.0`}),` to benefit from new features and improvements.`]})]}),`\n`,_jsx(Heading,{level:`2`,id:`default-configuration`,children:`Default Configuration`}),`\n`,_jsxs(_components.p,{children:[`The default Refinery configuration uses a hardcoded peer list for file-based peer management.\nIt uses the `,_jsx(_components.code,{children:`DeterministicSampler`}),` Sampling Method and a `,_jsx(_components.code,{children:`SampleRate`}),` of 1, meaning that no traffic will be dropped.\nIn the Refinery GitHub repository, `,_jsx(_components.a,{href:`https://github.com/honeycombio/refinery/blob/main/config.yaml`,children:`a minimal default configuration file`}),` exists.`]}),`\n`,_jsxs(_components.p,{children:[`To see the full set of available options, refer below to the `,_jsx(_components.a,{href:`#refinery-config-file`,children:`Refinery Config File`}),`.\nIn the Refinery GitHub repository, a `,_jsx(_components.a,{href:`https://github.com/honeycombio/refinery/blob/main/config_complete.yaml`,children:`fully-commented configuration file`}),` version exists that can be used as a template.`]}),`\n`,_jsx(Heading,{level:`2`,id:`recommended-settings`,children:`Recommended Settings`}),`\n`,_jsx(_components.p,{children:`These recommended settings are not required when using Refinery, but highlighted for their useful purposes.`}),`\n`,_jsxs(_components.p,{children:[`To control access, use `,_jsx(_components.a,{href:`#network-configuration`,children:`Network`}),` and `,_jsx(_components.a,{href:`#access-key-configuration`,children:`Access Key`}),` configuration settings.\nFor peer management, refer to `,_jsx(_components.a,{href:`#peer-management`,children:`Peer Management`}),` configuration, or if using Redis, `,_jsx(_components.a,{href:`#redis-peer-management`,children:`Redis Peer Management`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`If needed, `,_jsx(_components.a,{href:`#debugging`,children:`Debugging`}),` contains configuration values used when setting up and debugging Refinery.`]}),`\n`,_jsxs(_components.p,{children:[`When configured, the `,_jsx(_components.a,{href:`#stress-relief`,children:`Stress Relief`}),` mechanism can prevent Refinery from being overwhelmed by a large number of traces.\nIt sheds load when Refinery is under duress and prevents crash loops.`]}),`\n`,_jsx(Heading,{level:`2`,id:`environment-variables`,children:`Environment Variables`}),`\n`,_jsxs(_components.p,{children:[`Refinery supports using environment variables.\nEnvironment variables take precedence over `,_jsx(_components.code,{children:`config.yaml`}),` file configuration.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Environment Variable`}),_jsx(_components.th,{children:`Configuration Field`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`REFINERY_GRPC_LISTEN_ADDRESS`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`GRPCListenAddr`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`REFINERY_REDIS_HOST`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`PeerManagement.RedisHost`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`REFINERY_REDIS_USERNAME`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`PeerManagement.RedisUsername`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`REFINERY_REDIS_PASSWORD`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`PeerManagement.RedisPassword`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`REFINERY_HONEYCOMB_API_KEY`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`HoneycombLogger.LoggerAPIKey`})})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`REFINERY_HONEYCOMB_METRICS_API_KEY`}),` `,_jsx(`br`,{}),` `,_jsx(_components.code,{children:`REFINERY_HONEYCOMB_API_KEY`})]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`LegacyMetrics.APIKey`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`REFINERY_QUERY_AUTH_TOKEN`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`QueryAuthToken`})})]})]})]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`REFINERY_HONEYCOMB_METRICS_API_KEY`}),` takes precedence over `,_jsx(_components.code,{children:`REFINERY_HONEYCOMB_API_KEY`}),` for the `,_jsx(_components.code,{children:`LegacyMetrics.APIKey`}),` configuration.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`refinery-config-file`,children:`Refinery Config File`}),`\n`,_jsxs(_components.p,{children:[`The Refinery `,_jsx(_components.code,{children:`config`}),` file is a YAML file.\nThe file is split into sections; each section is a group of related configuration options.\nEach section has a name, and the name is used to refer to the section in other parts of the config file.`]}),`\n`,_jsx(Heading,{level:`2`,id:`example`,children:`Example`}),`\n`,_jsxs(_components.p,{children:[`This is an example `,_jsx(_components.code,{children:`config`}),` file:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`General`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` ConfigurationVersion`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`Network`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` ListenAddr`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"0.0.0.0:8080\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` PeerListenAddr`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"0.0.0.0:8081\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`OTelMetrics`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` Enabled`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` APIKey`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`SetThisToAHoneycombKey`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`The remainder of this page describes the sections within the file and the fields in each.`}),`\n`,_jsx(Heading,{level:`2`,id:`general-configuration`,children:`General Configuration`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`General`}),` contains general configuration options that apply to the entire Refinery process.`]}),`\n`,_jsx(Heading,{level:`3`,id:`configurationversion`,children:_jsx(_components.code,{children:`ConfigurationVersion`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`ConfigurationVersion`}),` is the file format of this particular configuration file.`]}),`\n`,_jsx(_components.p,{children:`This file is version 2.\nThis field is required.\nIt exists to allow the configuration system to adapt to future changes in the configuration file format.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`int`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`2`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`minrefineryversion`,children:_jsx(_components.code,{children:`MinRefineryVersion`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`MinRefineryVersion`}),` is the minimum version of Refinery that can load this configuration file.`]}),`\n`,_jsx(_components.p,{children:`This setting specifies the lowest Refinery version capable of loading all of the features used in this file.\nIf this value is present, then Refinery will refuse to start if its version is less than this setting.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`string`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`v2.0`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`datasetprefix`,children:_jsx(_components.code,{children:`DatasetPrefix`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`DatasetPrefix`}),` is a prefix that can be used to distinguish a dataset from an environment in the rules.`]}),`\n`,_jsxs(_components.p,{children:[`If telemetry is being sent to both a classic dataset and a new environment called the same thing, such as `,_jsx(_components.code,{children:`production`}),`, then this parameter can be used to distinguish these cases.\nWhen Refinery receives telemetry using an API key associated with a Honeycomb Classic dataset, it will then use the prefix in the form `,_jsx(_components.code,{children:`{prefix}. {dataset}`}),` when trying to resolve the rules definition.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`string`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`configreloadinterval`,children:_jsx(_components.code,{children:`ConfigReloadInterval`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`ConfigReloadInterval`}),` is the average interval between attempts at reloading the configuration file.`]}),`\n`,_jsxs(_components.p,{children:[`Refinery will attempt to read its configuration and check for changes at approximately this interval.\nThis time is varied by a random amount up to 10% to avoid all instances refreshing together.\nIn installations where configuration changes are handled by restarting Refinery, which is often the case when using Kubernetes, disable this feature with a value of `,_jsx(_components.code,{children:`0s`}),`.\nAs of Refinery v2.7, news of a configuration change is immediately propagated to all peers, and they will attempt to reload their configurations.\nNote that external factors (for example, Kubernetes ConfigMaps) may cause delays in propagating configuration changes.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`duration`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`15s`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`network-configuration`,children:`Network Configuration`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Network`}),` contains network configuration options.`]}),`\n`,_jsx(Heading,{level:`3`,id:`listenaddr`,children:_jsx(_components.code,{children:`ListenAddr`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`ListenAddr`}),` is the address where Refinery listens for incoming requests.`]}),`\n`,_jsxs(_components.p,{children:[`This setting is the IP and port on which Refinery listens for incoming HTTP requests.\nThese requests include traffic formatted as Honeycomb events, proxied requests to the Honeycomb API, and OpenTelemetry data using the `,_jsx(_components.code,{children:`http`}),` protocol.\nIncoming traffic is expected to be HTTP, so if SSL is a requirement, put something like `,_jsx(_components.code,{children:`nginx`}),` in front to do the decryption.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`hostport`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`0.0.0.0:8080`})]}),`\n`,_jsxs(_components.li,{children:[`Environment variable: `,_jsx(_components.code,{children:`REFINERY_HTTP_LISTEN_ADDRESS`})]}),`\n`,_jsxs(_components.li,{children:[`Command line switch: `,_jsx(_components.code,{children:`--http-listen-address`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`peerlistenaddr`,children:_jsx(_components.code,{children:`PeerListenAddr`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`PeerListenAddr`}),` is the IP and port on which to listen for traffic being rerouted from a peer.`]}),`\n`,_jsx(_components.p,{children:`Incoming traffic is expected to be HTTP, so if using SSL use something like nginx or a load balancer to do the decryption.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`hostport`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`0.0.0.0:8081`})]}),`\n`,_jsxs(_components.li,{children:[`Environment variable: `,_jsx(_components.code,{children:`REFINERY_PEER_LISTEN_ADDRESS`})]}),`\n`,_jsxs(_components.li,{children:[`Command line switch: `,_jsx(_components.code,{children:`--peer-listen-address`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`httpidletimeout`,children:_jsx(_components.code,{children:`HTTPIdleTimeout`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`HTTPIdleTimeout`}),` is the duration the http server waits for activity on the connection.`]}),`\n`,_jsx(_components.p,{children:`This is the amount of time after which if the http server does not see any activity, then it pings the client to see if the transport is still alive.\n“0s” means no timeout.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`duration`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`0s`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`honeycombapi`,children:_jsx(_components.code,{children:`HoneycombAPI`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`HoneycombAPI`}),` is the URL of the upstream Honeycomb API where the data will be sent.`]}),`\n`,_jsx(_components.p,{children:`This setting is the destination to which Refinery sends all events that it decides to keep.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`url`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`https://api.honeycomb.io`})]}),`\n`,_jsxs(_components.li,{children:[`Environment variable: `,_jsx(_components.code,{children:`REFINERY_HONEYCOMB_API`})]}),`\n`,_jsxs(_components.li,{children:[`Command line switch: `,_jsx(_components.code,{children:`--honeycomb-api`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`additionalheaders`,children:_jsx(_components.code,{children:`AdditionalHeaders`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`AdditionalHeaders`}),` is a map of additional HTTP headers to add to all upstream Honeycomb API requests.`]}),`\n`,_jsxs(_components.p,{children:[`These headers will be added to all HTTP requests made to the upstream Honeycomb API endpoint, including trace data, OTel metrics, OTel traces, and logs.\nThis is useful for scenarios where requests need to pass through an mTLS proxy that requires additional headers like `,_jsx(_components.code,{children:`FORWARD_TO_URL`}),`.\nBoth keys and values must be strings.\nReserved Honeycomb header prefixes (“x-honeycomb-” and “x-hny-”) cannot be set.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`map`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`FORWARD_TO_URL:https://api.honeycomb.io`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`access-key-configuration`,children:`Access Key Configuration`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`AccessKeys`}),` contains access keys — API keys that the proxy will treat specially, and other flags that control how the proxy handles API keys.`]}),`\n`,_jsx(Heading,{level:`3`,id:`receivekeys`,children:_jsx(_components.code,{children:`ReceiveKeys`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`ReceiveKeys`}),` is a set of Honeycomb API keys that the proxy will treat specially.`]}),`\n`,_jsx(_components.p,{children:`This list only applies to span traffic - other Honeycomb API actions will be proxied through to the upstream API directly without modifying keys.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`stringarray`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`your-key-goes-here`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`receivekeyids`,children:_jsx(_components.code,{children:`ReceiveKeyIDs`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`ReceiveKeyIDs`}),` is a set of Honeycomb Ingest Key IDs that the proxy will treat specially.`]}),`\n`,_jsxs(_components.p,{children:[`When `,_jsx(_components.code,{children:`AcceptOnlyListedKeys`}),` is `,_jsx(_components.code,{children:`true`}),`, traffic using an API key whose Honeycomb ingest key ID matches an entry in this list will be accepted.\nThe key ID is the `,_jsx(_components.code,{children:`id`}),` field returned by the Honeycomb `,_jsx(_components.code,{children:`/1/auth`}),` endpoint; it is distinct from the full API key value.\nThis allows authorization based on key IDs rather than full key values, which avoids storing secret key material in the configuration file.\nBoth `,_jsx(_components.code,{children:`ReceiveKeys`}),` and `,_jsx(_components.code,{children:`ReceiveKeyIDs`}),` may be used simultaneously.\nNote: This feature does not support legacy API keys.\nOnly Honeycomb Ingest Keys (which have a key ID) are compatible with this setting.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`stringarray`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`your-key-id-goes-here`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`acceptonlylistedkeys`,children:_jsx(_components.code,{children:`AcceptOnlyListedKeys`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`AcceptOnlyListedKeys`}),` is a boolean flag that causes events arriving with API keys not in the `,_jsx(_components.code,{children:`ReceiveKeys`}),` list to be rejected.`]}),`\n`,_jsxs(_components.p,{children:[`If `,_jsx(_components.code,{children:`true`}),`, then only traffic using the keys listed in `,_jsx(_components.code,{children:`ReceiveKeys`}),` or whose key ID is listed in `,_jsx(_components.code,{children:`ReceiveKeyIDs`}),` is accepted.\nEvents arriving with API keys not in either list will be rejected with an HTTP `,_jsx(_components.code,{children:`401`}),` error.\nIf `,_jsx(_components.code,{children:`false`}),`, then all traffic is accepted and `,_jsx(_components.code,{children:`ReceiveKeys`}),` is ignored.\nThis setting is applied `,_jsx(_components.strong,{children:`before`}),` the `,_jsx(_components.code,{children:`SendKey`}),` and `,_jsx(_components.code,{children:`SendKeyMode`}),` settings.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`bool`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`sendkey`,children:_jsx(_components.code,{children:`SendKey`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`SendKey`}),` is an optional Honeycomb API key that Refinery can use to send data to Honeycomb, depending on configuration. Setting this value via a command line flag may expose credentials - it is recommended to use the environment variable or a configuration file.`]}),`\n`,_jsxs(_components.p,{children:[`If `,_jsx(_components.code,{children:`SendKey`}),` is set to a valid Honeycomb key, then Refinery can use the listed key to send data.\nThe exact behavior depends on the value of `,_jsx(_components.code,{children:`SendKeyMode`}),`.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`string`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`SetThisToAHoneycombKey`})]}),`\n`,_jsxs(_components.li,{children:[`Environment variable: `,_jsx(_components.code,{children:`REFINERY_SEND_KEY`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`sendkeymode`,children:_jsx(_components.code,{children:`SendKeyMode`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`SendKeyMode`}),` controls how SendKey is used to replace or augment API keys used in incoming telemetry.`]}),`\n`,_jsxs(_components.p,{children:[`Controls how SendKey is used to replace or supply API keys used in incoming telemetry.\nIf `,_jsx(_components.code,{children:`AcceptOnlyListedKeys`}),` is `,_jsx(_components.code,{children:`true`}),`, then `,_jsx(_components.code,{children:`SendKeys`}),` will only be used for events with keys listed in `,_jsx(_components.code,{children:`ReceiveKeys`}),`.\n`,_jsx(_components.code,{children:`none`}),` uses the incoming key for all telemetry (default).\n`,_jsx(_components.code,{children:`all`}),` overwrites all keys, even missing ones, with `,_jsx(_components.code,{children:`SendKey`}),`.\n`,_jsx(_components.code,{children:`nonblank`}),` overwrites all supplied keys but will not inject `,_jsx(_components.code,{children:`SendKey`}),` if the incoming key is blank.\n`,_jsx(_components.code,{children:`listedonly`}),` overwrites only the keys listed in `,_jsx(_components.code,{children:`ReceiveKeys`}),`.\n`,_jsx(_components.code,{children:`unlisted`}),` uses the `,_jsx(_components.code,{children:`SendKey`}),` for all events `,_jsx(_components.em,{children:`except`}),` those with keys listed in `,_jsx(_components.code,{children:`ReceiveKeys`}),`, which use their original keys.\n`,_jsx(_components.code,{children:`missingonly`}),` uses the SendKey only to inject keys into events with blank keys.\nAll other events use their original keys.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`string`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`none`})]}),`\n`,_jsxs(_components.li,{children:[`Options: `,_jsx(_components.code,{children:`none`}),`, `,_jsx(_components.code,{children:`all`}),`, `,_jsx(_components.code,{children:`nonblank`}),`, `,_jsx(_components.code,{children:`listedonly`}),`, `,_jsx(_components.code,{children:`unlisted`}),`, `,_jsx(_components.code,{children:`missingonly`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`refinery-telemetry`,children:`Refinery Telemetry`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`RefineryTelemetry`}),` contains configuration information for the telemetry that Refinery uses to record its own operation.`]}),`\n`,_jsx(Heading,{level:`3`,id:`addrulereasontotrace`,children:_jsx(_components.code,{children:`AddRuleReasonToTrace`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`AddRuleReasonToTrace`}),` controls whether to decorate traces with Refinery rule evaluation results.`]}),`\n`,_jsxs(_components.p,{children:[`When enabled, this setting causes traces that are sent to Honeycomb to include the field `,_jsx(_components.code,{children:`meta.refinery.reason`}),`.\nThis field contains text indicating which rule was evaluated that caused the trace to be included.\nThis setting also includes the field `,_jsx(_components.code,{children:`meta.refinery.send_reason`}),`, which contains the reason that the trace was sent.\nPossible values of this field are `,_jsx(_components.code,{children:`trace_send_got_root`}),`, which means that the root span arrived; `,_jsx(_components.code,{children:`trace_send_expired`}),`, which means that `,_jsx(_components.code,{children:`TraceTimeout`}),` was reached; `,_jsx(_components.code,{children:`trace_send_ejected_full`}),`, which means that the trace cache was full; and `,_jsx(_components.code,{children:`trace_send_ejected_memsize`}),`, which means that Refinery was out of memory.\nThese names are also the names of metrics that Refinery tracks.\nWe recommend enabling this setting whenever a rules-based sampler is in use, as it is useful for debugging and understanding the behavior of your Refinery installation.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`bool`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`true`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`addspancounttoroot`,children:_jsx(_components.code,{children:`AddSpanCountToRoot`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`AddSpanCountToRoot`}),` controls whether to add a metadata field to root spans that indicates the number of child elements in a trace.`]}),`\n`,_jsxs(_components.p,{children:[`The added metadata field, `,_jsx(_components.code,{children:`meta.span_count`}),`, indicates the number of child elements on the trace at the time the sampling decision was made.\nIf `,_jsx(_components.code,{children:`true`}),` and `,_jsx(_components.code,{children:`AddCountsToRoot`}),` is set to false, then Refinery will add `,_jsx(_components.code,{children:`meta.span_count`}),` to the root span.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`defaulttrue`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`true`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`addcountstoroot`,children:_jsx(_components.code,{children:`AddCountsToRoot`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`AddCountsToRoot`}),` controls whether to add metadata fields to root spans that indicates the number of child spans, span events, span links, and honeycomb events.`]}),`\n`,_jsxs(_components.p,{children:[`If `,_jsx(_components.code,{children:`true`}),`, then Refinery will ignore the `,_jsx(_components.code,{children:`AddSpanCountToRoot`}),` setting and add the following fields to the root span based on the values at the time the sampling decision was made:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`meta.span_count`}),`: the number of child spans on the trace`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`meta.span_event_count`}),`: the number of span events on the trace`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`meta.span_link_count`}),`: the number of span links on the trace`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`meta.event_count`}),`: the number of honeycomb events on the trace`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Eligible for live reload.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Type: `,_jsx(_components.code,{children:`bool`})]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`addhostmetadatatotrace`,children:_jsx(_components.code,{children:`AddHostMetadataToTrace`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`AddHostMetadataToTrace`}),` specifies whether to add host metadata to traces.`]}),`\n`,_jsxs(_components.p,{children:[`If `,_jsx(_components.code,{children:`true`}),`, then Refinery will add the following tag to all traces: - `,_jsx(_components.code,{children:`meta.refinery.local_hostname`}),`: the hostname of the Refinery node`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`defaulttrue`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`true`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`traces`,children:`Traces`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Traces`}),` contains configuration for how traces are managed.`]}),`\n`,_jsx(Heading,{level:`3`,id:`senddelay`,children:_jsx(_components.code,{children:`SendDelay`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`SendDelay`}),` is the duration to wait after the root span arrives before sending a trace.`]}),`\n`,_jsxs(_components.p,{children:[`This setting is a short timer that is triggered when a trace is marked complete by the arrival of the root span.\nRefinery waits for this duration before sending the trace.\nThis setting exists to allow for asynchronous spans and small network delays to elapse before sending the trace.\n`,_jsx(_components.code,{children:`SendDelay`}),` is not applied if the `,_jsx(_components.code,{children:`TraceTimeout`}),` expires or the `,_jsx(_components.code,{children:`SpanLimit`}),` is reached.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`duration`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`2s`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`batchtimeout`,children:_jsx(_components.code,{children:`BatchTimeout`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`BatchTimeout`}),` is how frequently Refinery sends unfulfilled batches.`]}),`\n`,_jsxs(_components.p,{children:[`By default, this setting uses the `,_jsx(_components.code,{children:`DefaultBatchTimeout`}),` in `,_jsx(_components.code,{children:`libhoney`}),` as its value, which is `,_jsx(_components.code,{children:`100ms`}),`.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`duration`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`500ms`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`tracetimeout`,children:_jsx(_components.code,{children:`TraceTimeout`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`TraceTimeout`}),` is the duration to wait before making the trace decision on an incomplete trace.`]}),`\n`,_jsx(_components.p,{children:`A long timer; it represents the outside boundary of how long to wait before making the trace decision about an incomplete trace.\nNormally trace decisions (send or drop) are made when the root span arrives.\nSometimes the root span never arrives (for example, due to crashes).\nOnce this timer fires, Refinery will make a trace decision based on the spans that have arrived so far.\nThis ensures sending a trace even when the root span never arrives.\nAfter the trace decision has been made, Refinery retains a record of that decision for a period of time.\nWhen additional spans (including the root span) arrive, they will be kept or dropped based on the original decision.\nIf particularly long-lived traces are present in your data, then you should increase this timer.\nNote that this increase will also increase the memory requirements for Refinery.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`duration`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`60s`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`spanlimit`,children:_jsx(_components.code,{children:`SpanLimit`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`SpanLimit`}),` is the number of spans after which a trace becomes eligible for a trace decision.`]}),`\n`,_jsx(_components.p,{children:`This setting helps to keep memory usage under control.\nIf a trace has more than this set number of spans, then it becomes eligible for a trace decision.\nIt’s most helpful in a situation where a sudden burst of many spans in a large trace hits Refinery all at once, causing memory usage to spike and possibly crashing Refinery.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`int`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`32000`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`maxbatchsize`,children:_jsx(_components.code,{children:`MaxBatchSize`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`MaxBatchSize`}),` is the maximum number of events to be included in each batch for sending.`]}),`\n`,_jsxs(_components.p,{children:[`This value is used to set the `,_jsx(_components.code,{children:`BatchSize`}),` field in the `,_jsx(_components.code,{children:`libhoney`}),` library used to send data to Honeycomb.\nIf you have particularly large traces, then you should increase this value.\nNote that this will also increase the memory requirements for Refinery.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`int`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`500`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`sendticker`,children:_jsx(_components.code,{children:`SendTicker`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`SendTicker`}),` is the interval between checks for traces to send.`]}),`\n`,_jsxs(_components.p,{children:[`A short timer that determines the duration between trace cache review runs to send.\nIncreasing this will spend more time processing incoming events to reduce `,_jsx(_components.code,{children:`incoming_`}),` or `,_jsx(_components.code,{children:`peer_router_dropped`}),` spikes.\nDecreasing this will check the trace cache for timeouts more frequently.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`duration`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`100ms`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`maxexpiredtraces`,children:_jsx(_components.code,{children:`MaxExpiredTraces`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`MaxExpiredTraces`}),` is the maximum number of expired traces to process.`]}),`\n`,_jsxs(_components.p,{children:[`This setting controls how many traces are processed when it is time to make a sampling decision.\nUp to this many traces will be processed every `,_jsx(_components.code,{children:`SendTicker`}),` duration.\nIf this number is too small it will mean Refinery is spending less time calculating sampling decisions, resulting in data arriving at Honeycomb slower.\nAdditionally, MaxExpiredTraces indirectly affects the system’s health check behavior.\nThe HealthCheckTimeout will be automatically adjusted based on this value to ensure health checks remain accurate relative to the configured processing load.\nIf your `,_jsx(_components.code,{children:`collector_collect_loop_duration_ms`}),` is above 3 seconds it is recommended to reduce this value and the `,_jsx(_components.code,{children:`SendTicker`}),` duration.\nThis will mean Refinery makes fewer sampling decision calculations each `,_jsx(_components.code,{children:`SendTicker`}),` tick, but gets the chance to make decisions more often.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`int`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`3000`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`debugging`,children:`Debugging`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Debugging`}),` contains configuration values used when setting up and debugging Refinery.`]}),`\n`,_jsx(Heading,{level:`3`,id:`debugserviceaddr`,children:_jsx(_components.code,{children:`DebugServiceAddr`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`DebugServiceAddr`}),` is the IP and port where the debug service runs.`]}),`\n`,_jsxs(_components.p,{children:[`The debug service is generally only used when debugging Refinery itself, and will only run if the command line option `,_jsx(_components.code,{children:`-d`}),` is specified.\nIf this value is not specified, then the debug service runs on the first open port between `,_jsx(_components.code,{children:`localhost:6060`}),` and `,_jsx(_components.code,{children:`localhost:6069`}),`.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`hostport`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`localhost:6060`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`queryauthtoken`,children:_jsx(_components.code,{children:`QueryAuthToken`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`QueryAuthToken`}),` is the token that must be specified to access the `,_jsx(_components.code,{children:`/query`}),` endpoint. Setting this value via a command line flag may expose credentials - it is recommended to use the environment variable or a configuration file.`]}),`\n`,_jsxs(_components.p,{children:[`This token must be specified with the header “X-Honeycomb-Refinery-Query” in order for a `,_jsx(_components.code,{children:`/query`}),` request to succeed.\nThese `,_jsx(_components.code,{children:`/query`}),` requests are intended for debugging Refinery during setup and are not typically needed in normal operation.\nIf not specified, then the `,_jsx(_components.code,{children:`/query`}),` endpoints are inaccessible.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`string`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`some-private-value`})]}),`\n`,_jsxs(_components.li,{children:[`Environment variable: `,_jsx(_components.code,{children:`REFINERY_QUERY_AUTH_TOKEN`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`additionalerrorfields`,children:_jsx(_components.code,{children:`AdditionalErrorFields`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`AdditionalErrorFields`}),` is a list of span fields to include when logging errors happen during the ingestion of events.`]}),`\n`,_jsxs(_components.p,{children:[`For example, the span too large error.\nThis is primarily useful in trying to track down misbehaving senders in a large installation.\nThe fields `,_jsx(_components.code,{children:`dataset`}),`, `,_jsx(_components.code,{children:`apihost`}),`, and `,_jsx(_components.code,{children:`environment`}),` are always included.\nIf a field is not present in the span, then it will not be present in the error log.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`stringarray`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`trace.span_id`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`dryrun`,children:_jsx(_components.code,{children:`DryRun`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`DryRun`}),` controls whether sampling is applied to incoming traces.`]}),`\n`,_jsxs(_components.p,{children:[`If enabled, then Refinery marks the traces that would be dropped given the current sampling rules, and sends all traces regardless of the sampling decision.\nThis is useful for evaluating sampling rules.\nWhen DryRun is enabled, traces is decorated with `,_jsx(_components.code,{children:`meta.refinery. dryrun.kept`}),` that is set to `,_jsx(_components.code,{children:`true`}),` or `,_jsx(_components.code,{children:`false`}),`, based on whether the trace would be kept or dropped.\nIn addition, `,_jsx(_components.code,{children:`SampleRate`}),` will be set to the incoming rate for all traces, and the field `,_jsx(_components.code,{children:`meta.refinery.dryrun.sample_rate`}),` will be set to the sample rate that would have been used.\nNOTE: This setting is not compatible with `,_jsx(_components.code,{children:`TraceCache=distributed`}),`, because drop trace decisions shared among peers do not contain all the relevant information needed to send traces to Honeycomb.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`bool`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`true`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`refinery-logger`,children:`Refinery Logger`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Logger`}),` contains configuration for logging.`]}),`\n`,_jsx(Heading,{level:`3`,id:`type`,children:_jsx(_components.code,{children:`Type`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Type`}),` is the type of logger to use.`]}),`\n`,_jsxs(_components.p,{children:[`The setting specifies where (and if) Refinery sends logs.\n`,_jsx(_components.code,{children:`none`}),` means that logs are discarded.\n`,_jsx(_components.code,{children:`honeycomb`}),` means that logs will be forwarded to Honeycomb as events according to the set Logging settings.\n`,_jsx(_components.code,{children:`stdout`}),` means that logs will be written to `,_jsx(_components.code,{children:`stdout`}),`.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`string`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`stdout`})]}),`\n`,_jsxs(_components.li,{children:[`Options: `,_jsx(_components.code,{children:`stdout`}),`, `,_jsx(_components.code,{children:`honeycomb`}),`, `,_jsx(_components.code,{children:`none`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`level`,children:_jsx(_components.code,{children:`Level`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Level`}),` is the logging level above which Refinery should send a log to the logger.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`warn`}),` is the recommended level for production.\n`,_jsx(_components.code,{children:`debug`}),` is very verbose, and should not be used in production environments.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`string`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`warn`})]}),`\n`,_jsxs(_components.li,{children:[`Options: `,_jsx(_components.code,{children:`debug`}),`, `,_jsx(_components.code,{children:`info`}),`, `,_jsx(_components.code,{children:`warn`}),`, `,_jsx(_components.code,{children:`error`}),`, `,_jsx(_components.code,{children:`panic`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`honeycomb-logger`,children:`Honeycomb Logger`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`HoneycombLogger`}),` contains configuration for logging to Honeycomb.\nOnly used if `,_jsx(_components.code,{children:`Logger.Type`}),` is “honeycomb”.`]}),`\n`,_jsx(Heading,{level:`3`,id:`apihost`,children:_jsx(_components.code,{children:`APIHost`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`APIHost`}),` is the URL of the Honeycomb API where Refinery sends its logs.`]}),`\n`,_jsx(_components.p,{children:`Refinery’s internal logs will be sent to this host using the standard Honeycomb Events API.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`url`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`https://api.honeycomb.io`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`apikey`,children:_jsx(_components.code,{children:`APIKey`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`APIKey`}),` is the API key used to send Refinery’s logs to Honeycomb. Setting this value via a command line flag may expose credentials - it is recommended to use the environment variable or a configuration file.`]}),`\n`,_jsx(_components.p,{children:`It is recommended that you create a separate team and key for Refinery logs.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`string`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`SetThisToAHoneycombKey`})]}),`\n`,_jsxs(_components.li,{children:[`Environment variable: `,_jsx(_components.code,{children:`REFINERY_HONEYCOMB_LOGGER_API_KEY, REFINERY_HONEYCOMB_API_KEY`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`dataset`,children:_jsx(_components.code,{children:`Dataset`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Dataset`}),` is the dataset to which logs will be sent.`]}),`\n`,_jsxs(_components.p,{children:[`Only used if `,_jsx(_components.code,{children:`APIKey`}),` is specified.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`string`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`Refinery Logs`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`samplerenabled`,children:_jsx(_components.code,{children:`SamplerEnabled`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`SamplerEnabled`}),` controls whether logs are sampled before sending to Honeycomb.`]}),`\n`,_jsxs(_components.p,{children:[`The sample rate is controlled by the `,_jsx(_components.code,{children:`SamplerThroughput`}),` setting.\nThe sampler used throttles the rate of logs sent to Honeycomb from any given source within Refinery — it should effectively limit the rate of redundant messages.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`defaulttrue`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`true`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`samplerthroughput`,children:_jsx(_components.code,{children:`SamplerThroughput`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`SamplerThroughput`}),` is the sampling throughput for logs in events per second.`]}),`\n`,_jsx(_components.p,{children:`The sampling algorithm attempts to make sure that the average throughput approximates this value, while also ensuring that all unique logs arrive at Honeycomb at least once per sampling period.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`float`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`10`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`10`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`additionalattributes`,children:_jsx(_components.code,{children:`AdditionalAttributes`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`AdditionalAttributes`}),` adds the provided attributes to all logs written by the Honeycomb logger.`]}),`\n`,_jsx(_components.p,{children:`When supplying via a environment variable, the value should be a string of comma-separated key-value pairs.\nWhen supplying via the command line, the value should be a key value pair.\nIf multiple key-value pairs are needed, each should be supplied via its own command line flag.\nThe key-value pairs must use ’:’ as the separator.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`map`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`pipeline.id:'12345',rollout.id:'67890'`})]}),`\n`,_jsxs(_components.li,{children:[`Environment variable: `,_jsx(_components.code,{children:`REFINERY_HONEYCOMB_LOGGER_ADDITIONAL_ATTRIBUTES`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`stdout-logger`,children:`Stdout Logger`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`StdoutLogger`}),` contains configuration for logging to `,_jsx(_components.code,{children:`stdout`}),`.\nOnly used if `,_jsx(_components.code,{children:`Logger.Type`}),` is “stdout”.`]}),`\n`,_jsx(Heading,{level:`3`,id:`structured`,children:_jsx(_components.code,{children:`Structured`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Structured`}),` controls whether to use structured logging.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`true`}),` generates structured logs (JSON).\n`,_jsx(_components.code,{children:`false`}),` generates plain text logs.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`bool`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`samplerenabled-2`,children:_jsx(_components.code,{children:`SamplerEnabled`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`SamplerEnabled`}),` controls whether logs are sampled before sending to `,_jsx(_components.code,{children:`stdout`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`The sample rate is controlled by the `,_jsx(_components.code,{children:`SamplerThroughput`}),` setting.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`bool`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`samplerthroughput-2`,children:_jsx(_components.code,{children:`SamplerThroughput`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`SamplerThroughput`}),` is the sampling throughput for logs in events per second.`]}),`\n`,_jsxs(_components.p,{children:[`The sampling algorithm attempts to make sure that the average throughput approximates this value, while also ensuring that all unique logs arrive at `,_jsx(_components.code,{children:`stdout`}),` at least once per sampling period.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`float`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`10`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`10`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`prometheus-metrics`,children:`Prometheus Metrics`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`PrometheusMetrics`}),` contains configuration for Refinery’s internally-generated metrics as made available through Prometheus.`]}),`\n`,_jsx(Heading,{level:`3`,id:`enabled`,children:_jsx(_components.code,{children:`Enabled`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Enabled`}),` controls whether to expose Refinery metrics over the `,_jsx(_components.code,{children:`PrometheusListenAddr`}),` port.`]}),`\n`,_jsx(_components.p,{children:`Each of the metrics providers can be enabled or disabled independently.\nMetrics can be sent to multiple destinations.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`bool`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`listenaddr-2`,children:_jsx(_components.code,{children:`ListenAddr`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`ListenAddr`}),` is the IP and port the Prometheus Metrics server will run on.`]}),`\n`,_jsxs(_components.p,{children:[`Determines the interface and port on which Prometheus will listen for requests for `,_jsx(_components.code,{children:`/metrics`}),`.\nMust be different from the main Refinery listener.\nOnly used if `,_jsx(_components.code,{children:`Enabled`}),` is `,_jsx(_components.code,{children:`true`}),` in `,_jsx(_components.code,{children:`PrometheusMetrics`}),`.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`hostport`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`localhost:2112`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`opentelemetry-metrics`,children:`OpenTelemetry Metrics`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`OTelMetrics`}),` contains configuration for Refinery’s OpenTelemetry (OTel) metrics.\nThis is the preferred way to send metrics to Honeycomb.\nNew installations should prefer `,_jsx(_components.code,{children:`OTelMetrics`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`enabled-2`,children:_jsx(_components.code,{children:`Enabled`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Enabled`}),` controls whether to send metrics via OpenTelemetry.`]}),`\n`,_jsx(_components.p,{children:`Each of the metrics providers can be enabled or disabled independently.\nMetrics can be sent to multiple destinations.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`bool`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`apihost-2`,children:_jsx(_components.code,{children:`APIHost`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`APIHost`}),` is the URL of the OpenTelemetry API to which metrics will be sent.`]}),`\n`,_jsxs(_components.p,{children:[`Refinery’s internal metrics will be sent to the `,_jsx(_components.code,{children:`/v1/metrics`}),` endpoint on this host.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`url`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`https://api.honeycomb.io`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`apikey-2`,children:_jsx(_components.code,{children:`APIKey`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`APIKey`}),` is the API key used to send Honeycomb metrics via OpenTelemetry. Setting this value via a command line flag may expose credentials - it is recommended to use the environment variable or a configuration file.`]}),`\n`,_jsxs(_components.p,{children:[`It is recommended that you create a separate team and key for Refinery metrics.\nIf this is blank, then Refinery will not set the Honeycomb-specific headers for OpenTelemetry, and your `,_jsx(_components.code,{children:`APIHost`}),` must be set to a valid OpenTelemetry endpoint.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`string`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`SetThisToAHoneycombKey`})]}),`\n`,_jsxs(_components.li,{children:[`Environment variable: `,_jsx(_components.code,{children:`REFINERY_OTEL_METRICS_API_KEY, REFINERY_HONEYCOMB_API_KEY`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`dataset-2`,children:_jsx(_components.code,{children:`Dataset`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Dataset`}),` is the Honeycomb dataset that Refinery sends its OpenTelemetry metrics.`]}),`\n`,_jsxs(_components.p,{children:[`Only used if `,_jsx(_components.code,{children:`APIKey`}),` is specified.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`string`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`Refinery Metrics`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`reportinginterval`,children:_jsx(_components.code,{children:`ReportingInterval`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`ReportingInterval`}),` is the interval between sending OpenTelemetry metrics to Honeycomb.`]}),`\n`,_jsxs(_components.p,{children:[`Between `,_jsx(_components.code,{children:`1`}),` and `,_jsx(_components.code,{children:`60`}),` seconds is typical.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`duration`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`30s`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`compression`,children:_jsx(_components.code,{children:`Compression`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Compression`}),` is the compression algorithm to use when sending OpenTelemetry metrics to Honeycomb.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`gzip`}),` is the default and recommended value.\nIn rare circumstances, compression costs may outweigh the benefits, in which case `,_jsx(_components.code,{children:`none`}),` may be used.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`string`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`gzip`})]}),`\n`,_jsxs(_components.li,{children:[`Options: `,_jsx(_components.code,{children:`none`}),`, `,_jsx(_components.code,{children:`gzip`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`additionalattributes-2`,children:_jsx(_components.code,{children:`AdditionalAttributes`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`AdditionalAttributes`}),` adds the provided attributes as resource attributes on all OpenTelemetry metrics emitted by Refinery.`]}),`\n`,_jsx(_components.p,{children:`This is useful for injecting deployment-specific metadata (such as a cluster ID or environment name) into metrics so they can be filtered or grouped in the metrics backend.\nBoth keys and values must be strings.\nWhen supplying via a environment variable, the value should be a string of comma-separated key-value pairs.\nWhen supplying via the command line, the value should be a key value pair.\nIf multiple key-value pairs are needed, each should be supplied via its own command line flag.\nThe key-value pairs must use ’:’ as the separator.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`map`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`pipeline.id:'12345',rollout.id:'67890'`})]}),`\n`,_jsxs(_components.li,{children:[`Environment variable: `,_jsx(_components.code,{children:`REFINERY_OTEL_METRICS_ADDITIONAL_ATTRIBUTES`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`opentelemetry-tracing`,children:`OpenTelemetry Tracing`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`OTelTracing`}),` contains configuration for Refinery’s own tracing.`]}),`\n`,_jsx(Heading,{level:`3`,id:`enabled-3`,children:_jsx(_components.code,{children:`Enabled`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Enabled`}),` controls whether to send Refinery’s own OpenTelemetry traces.`]}),`\n`,_jsx(_components.p,{children:`The setting specifies if Refinery sends traces.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`bool`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`apihost-3`,children:_jsx(_components.code,{children:`APIHost`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`APIHost`}),` is the URL of the OpenTelemetry API to which traces will be sent.`]}),`\n`,_jsxs(_components.p,{children:[`Refinery’s internal traces will be sent to the `,_jsx(_components.code,{children:`/v1/traces`}),` endpoint on this host.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`url`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`https://api.honeycomb.io`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`apikey-3`,children:_jsx(_components.code,{children:`APIKey`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`APIKey`}),` is the API key used to send Refinery’s traces to Honeycomb. Setting this value via a command line flag may expose credentials - it is recommended to use the environment variable or a configuration file.`]}),`\n`,_jsxs(_components.p,{children:[`It is recommended that you create a separate team and key for Refinery telemetry.\nIf this value is blank, then Refinery will not set the Honeycomb-specific headers for OpenTelemetry, and your `,_jsx(_components.code,{children:`APIHost`}),` must be set to a valid OpenTelemetry endpoint.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`string`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`SetThisToAHoneycombKey`})]}),`\n`,_jsxs(_components.li,{children:[`Environment variable: `,_jsx(_components.code,{children:`REFINERY_HONEYCOMB_TRACES_API_KEY, REFINERY_HONEYCOMB_API_KEY`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`dataset-3`,children:_jsx(_components.code,{children:`Dataset`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Dataset`}),` is the Honeycomb dataset to which Refinery sends its OpenTelemetry metrics.`]}),`\n`,_jsxs(_components.p,{children:[`Only used if `,_jsx(_components.code,{children:`APIKey`}),` is specified.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`string`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`Refinery Traces`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`samplerate`,children:_jsx(_components.code,{children:`SampleRate`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`SampleRate`}),` is the rate at which Refinery samples its own traces.`]}),`\n`,_jsxs(_components.p,{children:[`This is the Honeycomb sample rate used to sample traces sent by Refinery.\nSince each incoming span generates multiple outgoing spans, a minimum sample rate of `,_jsx(_components.code,{children:`100`}),` is strongly advised.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`int`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`100`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`insecure`,children:_jsx(_components.code,{children:`Insecure`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Insecure`}),` controls whether to send Refinery’s own OpenTelemetry traces via http instead of https.`]}),`\n`,_jsx(_components.p,{children:`When true Refinery will export its internal traces over http instead of https.\nUseful if you plan on sending your traces to a different refinery instance for tail sampling.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`bool`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`peer-management`,children:`Peer Management`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`PeerManagement`}),` controls how the Refinery cluster communicates between peers.`]}),`\n`,_jsx(Heading,{level:`3`,id:`type-2`,children:_jsx(_components.code,{children:`Type`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Type`}),` is the type of peer management to use.`]}),`\n`,_jsxs(_components.p,{children:[`Peer management is the mechanism by which Refinery locates its peers.\n`,_jsx(_components.code,{children:`file`}),` means that Refinery gets its peer list from the Peers list in this config file.\nIt also prevents Refinery from using a publish/subscribe mechanism to propagate peer lists, stress levels, and configuration changes.\n`,_jsx(_components.code,{children:`redis`}),` means that Refinery uses a Publish/Subscribe mechanism, implemented on Redis, to propagate peer lists, stress levels, and notification of configuration changes much more quickly than the legacy mechanism.\nThe recommended setting is `,_jsx(_components.code,{children:`redis`}),`, especially for new installations.\nIf `,_jsx(_components.code,{children:`redis`}),` is specified, fields in `,_jsx(_components.code,{children:`RedisPeerManagement`}),` must also be set.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`string`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`file`})]}),`\n`,_jsxs(_components.li,{children:[`Options: `,_jsx(_components.code,{children:`redis`}),`, `,_jsx(_components.code,{children:`file`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`identifier`,children:_jsx(_components.code,{children:`Identifier`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Identifier`}),` specifies the identifier to use when registering itself with peers.`]}),`\n`,_jsxs(_components.p,{children:[`By default, when using a peer registry, Refinery will use the local hostname to identify itself to other peers.\nIf your environment requires something else, (for example, if peers cannot resolve each other by name), then you can specify the exact identifier, such as an IP address, to use here.\nOverrides `,_jsx(_components.code,{children:`IdentifierInterfaceName`}),`, if both are set.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`string`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`192.168.1.1`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`identifierinterfacename`,children:_jsx(_components.code,{children:`IdentifierInterfaceName`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`IdentifierInterfaceName`}),` specifies a network interface to use when finding a local hostname.`]}),`\n`,_jsx(_components.p,{children:`By default, when using a peer registry, Refinery will use the local hostname to identify itself to other peers.\nIf your environment requires that you use IPs as identifiers (for example, if peers cannot resolve each other by name), then you can specify the network interface that Refinery is listening on here.\nRefinery will use the first unicast address that it finds on the specified network interface as its identifier.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`string`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`eth0`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`useipv6identifier`,children:_jsx(_components.code,{children:`UseIPV6Identifier`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`UseIPV6Identifier`}),` specifies that Refinery should use an IPV6 address as its identifier.`]}),`\n`,_jsxs(_components.p,{children:[`If using `,_jsx(_components.code,{children:`IdentifierInterfaceName`}),`, Refinery will default to the first IPv4 unicast address it finds for the specified interface.\nIf this value is specified, then Refinery will use the first IPV6 unicast address found.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`bool`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`peers`,children:_jsx(_components.code,{children:`Peers`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Peers`}),` is the list of peers to use when Type is “file”, excluding self.`]}),`\n`,_jsx(_components.p,{children:`This list is ignored when Type is “redis”.\nThe format is a list of strings of the form “scheme://host:port”.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`stringarray`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`http://192.168.1.11:8081,http://192.168.1.12:8081`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`redis-peer-management`,children:`Redis Peer Management`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`RedisPeerManagement`}),` controls how the Refinery cluster communicates between peers when using Redis.\nDoes not apply when `,_jsx(_components.code,{children:`PeerManagement.Type`}),` is “file”.`]}),`\n`,_jsx(Heading,{level:`3`,id:`host`,children:_jsx(_components.code,{children:`Host`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Host`}),` is the host and port of the Redis instance to use for peer cluster membership management.`]}),`\n`,_jsxs(_components.p,{children:[`Must be in the form `,_jsx(_components.code,{children:`host:port`}),`.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`hostport`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`localhost:6379`})]}),`\n`,_jsxs(_components.li,{children:[`Environment variable: `,_jsx(_components.code,{children:`REFINERY_REDIS_HOST`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`clusterhosts`,children:_jsx(_components.code,{children:`ClusterHosts`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`ClusterHosts`}),` is a list of host and port pairs for the instances in a Redis Cluster, and used for managing peer cluster membership.`]}),`\n`,_jsxs(_components.p,{children:[`This configuration enables Refinery to connect to a Redis deployment setup in Cluster Mode.\nEach entry in the list should follow the format `,_jsx(_components.code,{children:`host:port`}),`.\nIf `,_jsx(_components.code,{children:`ClusterHosts`}),` is specified, the `,_jsx(_components.code,{children:`Host`}),` setting will be ignored.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`stringarray`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`- localhost:6379`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`username`,children:_jsx(_components.code,{children:`Username`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Username`}),` is the username used to connect to Redis for peer cluster membership management. Setting this value via a command line flag may expose credentials - it is recommended to use the environment variable or a configuration file.`]}),`\n`,_jsx(_components.p,{children:`Many Redis installations do not use this field.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`string`})]}),`\n`,_jsxs(_components.li,{children:[`Environment variable: `,_jsx(_components.code,{children:`REFINERY_REDIS_USERNAME`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`password`,children:_jsx(_components.code,{children:`Password`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Password`}),` is the password used to connect to Redis for peer cluster membership management. Setting this value via a command line flag may expose credentials - it is recommended to use the environment variable or a configuration file.`]}),`\n`,_jsx(_components.p,{children:`Many Redis installations do not use this field.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`string`})]}),`\n`,_jsxs(_components.li,{children:[`Environment variable: `,_jsx(_components.code,{children:`REFINERY_REDIS_PASSWORD`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`authcode`,children:_jsx(_components.code,{children:`AuthCode`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`AuthCode`}),` is the string used to connect to Redis for peer cluster membership management using an explicit AUTH command. Setting this value via a command line flag may expose credentials - it is recommended to use the environment variable or a configuration file.`]}),`\n`,_jsx(_components.p,{children:`Many Redis installations do not use this field.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`string`})]}),`\n`,_jsxs(_components.li,{children:[`Environment variable: `,_jsx(_components.code,{children:`REFINERY_REDIS_AUTH_CODE`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`clustername`,children:_jsx(_components.code,{children:`ClusterName`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`ClusterName`}),` is a cluster identifier used as a prefix for Redis pubsub channel names.`]}),`\n`,_jsx(_components.p,{children:`ClusterName is used to namespace Redis pubsub channels when multiple Refinery clusters share the same Redis instance.\nIf set, all pubsub channel names will be prefixed with this value (e.g., “production:peers”).\nThis allows multiple clusters to coexist without interfering with each other.\nMust be alphanumeric if specified.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`string`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`production`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`usetls`,children:_jsx(_components.code,{children:`UseTLS`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`UseTLS`}),` enables TLS when connecting to Redis for peer cluster membership management.`]}),`\n`,_jsxs(_components.p,{children:[`When enabled, this setting sets the `,_jsx(_components.code,{children:`MinVersion`}),` in the TLS configuration to `,_jsx(_components.code,{children:`1.2`}),`.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`bool`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`usetlsinsecure`,children:_jsx(_components.code,{children:`UseTLSInsecure`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`UseTLSInsecure`}),` disables certificate checks when connecting to Redis for peer cluster membership management.`]}),`\n`,_jsxs(_components.p,{children:[`This setting is intended for use with self-signed certificates and sets the `,_jsx(_components.code,{children:`InsecureSkipVerify`}),` flag within Redis.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`bool`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`timeout`,children:_jsx(_components.code,{children:`Timeout`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Timeout`}),` is the timeout to use when communicating with Redis.`]}),`\n`,_jsx(_components.p,{children:`It is rarely necessary to adjust this value.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`duration`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`5s`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`collection-settings`,children:`Collection Settings`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Collection`}),` contains the settings that are relevant to collecting spans together to make traces.\nIf none of the memory settings are used, then Refinery will not attempt to limit its memory usage.\nThis is not recommended for production use since a burst of traffic could cause Refinery to run out of memory and crash.`]}),`\n`,_jsx(Heading,{level:`3`,id:`peerqueuesize`,children:_jsx(_components.code,{children:`PeerQueueSize`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`PeerQueueSize`}),` is the maximum number of in-flight spans redirected from other peers stored in the peer span queue.`]}),`\n`,_jsxs(_components.p,{children:[`The peer span queue serves as a buffer for spans redirected from other peers before they are processed.\nIn the event that this queue reaches its capacity, any subsequent spans will be discarded.\nThe size of this queue is contingent upon the number of peers within the cluster.\nSpecifically, with N peers, the queue’s span capacity is determined by (N-1)/N of the total number of spans.\nIts minimum value should be at least three times the `,_jsx(_components.code,{children:`CacheCapacity`}),`.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`int`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`30000`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`incomingqueuesize`,children:_jsx(_components.code,{children:`IncomingQueueSize`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`IncomingQueueSize`}),` is the number of in-flight spans to keep in the incoming span queue.`]}),`\n`,_jsxs(_components.p,{children:[`The incoming span queue is used to buffer spans before they are processed.\nIf this queue fills up, then subsequent spans will be dropped.\nIts minimum value should be at least three times the `,_jsx(_components.code,{children:`CacheCapacity`}),`.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`int`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`30000`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`availablememory`,children:_jsx(_components.code,{children:`AvailableMemory`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`AvailableMemory`}),` is the amount of system memory available to the Refinery process.`]}),`\n`,_jsxs(_components.p,{children:[`This value will typically be set through an environment variable controlled by the container or deploy script.\nIf this value is zero or not set, then `,_jsx(_components.code,{children:`MaxMemoryPercentage`}),` cannot be used to calculate the maximum allocation and `,_jsx(_components.code,{children:`MaxAlloc`}),` will be used instead.\nIf set, then this must be a memory size.\nSizes with standard unit suffixes (such as `,_jsx(_components.code,{children:`MB`}),` and `,_jsx(_components.code,{children:`GiB`}),`) and Kubernetes units (such as `,_jsx(_components.code,{children:`M`}),` and `,_jsx(_components.code,{children:`Gi`}),`) are supported.\nFractional values with a suffix are supported.\nIf `,_jsx(_components.code,{children:`AvailableMemory`}),` is set, `,_jsx(_components.code,{children:`Collections.MaxAlloc`}),` must not be defined.\nA useful value for this setting will leave 1-2GB of pod memory for overages.\nFor typical configurations this may be about 85%-90% of the pod’s total memory.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`memorysize`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`4.5Gb`})]}),`\n`,_jsxs(_components.li,{children:[`Environment variable: `,_jsx(_components.code,{children:`REFINERY_AVAILABLE_MEMORY`})]}),`\n`,_jsxs(_components.li,{children:[`Command line switch: `,_jsx(_components.code,{children:`--available-memory`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`maxmemorypercentage`,children:_jsx(_components.code,{children:`MaxMemoryPercentage`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`MaxMemoryPercentage`}),` is the maximum percentage of memory that should be allocated by the span collector.`]}),`\n`,_jsxs(_components.p,{children:[`If nonzero, then it must be an integer value between 1 and 100, representing the target maximum percentage of memory that should be allocated by the span collector.\nIf set to a non-zero value, then once per tick (see `,_jsx(_components.code,{children:`SendTicker`}),`) the collector will compare total allocated bytes to this calculated value.\nIf allocation is too high, then traces will be ejected from the cache early to reduce memory.\nUseful values for this setting are generally in the range of 70-90.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`percentage`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`75`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`75`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`maxalloc`,children:_jsx(_components.code,{children:`MaxAlloc`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`MaxAlloc`}),` is the maximum number of bytes that should be allocated by the Collector.`]}),`\n`,_jsxs(_components.p,{children:[`If set, then this must be a memory size.\nSizes with standard unit suffixes (such as `,_jsx(_components.code,{children:`MB`}),` and `,_jsx(_components.code,{children:`GiB`}),`) and Kubernetes units (such as `,_jsx(_components.code,{children:`M`}),` and `,_jsx(_components.code,{children:`Gi`}),`) are supported.\nFractional values with a suffix are supported.\nSee `,_jsx(_components.code,{children:`MaxMemoryPercentage`}),` for more details.\nIf set, `,_jsx(_components.code,{children:`Collections.AvailableMemory`}),` must not be defined.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`memorysize`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`shutdowndelay`,children:_jsx(_components.code,{children:`ShutdownDelay`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`ShutdownDelay`}),` controls the maximum time Refinery can use while draining traces at shutdown.`]}),`\n`,_jsx(_components.p,{children:`This setting controls the duration that Refinery expects to have to drain in-process traces before shutting down an instance.\nWhen asked to shut down gracefully, Refinery stops accepting new spans immediately and drains the remaining traces by sending them to remaining peers.\nThis value should be set to a bit less than the normal timeout period for shutting down without forcibly terminating the process.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`duration`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`15s`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`healthchecktimeout`,children:_jsx(_components.code,{children:`HealthCheckTimeout`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`HealthCheckTimeout`}),` controls the maximum duration allowed for collection health checks to complete.`]}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`HealthCheckTimeout`}),` setting specifies the maximum duration allowed for the health checks of the collection subsystems to complete.\nIf a subsystem does not respond within this timeout period, it will be marked as unhealthy.\nThis timeout value should be set carefully to ensure that transient delays do not lead to unnecessary failure detection while still allowing for timely identification of actual health issues.\nThis timeout should be configured to balance responsiveness and stability — allowing for timely detection of real health issues without being overly sensitive to brief or harmless delays.\nRefinery will adjust the timeout based on the configured `,_jsx(_components.code,{children:`MaxExpiredTraces`}),`, so that health checks remain effective under varying system conditions.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`duration`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`15s`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`workercount`,children:_jsx(_components.code,{children:`WorkerCount`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`WorkerCount`}),` is the number of parallel collection workers to run for trace processing.`]}),`\n`,_jsx(_components.p,{children:`Controls the number of parallel collection workers used for processing traces.\nEach worker processes a subset of traces independently using consistent hashing.\nValues greater than 1 enable parallel processing which can improve throughput on multi-core systems.\nThe default of 0 means Refinery will automatically set this value to the number of logical CPUs available at startup.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`int`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`specialized-configuration`,children:`Specialized Configuration`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Specialized`}),` contains special-purpose configuration options that are not typically needed.`]}),`\n`,_jsx(Heading,{level:`3`,id:`environmentcachettl`,children:_jsx(_components.code,{children:`EnvironmentCacheTTL`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`EnvironmentCacheTTL`}),` is the duration for which environment information is cached.`]}),`\n`,_jsxs(_components.p,{children:[`This is the amount of time for which Refinery caches environment information, which it looks up from Honeycomb for each different `,_jsx(_components.code,{children:`APIKey`}),`.\nThis information is used when making sampling decisions.\nIf you have a very large number of environments, then you may want to increase this value.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`duration`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`1h`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`compresspeercommunication`,children:_jsx(_components.code,{children:`CompressPeerCommunication`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`CompressPeerCommunication`}),` determines whether Refinery will compress span data it forwards to peers.`]}),`\n`,_jsx(_components.p,{children:`If it costs money to transmit data between Refinery instances (for example, when spread across AWS availability zones), then you almost certainly want compression enabled to reduce your bill.\nThe option to disable it is provided as an escape hatch for deployments that value lower CPU utilization over data transfer costs.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`defaulttrue`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`true`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`additionalattributes-3`,children:_jsx(_components.code,{children:`AdditionalAttributes`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`AdditionalAttributes`}),` is a map that can be used for injecting user-defined attributes into every span.`]}),`\n`,_jsx(_components.p,{children:`For example, it could be used for naming a Refinery cluster.\nBoth keys and values must be strings.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`map`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`ClusterName:MyCluster,environment:production`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`id-fields`,children:`ID Fields`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`IDFields`}),` controls the field names to use for the event ID fields.\nThese fields are used to identify events that are part of the same trace.`]}),`\n`,_jsx(Heading,{level:`3`,id:`tracenames`,children:_jsx(_components.code,{children:`TraceNames`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`TraceNames`}),` is the list of field names to use for the trace ID.`]}),`\n`,_jsx(_components.p,{children:`The first field in the list that is present in an incoming span will be used as the trace ID.\nIf none of the fields are present, then Refinery treats the span as not being part of a trace and forwards it immediately to Honeycomb.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`stringarray`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`trace.trace_id,traceId`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`parentnames`,children:_jsx(_components.code,{children:`ParentNames`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`ParentNames`}),` is the list of field names to use for the parent ID.`]}),`\n`,_jsxs(_components.p,{children:[`The first field in the list that is present in an event will be used as the parent ID.\nA trace without a `,_jsx(_components.code,{children:`parent_id`}),` is assumed to be a root span.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`stringarray`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`trace.parent_id,parentId`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`grpc-server-parameters`,children:`gRPC Server Parameters`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`GRPCServerParameters`}),` controls the parameters of the gRPC server used to receive OpenTelemetry data in gRPC format.`]}),`\n`,_jsx(Heading,{level:`3`,id:`enabled-4`,children:_jsx(_components.code,{children:`Enabled`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Enabled`}),` specifies whether the gRPC server is enabled.`]}),`\n`,_jsxs(_components.p,{children:[`If `,_jsx(_components.code,{children:`false`}),`, then the gRPC server is not started and no gRPC traffic is accepted.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`defaulttrue`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`true`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`listenaddr-3`,children:_jsx(_components.code,{children:`ListenAddr`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`ListenAddr`}),` is the address Refinery listens to for incoming GRPC OpenTelemetry events.`]}),`\n`,_jsxs(_components.p,{children:[`Incoming traffic is expected to be unencrypted, so if using SSL, then put something like `,_jsx(_components.code,{children:`nginx`}),` in front to do the decryption.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`hostport`})]}),`\n`,_jsxs(_components.li,{children:[`Environment variable: `,_jsx(_components.code,{children:`REFINERY_GRPC_LISTEN_ADDRESS`})]}),`\n`,_jsxs(_components.li,{children:[`Command line switch: `,_jsx(_components.code,{children:`--grpc-listen-address`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`maxconnectionidle`,children:_jsx(_components.code,{children:`MaxConnectionIdle`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`MaxConnectionIdle`}),` is the amount of time to permit an idle connection.`]}),`\n`,_jsx(_components.p,{children:`A duration for the amount of time after which an idle connection will be closed by sending a GoAway.\n“Idle” means that there are no active RPCs.\n“0s” sets duration to infinity, but this is not recommended for Refinery deployments behind a load balancer, because it will prevent the load balancer from distributing load evenly among peers.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`duration`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`1m`})]}),`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`1m`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`maxconnectionage`,children:_jsx(_components.code,{children:`MaxConnectionAge`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`MaxConnectionAge`}),` is the maximum amount of time a gRPC connection may exist.`]}),`\n`,_jsxs(_components.p,{children:[`After this duration, the gRPC connection is closed by sending a `,_jsx(_components.code,{children:`GoAway`}),`.\nA random jitter of +/-10% will be added to `,_jsx(_components.code,{children:`MaxConnectionAge`}),` to spread out connection storms.\n`,_jsx(_components.code,{children:`0s`}),` sets duration to infinity; a value measured in low minutes will help load balancers to distribute load among peers more evenly.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`duration`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`3m`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`maxconnectionagegrace`,children:_jsx(_components.code,{children:`MaxConnectionAgeGrace`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`MaxConnectionAgeGrace`}),` is the duration beyond `,_jsx(_components.code,{children:`MaxConnectionAge`}),` after which the connection will be forcibly closed.`]}),`\n`,_jsxs(_components.p,{children:[`This setting is in case the upstream node ignores the `,_jsx(_components.code,{children:`GoAway`}),` request.\n“0s” sets duration to infinity.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`duration`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`1m`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`keepalive`,children:_jsx(_components.code,{children:`KeepAlive`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`KeepAlive`}),` is the duration between keep-alive pings.`]}),`\n`,_jsx(_components.p,{children:`After this amount of time, if the client does not see any activity, then it pings the server to see if the transport is still alive.\n“0s” sets duration to 2 hours.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`duration`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`1m`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`keepalivetimeout`,children:_jsx(_components.code,{children:`KeepAliveTimeout`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`KeepAliveTimeout`}),` is the duration the server waits for activity on the connection.`]}),`\n`,_jsx(_components.p,{children:`This is the amount of time after which if the server does not see any activity, then it pings the client to see if the transport is still alive.\n“0s” sets duration to 20 seconds.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`duration`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`20s`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`maxsendmsgsize`,children:_jsx(_components.code,{children:`MaxSendMsgSize`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`MaxSendMsgSize`}),` is the maximum message size the server can send.`]}),`\n`,_jsx(_components.p,{children:`The server enforces a maximum message size to avoid exhausting the memory available to the process by a single request.\nThe size is expressed in bytes.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`memorysize`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`15MB`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`maxrecvmsgsize`,children:_jsx(_components.code,{children:`MaxRecvMsgSize`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`MaxRecvMsgSize`}),` is the maximum message size the server can receive.`]}),`\n`,_jsx(_components.p,{children:`The server enforces a maximum message size to avoid exhausting the memory available to the process by a single request.\nThe size is expressed in bytes.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Not eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`memorysize`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`15MB`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`sample-cache`,children:`Sample Cache`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`SampleCache`}),` controls the sample cache used to retain information about trace status after the sampling decision has been made.`]}),`\n`,_jsx(Heading,{level:`3`,id:`keptsize`,children:_jsx(_components.code,{children:`KeptSize`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`KeptSize`}),` is the number of traces preserved in the cuckoo kept traces cache.`]}),`\n`,_jsxs(_components.p,{children:[`Refinery keeps a record of each trace that was kept and sent to Honeycomb, along with some statistical information.\nThis is most useful in cases where the trace was sent before sending the root span, so that the root span can be decorated with accurate metadata.\nDefault is `,_jsx(_components.code,{children:`10_000`}),` traces.\nEach trace in this cache consumes roughly 200 bytes.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`int`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`10000`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`droppedsize`,children:_jsx(_components.code,{children:`DroppedSize`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`DroppedSize`}),` is the size of the cuckoo dropped traces cache.`]}),`\n`,_jsx(_components.p,{children:`This cache consumes 4-6 bytes per trace at a scale of millions of traces.\nChanging its size with live reload sets a future limit, but does not have an immediate effect.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`int`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`1000000`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`sizecheckinterval`,children:_jsx(_components.code,{children:`SizeCheckInterval`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`SizeCheckInterval`}),` controls how often the cuckoo cache re-evaluates its remaining capacity.`]}),`\n`,_jsx(_components.p,{children:`This cache is quite resilient so it does not need to happen very often, but the operation is also inexpensive.\nDefault is 10 seconds.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`duration`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`10s`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`stress-relief`,children:`Stress Relief`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`StressRelief`}),` controls the Stress Relief mechanism, which is used to prevent Refinery from being overwhelmed by a large number of traces.`]}),`\n`,_jsxs(_components.p,{children:[`There is a metric called `,_jsx(_components.code,{children:`stress_level`}),` that is emitted as part of Refinery metrics.\nIt is a measure of Refinery’s throughput rate relative to its processing rate, combined with the amount of room in its internal queues, and ranges from `,_jsx(_components.code,{children:`0`}),` to `,_jsx(_components.code,{children:`100`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`stress_level`}),` is generally expected to be `,_jsx(_components.code,{children:`0`}),` except under heavy load.\nWhen stress levels reach `,_jsx(_components.code,{children:`100`}),`, there is an increased chance that Refinery will become unstable.\nTo avoid this problem, the Stress Relief system can do deterministic sampling on new trace traffic based solely on `,_jsx(_components.code,{children:`TraceID`}),`, without having to store traces in the cache or take the time processing sampling rules.\nExisting traces in flight will be processed normally, but when Stress Relief is active, trace decisions are made deterministically on a per-span basis; all spans will be sampled according to the `,_jsx(_components.code,{children:`SamplingRate`}),` specified here.`]}),`\n`,_jsxs(_components.p,{children:[`Once Stress Relief activates (by exceeding the `,_jsx(_components.code,{children:`ActivationLevel`}),`), it will not deactivate until `,_jsx(_components.code,{children:`stress_level`}),` falls below the `,_jsx(_components.code,{children:`DeactivationLevel`}),`.`]}),`\n`,_jsx(_components.p,{children:`When it deactivates, normal trace decisions are made — and any additional spans that arrive for traces that were active during Stress Relief will respect the decisions made during that time.\nThe measurement of stress is a lagging indicator and is highly dependent on Refinery configuration and scaling.\nOther configuration values should be well tuned first, before adjusting the Stress Relief Activation parameters.\nStress Relief is not a substitute for proper configuration and scaling, but it can be used as a safety valve to prevent Refinery from becoming unstable under heavy load.`}),`\n`,_jsx(Heading,{level:`3`,id:`mode`,children:_jsx(_components.code,{children:`Mode`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Mode`}),` is a string indicating how to use Stress Relief.`]}),`\n`,_jsxs(_components.p,{children:[`This setting sets the Stress Relief mode.\n“never” means that Stress Relief will never activate.\n“monitor” is the recommended setting, and means that Stress Relief will monitor the status of Refinery and activate according to the levels set by fields such as `,_jsx(_components.code,{children:`ActivationLevel`}),`.\n“always” means that Stress Relief is always on, which may be useful in an emergency situation.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`string`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`never`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`activationlevel`,children:_jsx(_components.code,{children:`ActivationLevel`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`ActivationLevel`}),` is the `,_jsx(_components.code,{children:`stress_level`}),` (from 0-100) at which Stress Relief is triggered.`]}),`\n`,_jsxs(_components.p,{children:[`This value must be greater than `,_jsx(_components.code,{children:`DeactivationLevel`}),` and should be high enough that it is not reached in normal operation.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`percentage`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`90`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`deactivationlevel`,children:_jsx(_components.code,{children:`DeactivationLevel`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`DeactivationLevel`}),` is the `,_jsx(_components.code,{children:`stress_level`}),` (from 0-100) at which Stress Relief is turned off.`]}),`\n`,_jsxs(_components.p,{children:[`This setting is subject to `,_jsx(_components.code,{children:`MinimumActivationDuration`}),`.\nThe value must be less than `,_jsx(_components.code,{children:`ActivationLevel`}),`.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`percentage`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`75`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`samplingrate`,children:_jsx(_components.code,{children:`SamplingRate`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`SamplingRate`}),` is the sampling rate to use when Stress Relief is activated.`]}),`\n`,_jsxs(_components.p,{children:[`All new traces will be deterministically sampled at this rate based only on the `,_jsx(_components.code,{children:`traceID`}),`.\nIt should be chosen to be a rate that sends fewer samples than the average sampling rate Refinery is expected to generate.\nFor example, if Refinery is configured to normally sample at a rate of 1 in 10, then Stress Relief should be configured to sample at a rate of at least 1 in 30.\nIf this value is configured to send more data to Honeycomb during stress relief than the normal average sampling strategy, it may overwhelm the upstream send queue and have the opposite of the desired effect.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`int`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`100`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`minimumactivationduration`,children:_jsx(_components.code,{children:`MinimumActivationDuration`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`MinimumActivationDuration`}),` is the minimum time that Stress Relief will stay enabled once activated.`]}),`\n`,_jsx(_components.p,{children:`This setting helps to prevent oscillations.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Eligible for live reload.`}),`\n`,_jsxs(_components.li,{children:[`Type: `,_jsx(_components.code,{children:`duration`})]}),`\n`,_jsxs(_components.li,{children:[`Default: `,_jsx(_components.code,{children:`10s`})]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":{},"config":{},"pageMetadata":{"title":"Configure Honeycomb Refinery","description":"Customize your Refinery configuration with general settings, peer management, and storage options beyond the default installation values.","sidebarTitle":"Configure","href":"/manage-data-volume/sample/honeycomb-refinery/configure"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Default Configuration","slug":"default-configuration","depth":2,"children":[]},{"title":"Recommended Settings","slug":"recommended-settings","depth":2,"children":[]},{"title":"Environment Variables","slug":"environment-variables","depth":2,"children":[]},{"title":"Refinery Config File","slug":"refinery-config-file","depth":2,"children":[]},{"title":"Example","slug":"example","depth":2,"children":[]},{"title":"General Configuration","slug":"general-configuration","depth":2,"children":[{"title":"ConfigurationVersion","slug":"configurationversion","depth":3,"children":[]},{"title":"MinRefineryVersion","slug":"minrefineryversion","depth":3,"children":[]},{"title":"DatasetPrefix","slug":"datasetprefix","depth":3,"children":[]},{"title":"ConfigReloadInterval","slug":"configreloadinterval","depth":3,"children":[]}]},{"title":"Network Configuration","slug":"network-configuration","depth":2,"children":[{"title":"ListenAddr","slug":"listenaddr","depth":3,"children":[]},{"title":"PeerListenAddr","slug":"peerlistenaddr","depth":3,"children":[]},{"title":"HTTPIdleTimeout","slug":"httpidletimeout","depth":3,"children":[]},{"title":"HoneycombAPI","slug":"honeycombapi","depth":3,"children":[]},{"title":"AdditionalHeaders","slug":"additionalheaders","depth":3,"children":[]}]},{"title":"Access Key Configuration","slug":"access-key-configuration","depth":2,"children":[{"title":"ReceiveKeys","slug":"receivekeys","depth":3,"children":[]},{"title":"ReceiveKeyIDs","slug":"receivekeyids","depth":3,"children":[]},{"title":"AcceptOnlyListedKeys","slug":"acceptonlylistedkeys","depth":3,"children":[]},{"title":"SendKey","slug":"sendkey","depth":3,"children":[]},{"title":"SendKeyMode","slug":"sendkeymode","depth":3,"children":[]}]},{"title":"Refinery Telemetry","slug":"refinery-telemetry","depth":2,"children":[{"title":"AddRuleReasonToTrace","slug":"addrulereasontotrace","depth":3,"children":[]},{"title":"AddSpanCountToRoot","slug":"addspancounttoroot","depth":3,"children":[]},{"title":"AddCountsToRoot","slug":"addcountstoroot","depth":3,"children":[]},{"title":"AddHostMetadataToTrace","slug":"addhostmetadatatotrace","depth":3,"children":[]}]},{"title":"Traces","slug":"traces","depth":2,"children":[{"title":"SendDelay","slug":"senddelay","depth":3,"children":[]},{"title":"BatchTimeout","slug":"batchtimeout","depth":3,"children":[]},{"title":"TraceTimeout","slug":"tracetimeout","depth":3,"children":[]},{"title":"SpanLimit","slug":"spanlimit","depth":3,"children":[]},{"title":"MaxBatchSize","slug":"maxbatchsize","depth":3,"children":[]},{"title":"SendTicker","slug":"sendticker","depth":3,"children":[]},{"title":"MaxExpiredTraces","slug":"maxexpiredtraces","depth":3,"children":[]}]},{"title":"Debugging","slug":"debugging","depth":2,"children":[{"title":"DebugServiceAddr","slug":"debugserviceaddr","depth":3,"children":[]},{"title":"QueryAuthToken","slug":"queryauthtoken","depth":3,"children":[]},{"title":"AdditionalErrorFields","slug":"additionalerrorfields","depth":3,"children":[]},{"title":"DryRun","slug":"dryrun","depth":3,"children":[]}]},{"title":"Refinery Logger","slug":"refinery-logger","depth":2,"children":[{"title":"Type","slug":"type","depth":3,"children":[]},{"title":"Level","slug":"level","depth":3,"children":[]}]},{"title":"Honeycomb Logger","slug":"honeycomb-logger","depth":2,"children":[{"title":"APIHost","slug":"apihost","depth":3,"children":[]},{"title":"APIKey","slug":"apikey","depth":3,"children":[]},{"title":"Dataset","slug":"dataset","depth":3,"children":[]},{"title":"SamplerEnabled","slug":"samplerenabled","depth":3,"children":[]},{"title":"SamplerThroughput","slug":"samplerthroughput","depth":3,"children":[]},{"title":"AdditionalAttributes","slug":"additionalattributes","depth":3,"children":[]}]},{"title":"Stdout Logger","slug":"stdout-logger","depth":2,"children":[{"title":"Structured","slug":"structured","depth":3,"children":[]},{"title":"SamplerEnabled","slug":"samplerenabled-2","depth":3,"children":[]},{"title":"SamplerThroughput","slug":"samplerthroughput-2","depth":3,"children":[]}]},{"title":"Prometheus Metrics","slug":"prometheus-metrics","depth":2,"children":[{"title":"Enabled","slug":"enabled","depth":3,"children":[]},{"title":"ListenAddr","slug":"listenaddr-2","depth":3,"children":[]}]},{"title":"OpenTelemetry Metrics","slug":"opentelemetry-metrics","depth":2,"children":[{"title":"Enabled","slug":"enabled-2","depth":3,"children":[]},{"title":"APIHost","slug":"apihost-2","depth":3,"children":[]},{"title":"APIKey","slug":"apikey-2","depth":3,"children":[]},{"title":"Dataset","slug":"dataset-2","depth":3,"children":[]},{"title":"ReportingInterval","slug":"reportinginterval","depth":3,"children":[]},{"title":"Compression","slug":"compression","depth":3,"children":[]},{"title":"AdditionalAttributes","slug":"additionalattributes-2","depth":3,"children":[]}]},{"title":"OpenTelemetry Tracing","slug":"opentelemetry-tracing","depth":2,"children":[{"title":"Enabled","slug":"enabled-3","depth":3,"children":[]},{"title":"APIHost","slug":"apihost-3","depth":3,"children":[]},{"title":"APIKey","slug":"apikey-3","depth":3,"children":[]},{"title":"Dataset","slug":"dataset-3","depth":3,"children":[]},{"title":"SampleRate","slug":"samplerate","depth":3,"children":[]},{"title":"Insecure","slug":"insecure","depth":3,"children":[]}]},{"title":"Peer Management","slug":"peer-management","depth":2,"children":[{"title":"Type","slug":"type-2","depth":3,"children":[]},{"title":"Identifier","slug":"identifier","depth":3,"children":[]},{"title":"IdentifierInterfaceName","slug":"identifierinterfacename","depth":3,"children":[]},{"title":"UseIPV6Identifier","slug":"useipv6identifier","depth":3,"children":[]},{"title":"Peers","slug":"peers","depth":3,"children":[]}]},{"title":"Redis Peer Management","slug":"redis-peer-management","depth":2,"children":[{"title":"Host","slug":"host","depth":3,"children":[]},{"title":"ClusterHosts","slug":"clusterhosts","depth":3,"children":[]},{"title":"Username","slug":"username","depth":3,"children":[]},{"title":"Password","slug":"password","depth":3,"children":[]},{"title":"AuthCode","slug":"authcode","depth":3,"children":[]},{"title":"ClusterName","slug":"clustername","depth":3,"children":[]},{"title":"UseTLS","slug":"usetls","depth":3,"children":[]},{"title":"UseTLSInsecure","slug":"usetlsinsecure","depth":3,"children":[]},{"title":"Timeout","slug":"timeout","depth":3,"children":[]}]},{"title":"Collection Settings","slug":"collection-settings","depth":2,"children":[{"title":"PeerQueueSize","slug":"peerqueuesize","depth":3,"children":[]},{"title":"IncomingQueueSize","slug":"incomingqueuesize","depth":3,"children":[]},{"title":"AvailableMemory","slug":"availablememory","depth":3,"children":[]},{"title":"MaxMemoryPercentage","slug":"maxmemorypercentage","depth":3,"children":[]},{"title":"MaxAlloc","slug":"maxalloc","depth":3,"children":[]},{"title":"ShutdownDelay","slug":"shutdowndelay","depth":3,"children":[]},{"title":"HealthCheckTimeout","slug":"healthchecktimeout","depth":3,"children":[]},{"title":"WorkerCount","slug":"workercount","depth":3,"children":[]}]},{"title":"Specialized Configuration","slug":"specialized-configuration","depth":2,"children":[{"title":"EnvironmentCacheTTL","slug":"environmentcachettl","depth":3,"children":[]},{"title":"CompressPeerCommunication","slug":"compresspeercommunication","depth":3,"children":[]},{"title":"AdditionalAttributes","slug":"additionalattributes-3","depth":3,"children":[]}]},{"title":"ID Fields","slug":"id-fields","depth":2,"children":[{"title":"TraceNames","slug":"tracenames","depth":3,"children":[]},{"title":"ParentNames","slug":"parentnames","depth":3,"children":[]}]},{"title":"gRPC Server Parameters","slug":"grpc-server-parameters","depth":2,"children":[{"title":"Enabled","slug":"enabled-4","depth":3,"children":[]},{"title":"ListenAddr","slug":"listenaddr-3","depth":3,"children":[]},{"title":"MaxConnectionIdle","slug":"maxconnectionidle","depth":3,"children":[]},{"title":"MaxConnectionAge","slug":"maxconnectionage","depth":3,"children":[]},{"title":"MaxConnectionAgeGrace","slug":"maxconnectionagegrace","depth":3,"children":[]},{"title":"KeepAlive","slug":"keepalive","depth":3,"children":[]},{"title":"KeepAliveTimeout","slug":"keepalivetimeout","depth":3,"children":[]},{"title":"MaxSendMsgSize","slug":"maxsendmsgsize","depth":3,"children":[]},{"title":"MaxRecvMsgSize","slug":"maxrecvmsgsize","depth":3,"children":[]}]},{"title":"Sample Cache","slug":"sample-cache","depth":2,"children":[{"title":"KeptSize","slug":"keptsize","depth":3,"children":[]},{"title":"DroppedSize","slug":"droppedsize","depth":3,"children":[]},{"title":"SizeCheckInterval","slug":"sizecheckinterval","depth":3,"children":[]}]},{"title":"Stress Relief","slug":"stress-relief","depth":2,"children":[{"title":"Mode","slug":"mode","depth":3,"children":[]},{"title":"ActivationLevel","slug":"activationlevel","depth":3,"children":[]},{"title":"DeactivationLevel","slug":"deactivationlevel","depth":3,"children":[]},{"title":"SamplingRate","slug":"samplingrate","depth":3,"children":[]},{"title":"MinimumActivationDuration","slug":"minimumactivationduration","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/honeycomb/b94dfbf0ae869e30/_assets/scripts/kapa.js","/_mintlify/custom/honeycomb/0eb253641253d1ce/main.js","/_mintlify/custom/honeycomb/a0f1d373bf4aece9/tracing.js"],"subdomain":"honeycomb","siteName":"Honeycomb Docs","title":"Configure Honeycomb Refinery - Honeycomb Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-04-15T03:05:22.176Z","originalFileLocation":"manage-data-volume/sample/honeycomb-refinery/configure.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Customize your Refinery configuration with general settings, peer management, and storage options beyond the default installation values.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Honeycomb Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/honeycomb/7YUY9epdPvOVWjv6/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/honeycomb/7YUY9epdPvOVWjv6/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/honeycomb/7YUY9epdPvOVWjv6/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/honeycomb/7YUY9epdPvOVWjv6/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/honeycomb/7YUY9epdPvOVWjv6/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/honeycomb/7YUY9epdPvOVWjv6/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/honeycomb/7YUY9epdPvOVWjv6/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/honeycomb/7YUY9epdPvOVWjv6/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/honeycomb/7YUY9epdPvOVWjv6/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Configure Honeycomb Refinery - Honeycomb Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Customize your Refinery configuration with general settings, peer management, and storage options beyond the default installation values.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Honeycomb Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.honeycomb.io/manage-data-volume/sample/honeycomb-refinery/configure\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://honeycomb.mintlify.app/_mintlify/api/og/v2?division=Honeycomb+Refinery\u0026amp;title=Configure+Honeycomb+Refinery\u0026amp;description=Customize+your+Refinery+configuration+with+general+settings%2C+peer+management%2C+and+storage+options+beyond+the+default+installation+values.\u0026amp;theme=93661a4477bec396dfc2bcd6\u0026amp;signature=95fc50ac589eac06e27e830721c00ca5986aa5bb36d22412ebd467f625a3e916\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Configure Honeycomb Refinery - Honeycomb Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Customize your Refinery configuration with general settings, peer management, and storage options beyond the default installation values.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://honeycomb.mintlify.app/_mintlify/api/og/v2?division=Honeycomb+Refinery\u0026amp;title=Configure+Honeycomb+Refinery\u0026amp;description=Customize+your+Refinery+configuration+with+general+settings%2C+peer+management%2C+and+storage+options+beyond+the+default+installation+values.\u0026amp;theme=93661a4477bec396dfc2bcd6\u0026amp;signature=95fc50ac589eac06e27e830721c00ca5986aa5bb36d22412ebd467f625a3e916\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/honeycomb/7YUY9epdPvOVWjv6/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Honeycomb Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0298ec\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.honeycomb.io/manage-data-volume/sample/honeycomb-refinery/configure\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/manage-data-volume/sample/honeycomb-refinery/configure.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.honeycomb.io/#organization\",\"name\":\"Honeycomb Docs\",\"url\":\"https://docs.honeycomb.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/honeycomb/TYbxiKcJ1fL3Sm5n/_assets/logos/light.svg?fit=max\u0026auto=format\u0026n=TYbxiKcJ1fL3Sm5n\u0026q=85\u0026s=27a1eaed720bce94471b9408761a57a5\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.honeycomb.io#website\",\"name\":\"Honeycomb Docs\",\"url\":\"https://docs.honeycomb.io\",\"publisher\":{\"@id\":\"https://docs.honeycomb.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.honeycomb.io/manage-data-volume/sample/honeycomb-refinery/configure#webpage\",\"url\":\"https://docs.honeycomb.io/manage-data-volume/sample/honeycomb-refinery/configure\",\"name\":\"Configure Honeycomb Refinery\",\"description\":\"Customize your Refinery configuration with general settings, peer management, and storage options beyond the default installation values.\",\"dateModified\":\"2026-04-15T03:05:22.176Z\",\"isPartOf\":{\"@id\":\"https://docs.honeycomb.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.honeycomb.io/manage-data-volume/sample/honeycomb-refinery/configure#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.honeycomb.io/manage-data-volume/sample/honeycomb-refinery/configure#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Control Data Volume\",\"item\":\"https://docs.honeycomb.io/manage-data-volume/sample\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sample\",\"item\":\"https://docs.honeycomb.io/manage-data-volume/sample\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Honeycomb Refinery\",\"item\":\"https://docs.honeycomb.io/manage-data-volume/sample/honeycomb-refinery\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Configure Honeycomb Refinery\",\"item\":\"https://docs.honeycomb.io/manage-data-volume/sample/honeycomb-refinery/configure\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.honeycomb.io/manage-data-volume/sample/honeycomb-refinery/configure#article\",\"headline\":\"Configure Honeycomb Refinery\",\"name\":\"Configure Honeycomb Refinery\",\"description\":\"Customize your Refinery configuration with general settings, peer management, and storage options beyond the default installation values.\",\"url\":\"https://docs.honeycomb.io/manage-data-volume/sample/honeycomb-refinery/configure\",\"mainEntityOfPage\":{\"@id\":\"https://docs.honeycomb.io/manage-data-volume/sample/honeycomb-refinery/configure#webpage\"},\"dateModified\":\"2026-04-15T03:05:22.176Z\",\"publisher\":{\"@id\":\"https://docs.honeycomb.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.honeycomb.io#website\"}}]}\u003c/script>","siteName":"Honeycomb Docs","nav":{"global":{"anchors":[{"anchor":"Docs Home","icon":"home","href":"/"},{"anchor":"Blog","icon":"bullhorn","href":"https://www.honeycomb.io/blog"},{"anchor":"Honeycomb Academy","icon":"book","href":"https://academy.honeycomb.io/"}]},"tabs":[{"tab":"Get Started","pages":[{"title":"Get Started","href":"/get-started"}]},{"tab":"Send Data","pages":[{"title":"Send Data to Honeycomb: Overview","sidebarTitle":"Overview","icon":"location-pin","mode":"wide","href":"/send-data"},{"group":"Send Data with AI","public":true,"expanded":true,"pages":[{"title":"Send Data with AI Agent","sidebarTitle":"Send Data with AI Agent","href":"/send-data/ai"}]},{"group":"Instrument Applications","public":true,"expanded":true,"pages":[{"title":"Send Data from Applications","sidebarTitle":"Overview","href":"/send-data/opentelemetry"},{"group":"Backend","public":true,"pages":[{"group":"Node.js","public":true,"root":{"title":"Send Data to Honeycomb with Node.js","sidebarTitle":"Node.js","mode":"wide","href":"/send-data/javascript-nodejs"},"pages":[{"title":"Send Data with the OpenTelemetry JavaScript SDK","sidebarTitle":"OpenTelemetry for JavaScript SDK","href":"/send-data/javascript-nodejs/opentelemetry-sdk"},{"title":"Send Logs with Libhoney for JavaScript","sidebarTitle":"Libhoney for JavaScript","href":"/send-data/javascript-nodejs/libhoney"}]},{"group":"Python","public":true,"root":{"title":"Send Data to Honeycomb with Python","sidebarTitle":"Python","mode":"wide","href":"/send-data/python"},"pages":[{"title":"Send Data with the OpenTelemetry Python SDK","sidebarTitle":"OpenTelemetry for Python SDK","href":"/send-data/python/opentelemetry-sdk"},{"title":"Send Logs with Libhoney for Python","sidebarTitle":"Libhoney for Python","href":"/send-data/python/libhoney"}]},{"group":"Go","public":true,"root":{"title":"Send Data to Honeycomb with Go","sidebarTitle":"Go","mode":"wide","href":"/send-data/go"},"pages":[{"title":"Send Data with the OpenTelemetry Go SDK","sidebarTitle":"OpenTelemetry for Go SDK","href":"/send-data/go/opentelemetry-sdk"},{"title":"Send Logs with Libhoney for Go","sidebarTitle":"Libhoney for Go","href":"/send-data/go/libhoney"}]},{"group":"Java","public":true,"root":{"title":"Send Data to Honeycomb with Java","sidebarTitle":"Java","mode":"wide","href":"/send-data/java"},"pages":[{"title":"Send Data with the OpenTelemetry Java Agent","sidebarTitle":"OpenTelemetry Java Agent","href":"/send-data/java/opentelemetry-agent"},{"title":"Send Logs with Libhoney for Java","sidebarTitle":"Libhoney for Java","href":"/send-data/java/libhoney"}]},{"group":"Ruby","public":true,"root":{"title":"Send Data to Honeycomb with Ruby","sidebarTitle":"Ruby","mode":"wide","href":"/send-data/ruby"},"pages":[{"title":"Send Data with the OpenTelemetry Ruby SDK","sidebarTitle":"OpenTelemetry for Ruby SDK","href":"/send-data/ruby/opentelemetry-sdk"},{"title":"Send Logs with Libhoney for Ruby","sidebarTitle":"Libhoney for Ruby","href":"/send-data/ruby/libhoney"}]},{"title":"Send Data with the OpenTelemetry .NET SDK","sidebarTitle":".NET","href":"/send-data/dotnet"}]},{"group":"Web and Mobile","public":true,"pages":[{"group":"Browser JavaScript","public":true,"root":{"title":"Instrument Frontend Web Applications with OpenTelemetry","sidebarTitle":"Web JavaScript","href":"/send-data/javascript-browser"},"pages":[{"title":"Symbolicate JavaScript Stack Traces with the OpenTelemetry Collector","sidebarTitle":"Symbolicate Stack Traces","href":"/send-data/javascript-browser/symbolicate"}]},{"group":"Android","public":true,"root":{"title":"Send Android Data to Honeycomb","sidebarTitle":"Android","href":"/send-data/android"},"pages":[{"title":"Attributes in the Honeycomb OpenTelemetry Android SDK","sidebarTitle":"Available Attributes","href":"/send-data/android/attributes"},{"title":"Symbolicate Android Stack Traces with the OpenTelemetry Collector","sidebarTitle":"Symbolicate Stack Traces","href":"/send-data/android/symbolicate"}]},{"group":"iOS","public":true,"root":{"title":"Send iOS Data to Honeycomb with Swift","sidebarTitle":"Swift","href":"/send-data/ios"},"pages":[{"title":"Attributes in the Honeycomb OpenTelemetry Swift SDK","sidebarTitle":"Available Attributes","href":"/send-data/ios/attributes"},{"title":"Symbolicate iOS Stack Traces with the OpenTelemetry Collector","sidebarTitle":"Symbolicate Stack Traces","href":"/send-data/ios/symbolicate"}]},{"title":"Instrument React Native Applications with OpenTelemetry","sidebarTitle":"React Native","href":"/send-data/react-native"}]},{"title":"Add Custom Instrumentation","sidebarTitle":"Customize Instrumentation","href":"/send-data/standardize/add-custom-instrumentation"},{"title":"Add Context","sidebarTitle":"Add Context","href":"/send-data/standardize/add-context"},{"title":"Send Application Metrics to Honeycomb","sidebarTitle":"Send Application Metrics","href":"/send-data/metrics/application"},{"group":"Send Logs with SDKs","public":true,"root":{"title":"Send Logs from OpenTelemetry SDKs","sidebarTitle":"SDKs","href":"/send-data/logs/opentelemetry/sdk"},"pages":[{"title":"Example: Send OpenTelemetry Logs with the OpenTelemetry .NET SDK","sidebarTitle":"Example: SDK Logs + .NET","href":"/send-data/logs/opentelemetry/sdk/dotnet"},{"title":"Example: Send OpenTelemetry Logs with the OpenTelemetry Python SDK","sidebarTitle":"Example: SDK Logs + Python","href":"/send-data/logs/opentelemetry/sdk/python"},{"title":"Example: Send OpenTelemetry Logs with the OpenTelemetry Java SDK","sidebarTitle":"Example: SDK Logs + Java","href":"/send-data/logs/opentelemetry/sdk/java"},{"title":"Example: Send OpenTelemetry Logs with the OpenTelemetry JavaScript SDK","sidebarTitle":"Example: SDK Logs + JavaScript","href":"/send-data/logs/opentelemetry/sdk/javascript"},{"title":"Example: Send OpenTelemetry Logs with the OpenTelemetry Go SDK","sidebarTitle":"Example: SDK Logs + Go","href":"/send-data/logs/opentelemetry/sdk/go"}]}]},{"group":"Instrument Infrastructure","public":true,"expanded":true,"pages":[{"group":"Kubernetes","public":true,"root":{"title":"Send Data from Kubernetes","sidebarTitle":"Kubernetes","href":"/send-data/kubernetes"},"pages":[{"title":"Create a Telemetry Pipeline","sidebarTitle":"Create Telemetry Pipeline","tag":"Ent+","href":"/send-data/kubernetes/opentelemetry/create-telemetry-pipeline"},{"title":"Add Automatic Instrumentation (Low Code)","sidebarTitle":"Add Automatic Instrumentation","href":"/send-data/kubernetes/opentelemetry/add-automatic-instrumentation"},{"title":"Send Data from Instrumented Code to Collectors","href":"/send-data/kubernetes/opentelemetry/collect-instrumented-code"},{"title":"OpenTelemetry's Kubernetes Components","href":"/send-data/kubernetes/opentelemetry/components"},{"title":"Send Events with the Kubernetes Objects Receiver","sidebarTitle":"Send Events with Kubernetes Objects Receiver","href":"/send-data/kubernetes/send-events-objects-receiver"},{"title":"Send Logs with OpenTelemetry's Filelog Receiver","sidebarTitle":"Send Logs with OpenTelemetry's Filelog Receiver","href":"/send-data/kubernetes/send-logs-filelog-receiver"}]},{"group":"AWS","public":true,"root":{"title":"Send Data from Amazon Web Services (AWS)","sidebarTitle":"AWS","href":"/send-data/aws"},"pages":[{"title":"How Honeycomb's AWS Integrations Work","sidebarTitle":"How Integrations Work","href":"/send-data/aws/how-aws-integrations-work"},{"title":"Send Data from AWS via AWS CloudFormation","sidebarTitle":"AWS + AWS CloudFormation","href":"/send-data/aws/aws-cloudformation"},{"title":"Send Data from AWS via HashiCorp Terraform","sidebarTitle":"AWS + HashiCorp Terraform","href":"/send-data/aws/hashicorp-terraform"},{"group":"AWS Lambda","public":true,"root":{"title":"Send Data from AWS Lambda","sidebarTitle":"AWS Lambda","mode":"wide","href":"/send-data/aws/lambda"},"pages":[{"title":"Export Data with AWS Lambda Layer + OpenTelemetry","sidebarTitle":"AWS Lambda + OpenTelemetry","href":"/send-data/aws/lambda/opentelemetry"},{"title":"Export Data with AWS Lambda + Honeycomb Lambda Extension","sidebarTitle":"Honeycomb Lambda Extension","href":"/send-data/aws/lambda/honeycomb-lambda-extension"}]},{"title":"Send Metrics from AWS CloudWatch","sidebarTitle":"AWS CloudWatch","href":"/integrations/metrics/aws-cloudwatch"},{"title":"Connect to Honeycomb with AWS PrivateLink","sidebarTitle":"AWS PrivateLink","tag":"Ent","href":"/integrations/aws-privatelink"}]},{"title":"Collect Telemetry from Azure","sidebarTitle":"Azure","href":"/send-data/azure"},{"title":"Collect Telemetry from Google Cloud Platform","sidebarTitle":"GCP","href":"/send-data/gcp"},{"group":"HashiCorp","public":true,"pages":[{"title":"Send Metrics from HashiCorp Consul","sidebarTitle":"HashiCorp Consul","href":"/integrations/metrics/hashicorp-consul"},{"title":"Send Metrics from HashiCorp Nomad","sidebarTitle":"HashiCorp Nomad","href":"/integrations/metrics/hashicorp-nomad"},{"title":"Send Metrics from HashiCorp Vault","sidebarTitle":"HashiCorp Vault","href":"/integrations/metrics/hashicorp-vault"}]},{"title":"Send Data from Service Meshes and API Gateways","sidebarTitle":"Service Meshes \u0026 API Gateways","href":"/integrations/traces/service-meshes-api-gateways"},{"group":"Log Sources","public":true,"pages":[{"title":"Send JSON Logs","sidebarTitle":"JSON","href":"/send-data/logs/structured/json"},{"title":"Send NGINX Logs","sidebarTitle":"NGINX","href":"/send-data/logs/structured/nginx"},{"title":"Send MySQL Logs","sidebarTitle":"MySQL","href":"/send-data/logs/structured/mysql"},{"title":"Send PostgreSQL Logs","sidebarTitle":"PostgreSQL","href":"/send-data/logs/structured/postgresql"},{"title":"Send Other Webserver Logs","sidebarTitle":"Other Webserver","href":"/send-data/logs/structured/other-webserver"},{"title":"Send Structured Logs with Honeytail","sidebarTitle":"Other","href":"/send-data/logs/structured/honeytail"},{"title":"Send Logs with the OpenTelemetry Collector","sidebarTitle":"Logs with the OpenTelemetry Collector","href":"/send-data/logs/unstructured/collector"},{"title":"Send Unstructured Logs with Honeytail + Custom Regex","sidebarTitle":"Logs with Honeytail + Regex","href":"/send-data/logs/unstructured/honeytail-regex"},{"group":"Log Shippers","public":true,"pages":[{"title":"Stream Logs from Fastly","sidebarTitle":"Fastly","href":"/integrations/logs/fastly"},{"title":"Forward Fluentd Data","sidebarTitle":"Fluentd","href":"/integrations/logs/fluentd"},{"title":"Filter and Send Logstash Data","sidebarTitle":"Logstash","href":"/integrations/logs/logstash"}]}]},{"group":"Metrics Sources","public":true,"root":{"title":"Send Metrics to Honeycomb","sidebarTitle":"Metrics","href":"/send-data/metrics"},"pages":[{"title":"Send System Metrics with the OpenTelemetry Collector","sidebarTitle":"Host System Metrics","href":"/send-data/metrics/system"},{"title":"Send Metrics from Prometheus Clients","sidebarTitle":"Prometheus","href":"/integrations/metrics/prometheus"}]}]},{"group":"CI/CD Observability","public":true,"pages":[{"title":"Generate Traces from Build Pipelines","sidebarTitle":"Build Pipelines","href":"/integrations/build-pipelines"},{"title":"Gate Deployments with GitHub Actions Deployment Protection Rules","sidebarTitle":"GitHub Deployment Protection Rules","tag":"Beta","href":"/integrations/github-deployment-protection-rules"}]},{"group":"Manage Pipelines","public":true,"pages":[{"group":"OpenTelemetry Collector","public":true,"root":{"title":"Send Data with the OpenTelemetry Collector","sidebarTitle":"OpenTelemetry Collector","href":"/send-data/opentelemetry/collector"},"pages":[{"title":"Handle Sensitive Information with the OpenTelemetry Collector","sidebarTitle":"Handle Sensitive Information","href":"/send-data/opentelemetry/collector/handle-sensitive-information"},{"title":"Group Logs by Pattern with the OpenTelemetry Drain Processor","sidebarTitle":"Group Logs by Pattern","href":"/send-data/opentelemetry/collector/group-logs-by-pattern"},{"title":"Migrate Telemetry Schemas with the OpenTelemetry Schema Processor","sidebarTitle":"Migrate Telemetry Schemas","href":"/send-data/opentelemetry/collector/migrate-telemetry-schemas"}]},{"group":"Honeycomb Telemetry Pipeline","public":true,"root":{"title":"Honeycomb Telemetry Pipeline","sidebarTitle":"Honeycomb Telemetry Pipeline","tag":"Ent+","href":"/send-data/telemetry-pipeline"},"pages":[{"group":"Pipeline Manager","public":true,"root":{"title":"Pipeline Manager","sidebarTitle":"Pipeline Manager","tag":"Ent+","href":"/send-data/telemetry-pipeline/manager"},"pages":[{"title":"Install Pipeline Manager","tag":"Ent+","href":"/send-data/telemetry-pipeline/install"},{"group":"Sources","public":true,"root":{"title":"Pipeline Manager Sources","sidebarTitle":"Sources","tag":"Ent+","mode":"wide","href":"/send-data/telemetry-pipeline/sources"},"pages":[{"title":"Active Directory","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/active-directory"},{"title":"Aerospike","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/aerospike"},{"title":"Apache Combined","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/apache-combined"},{"title":"Apache Common","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/apache-common"},{"title":"Apache HTTP","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/apache-http"},{"title":"Apache Spark","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/apache-spark"},{"title":"AWS Cloudwatch","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/aws-cloudwatch"},{"title":"AWS S3 Event","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/aws-s3-event"},{"title":"AWS S3 Rehydration","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/aws-s3-rehydration"},{"title":"Azure Blob Storage","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/azure-blob-storage"},{"title":"Azure Blob Rehydration","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/azure-blob-rehydration"},{"title":"Azure Event Hub","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/azure-event-hub"},{"title":"Cassandra","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/cassandra"},{"title":"Cisco ASA","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/cisco-asa"},{"title":"Cisco Catalyst","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/cisco-catalyst"},{"title":"Cisco Meraki","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/cisco-meraki"},{"title":"Cloudflare","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/cloudflare"},{"title":"CockroachDB","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/cockroachdb"},{"title":"Common Event Format","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/common-event-format"},{"title":"Couchbase","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/couchbase"},{"title":"CouchDB","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/couchdb"},{"title":"Crowdstrike FDR","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/crowdstrike-fdr"},{"title":"CSV","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/csv"},{"title":"Custom","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/custom"},{"title":"Elasticsearch","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/elasticsearch"},{"title":"F5 BIG-IP","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/f5-big-ip"},{"title":"File","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/filelog"},{"title":"Filestats","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/filestats"},{"title":"Fluent Forward","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/fluent-forward"},{"title":"Google Cloud PubSub","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/google-cloud-pubsub"},{"title":"Google Cloud Storage Rehydration","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/google-cloud-storage-rehydration"},{"title":"Hadoop","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/hadoop"},{"title":"HAProxy","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/haproxy"},{"title":"HBase","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/hbase"},{"title":"Honeycomb Telemetry Pipeline Agent","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/honeycomb-telemetry-pipeline-agent"},{"title":"Honeycomb Telemetry Pipeline Gateway","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/honeycomb-telemetry-pipeline-gateway"},{"title":"Honeycomb Telemetry Pipeline","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/honeycomb-telemetry-pipeline"},{"title":"Host Metrics","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/host-metrics"},{"title":"HTTP Check","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/http-check"},{"title":"HTTP Log","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/http-log"},{"title":"JBoss","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/jboss"},{"title":"Journald","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/journald"},{"title":"JVM","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/jvm"},{"title":"Kafka Cluster","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/kafka-cluster"},{"title":"Kafka Node","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/kafka-node"},{"title":"Kafka OTLP","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/kafka-otlp"},{"title":"Kubernetes Cluster Events","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/kubernetes-cluster-events"},{"title":"Kubernetes Cluster Metrics","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/kubernetes-cluster-metrics"},{"title":"Kubernetes Container Logs","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/kubernetes-container-logs"},{"title":"Kubernetes Kubelet Metrics","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/kubernetes-kubelet-metrics"},{"title":"Kubernetes Prometheus Node","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/kubernetes-prometheus-metrics"},{"title":"Logstash","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/logstash"},{"title":"macOS","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/macos"},{"title":"macOS Unified Logging","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/macos-unified-logging"},{"title":"Microsoft 365","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/microsoft-365"},{"title":"Microsoft IIS","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/microsoft-iis"},{"title":"Microsoft SQL Server","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/microsoft-sql-server"},{"title":"MongoDB","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/mongodb"},{"title":"MongoDB Atlas","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/mongodb-atlas"},{"title":"MySQL","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/mysql"},{"title":"NetFlow","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/netflow"},{"title":"Nginx","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/nginx"},{"title":"Okta","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/okta"},{"title":"OpenTelemetry (OTLP)","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/opentelemetry"},{"title":"Oracle Database","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/oracle-database"},{"title":"Packet Capture","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/packet-capture"},{"title":"PgBouncer","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/pgbouncer"},{"title":"PostgreSQL","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/postgresql"},{"title":"Prometheus","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/prometheus"},{"title":"RabbitMQ","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/rabbitmq"},{"title":"Redis","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/redis"},{"title":"SAP HANA","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/sap-hana"},{"title":"SAP NetWeaver","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/sap-netweaver"},{"title":"Solr","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/solr"},{"title":"Splunk (HEC)","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/splunk-hec"},{"title":"Splunk (TCP)","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/splunk-tcp"},{"title":"Splunk Search API","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/splunk-search-api"},{"title":"SQL Query","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/sql-query"},{"title":"StatsD","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/statsd"},{"title":"Syslog","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/syslog"},{"title":"TCP","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/tcp"},{"title":"Telemetry Generator","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/telemetry-generator"},{"title":"Tomcat","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/tomcat"},{"title":"Ubiquiti","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/ubiquiti"},{"title":"UDP","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/udp"},{"title":"VMware ESXi","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/vmware-esxi"},{"title":"VMware vCenter","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/vmware-vcenter"},{"title":"W3C","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/w3c"},{"title":"WildFly","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/wildfly"},{"title":"Windows DHCP","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/windows-dhcp"},{"title":"Windows Events","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/windows-events"},{"title":"Windows Event Trace (ETW)","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/windows-event-trace-etw"},{"title":"ZooKeeper","tag":"Ent+","href":"/send-data/telemetry-pipeline/sources/zookeeper"}]},{"group":"Destinations","public":true,"root":{"title":"Pipeline Manager Destinations","sidebarTitle":"Destinations","tag":"Ent+","mode":"wide","href":"/send-data/telemetry-pipeline/destinations"},"pages":[{"title":"AWS S3","tag":"Ent+","href":"/send-data/telemetry-pipeline/destinations/aws-s3"},{"title":"Azure Blob Storage","tag":"Ent+","href":"/send-data/telemetry-pipeline/destinations/azure-blob"},{"title":"Honeycomb","tag":"Ent+","href":"/send-data/telemetry-pipeline/destinations/honeycomb"},{"title":"Honeycomb","tag":"Ent+","href":"/send-data/telemetry-pipeline/destinations/honeycomb-enhance-indexing-s3"},{"title":"Honeycomb Refinery","tag":"Ent+","href":"/send-data/telemetry-pipeline/destinations/honeycomb-refinery"},{"title":"Bindplane Gateway","tag":"Ent+","href":"/send-data/telemetry-pipeline/destinations/bindplane-gateway"}]},{"group":"Processors","public":true,"root":{"title":"Pipeline Manager Processors","sidebarTitle":"Processors","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors"},"pages":[{"title":"Add Fields","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/add-fields"},{"title":"Batch","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/batch"},{"title":"Coalesce","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/coalesce"},{"title":"Compute Metric Statistics","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/compute-metric-stats"},{"title":"Concat","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/concat"},{"title":"Copy Field","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/copy-field"},{"title":"Count Telemetry","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/count-telemetry"},{"title":"Custom","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/custom"},{"title":"Deduplicate Logs","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/deduplicate-logs"},{"title":"Delete Fields","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/delete-fields"},{"title":"Delete Empty Values","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/delete-empty-values"},{"title":"Resource Detection","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/detect-resource"},{"title":"Extract Metric","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/extract-metric"},{"title":"Filter by Condition","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/filter-by-condition"},{"title":"Filter by Field","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/filter-by-field"},{"title":"Filter HTTP Status","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/filter-by-http-status"},{"title":"Filter Metric Name","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/filter-by-metric-name"},{"title":"Filter by Regex","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/filter-by-regex"},{"title":"Filter Severity","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/filter-by-severity"},{"title":"Google SecOps Standardization","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/google-secops-standardization"},{"title":"Group by Attributes","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/group-by-attributes"},{"title":"Log Sampling","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/log-sampling"},{"title":"Lookup Fields","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/lookup-fields"},{"title":"Marshal","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/marshal"},{"title":"Mask Sensitive Data","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/mask-sensitive-data"},{"title":"Move Field","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/move-field"},{"title":"Parse CSV","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/parse-csv"},{"title":"Parse JSON","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/parse-json"},{"title":"Parse Key Value","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/parse-key-value"},{"title":"Parse Severity","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/parse-severity"},{"title":"Parse Timestamp","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/parse-timestamp"},{"title":"Parse with Regex","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/parse-regex"},{"title":"Parse XML","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/parse-xml"},{"title":"Redact Sensitive Data","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/redact-sensitive-data"},{"title":"Rename Field","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/rename-field"},{"title":"Rename Metric","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/rename-metric"},{"title":"Resource Detection","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/resource-detection"},{"title":"Rewrite Timestamp","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/rewrite-timestamp"},{"title":"Split","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/split"},{"title":"Transform","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/transform"},{"title":"Unroll","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/unroll"}]},{"title":"Processor Impact on Agent Performance","tag":"Ent+","href":"/send-data/telemetry-pipeline/processors/performance"}]},{"group":"Enhance with Archive","public":true,"root":{"title":"Enhance with Archive","sidebarTitle":"Enhance with Archive","tag":"Ent+","href":"/send-data/telemetry-pipeline/enhance"},"pages":[{"title":"Set Up an Amazon S3 Archive with Terraform","sidebarTitle":"Terraform Setup","tag":"Ent+","href":"/send-data/telemetry-pipeline/enhance/terraform-setup"},{"title":"Set Up an Amazon S3 Archive with AWS Console","sidebarTitle":"AWS Console Setup","tag":"Ent+","href":"/send-data/telemetry-pipeline/enhance/aws-console-setup"},{"title":"Collector Export to Amazon S3 Archive","sidebarTitle":"Configure OTel Collector Export","tag":"Ent+","href":"/send-data/telemetry-pipeline/enhance/collector-export-s3"}]}]}]},{"group":"Shape Data","public":true,"expanded":true,"pages":[{"title":"Map Your Data","sidebarTitle":"Map Data","href":"/send-data/standardize/map-data"},{"title":"Transform Your Data","sidebarTitle":"Transform Data","href":"/send-data/standardize/transform-data"},{"title":"Calculated Field Reference","url":"https://docs.honeycomb.io/reference/calculated-field-expression","href":"/reference/calculated-field-reference"}]},{"group":"Control Data Volume","public":true,"expanded":true,"pages":[{"group":"Sample","public":true,"pages":[{"title":"Sampling","sidebarTitle":"About Sampling","href":"/manage-data-volume/sample"},{"title":"When to Sample","sidebarTitle":"When to Sample","href":"/manage-data-volume/sample/guidelines"},{"title":"Avoid Sampling Gen AI Telemetry","sidebarTitle":"Gen AI Telemetry","href":"/manage-data-volume/sample/gen-ai"},{"title":"Sampled Data in Honeycomb","sidebarTitle":"Sampled Data in Honeycomb","href":"/manage-data-volume/sample/sampled-data-in-honeycomb"},{"group":"Honeycomb Refinery","root":{"title":"Honeycomb Refinery","sidebarTitle":"Honeycomb Refinery","href":"/manage-data-volume/sample/honeycomb-refinery"},"pages":[{"title":"Set Up Honeycomb Refinery","description":"Install and configure Refinery for the first time, connect it to your data pipeline, and prepare it to start making tail-based sampling decisions.","sidebarTitle":"Set Up","href":"/manage-data-volume/sample/honeycomb-refinery/set-up"},{"title":"Configure Honeycomb Refinery","sidebarTitle":"Configure","href":"/manage-data-volume/sample/honeycomb-refinery/configure"},{"title":"Specify Sampling Methods in Honeycomb Refinery","description":"Define how Refinery samples your traces. Learn how to combine multiple sampling methods for more precise control over which data you keep.","sidebarTitle":"Specify Sampling Methods","href":"/manage-data-volume/sample/honeycomb-refinery/sampling-methods"},{"title":"Scale and Size Honeycomb Refinery","sidebarTitle":"Scale \u0026 Size","href":"/manage-data-volume/sample/honeycomb-refinery/scale-size"},{"title":"Diagnose Refinery Performance Through Trace Patterns","sidebarTitle":"Diagnose Performance Through Trace Patterns","href":"/manage-data-volume/sample/honeycomb-refinery/diagnose"},{"title":"Monitor Honeycomb Refinery","sidebarTitle":"Monitor","href":"/manage-data-volume/sample/honeycomb-refinery/monitor"}]}]},{"group":"Filter","public":true,"pages":[{"title":"Filter Processor for OpenTelemetry Collector","sidebarTitle":"Filter Processor (OTel Collector)","href":"/manage-data-volume/filter/filter-processor"}]},{"group":"Adjust Metrics Granularity","public":true,"pages":[{"title":"Manage Metrics Events","sidebarTitle":"Manage Metrics Events","href":"/manage-data-volume/adjust-granularity/metrics-events"},{"title":"Metrics-to-Event Mapping","sidebarTitle":"Metric-to-Event Mapping","href":"/manage-data-volume/adjust-granularity/metrics-event-mapping"}]}]},{"group":"Use Cases","public":true,"expanded":true,"pages":[{"group":"Correlate Web and Mobile Data with Embrace","pages":[{"title":"Connect Honeycomb and Embrace","sidebarTitle":"Overview","tag":"Partner","href":"/integrations/embrace/overview"},{"title":"Investigate Backend Latency","tag":"Partner","href":"/integrations/embrace/use-cases/investigate-backend-latency"},{"title":"Diagnose Mobile ANRs and Hangs","tag":"Partner","href":"/integrations/embrace/use-cases/diagnose-mobile-anrs"},{"title":"Investigate with Embrace and Honeycomb MCP","tag":"Partner","href":"/integrations/embrace/use-cases/investigate-with-mcp"}]},{"title":"Monitor Anthropic Usage \u0026 Cost","href":"/send-data/use-cases/anthropic-usage-monitoring"},{"title":"Send Claude Platform Traces to Honeycomb","sidebarTitle":"Claude Platform Traces","tag":"Beta","href":"/send-data/use-cases/claude-platform"},{"title":"Instrumenting AI Agents","sidebarTitle":"Instrument AI Agents","playground":"none","href":"/send-data/use-cases/agents"},{"group":"Monitor LLMs","pages":[{"title":"Monitor LLM-Powered Applications","sidebarTitle":"Overview","href":"/send-data/use-cases/llm"},{"title":"Text to JSON Quick Start","href":"/send-data/use-cases/llm/text-to-json-quickstart"}]}]},{"title":"UI Changelog","url":"https://changelog.honeycomb.io/","icon":"clock","href":"/ui-changelog"},{"title":"API Changelog","url":"https://api-changelog.honeycomb.io/","icon":"code","href":"/api-changelog"}]},{"tab":"Investigate","pages":[{"title":"Investigate","href":"/investigate"}]},{"tab":"Notify \u0026 Alert","pages":[{"title":"Notify \u0026 Alert","href":"/notify"}]},{"tab":"Configure","pages":[{"title":"Configure","href":"/configure"}]},{"tab":"Troubleshoot","pages":[{"title":"Troubleshoot","href":"/troubleshoot"}]},{"tab":"Integrations","pages":[{"title":"Integrations","href":"/integrations"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api/introduction"}]}]},"basePath":"","title":"Configure Honeycomb Refinery - Honeycomb Docs","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":[],"chunks":[]}