This guide describes how to deploy and configure the OpenTelemetry (OTEL) Collector for Ripple Custody.
This guide applies to on-premise deployments only. For telemetry concepts, see Telemetry overview. For Ripple Custody Helm chart telemetry settings, see Telemetry configuration.
Before you deploy the OTEL Collector, you need:
- A running Ripple Custody deployment.
- An understanding of telemetry concepts such as OpenTelemetry, OTLP, traces, metrics, and logs.
- Familiarity with the official OTEL Collector Helm charts.
The Ripple Custody Helm charts include a bundled OTEL Collector instance that is disabled by default:
opentelemetry-collector:
enabled: falseThe bundled OTEL Collector instance is for testing purposes only. Do not use it for production workloads. For production, deploy a dedicated and segregated OTEL Collector instance.
You can deploy OTEL Collector in two configurations:
- A single dedicated OTEL Collector instance for both trusted and untrusted components.
- Two separate dedicated instances: one for trusted components and one for untrusted components.
For more information on trusted and untrusted components, see Security model.
For more information on OTEL Collector deployment, see:
The YAML snippets on this page use the opentelemetry-collector section from the OTEL Collector Helm values.yaml file, not the Ripple Custody Helm configuration.
To enable the bundled OTEL Collector for testing, set the enabled field to true:
opentelemetry-collector:
enabled: trueThis deploys an OTEL Collector pod alongside the Ripple Custody deployment and sets the environment variables that let pods discover the OTEL Collector service.
The default resource values may be too low for a typical deployment. Run load testing at the peak usage you expect, observe resource usage, and set values accordingly.
| Parameter | Type | Default | Description |
|---|---|---|---|
resources.requests.cpu | string | - | Minimum CPU allocation for the OTEL Collector pod |
resources.requests.memory | string | - | Minimum memory allocation for the OTEL Collector pod |
resources.limits.cpu | string | - | Maximum CPU allocation for the OTEL Collector pod |
resources.limits.memory | string | - | Maximum memory allocation for the OTEL Collector pod |
opentelemetry-collector:
resources:
requests:
cpu: 4
memory: 4Gi
limits:
cpu: 8
memory: 16GiResource values must be high enough that the opentelemetry-collector pod does not enter a Pending or CrashLoopBackOff Kubernetes state. The higher the number of users, the greater the volume of telemetry data generated, and the higher the resource consumption for OTEL Collector.
Add third-party contributors as parameters in the OTEL Collector configuration. The OTEL Collector Contrib GitHub repository contains three main categories:
Configuration recommendations:
- Receivers: Set the appropriate network parameters for the protocol, such as TCP or UDP.
- Processors: Configure log and trace formatting, enrichment, and trace throttling.
- Exporters: Configure exporters to send telemetry data from OTEL Collector to another OTEL receiver or backend.
opentelemetry-collector:
ports:
syslog:
protocol: TCP # or UDPContributions from telemetry vendors such as Microsoft, AWS, Elasticsearch, and Prometheus can be found in OTEL Collector, but not all vendors are present. If a telemetry vendor contribution exists, it might not include every feature from that vendor.
By default, OTEL Collector listens on the OTLP ports, 4317 for gRPC and 4318 for HTTP or HTTPS, but not for the rSyslog protocol.
The Ripple Custody Helm charts configure OTEL Collector to listen on port 54526 with the TCP protocol for rSyslog telemetry data.
| Parameter | Type | Default | Description |
|---|---|---|---|
ports.syslog.enabled | boolean | true | Enable the syslog receiver port |
ports.syslog.containerPort | integer | 54526 | Container port for syslog reception |
ports.syslog.servicePort | integer | 54526 | Kubernetes service port for syslog |
ports.syslog.hostPort | integer | 54526 | Host port for syslog reception |
ports.syslog.protocol | string | TCP | Network protocol, TCP or UDP |
opentelemetry-collector:
ports:
syslog:
enabled: true
containerPort: 54526
servicePort: 54526
hostPort: 54526
protocol: TCPBy default, OTEL Collector only receives telemetry data sent by telemetry network protocols, such as OTLP or rSyslog, from Ripple Custody components. OTEL Collector can also read and export host telemetry data, such as stdout logs and host metrics.
Because OTEL Collector uses the Kubernetes API to access host telemetry data, it needs the correct Role Based Access Control (RBAC) permissions. Set appropriate RBAC permissions in the Kubernetes cluster for OTEL Collector to access the desired host telemetry data. For more information, see the OTEL Collector documentation.
| Parameter | Type | Default | Description |
|---|---|---|---|
presets.logsCollection.enabled | boolean | false | Enable stdout log collection from Ripple Custody components |
presets.logsCollection.includeCollectorLogs | boolean | false | Include OTEL Collector's own logs in collection |
presets.logsCollection.storeCheckpoints | boolean | false | Store log collection checkpoints for resumption |
presets.hostMetrics.enabled | boolean | false | Enable host-level metrics collection |
presets.kubernetesAttributes.enabled | boolean | false | Enrich telemetry with Kubernetes metadata |
presets.kubernetesEvents.enabled | boolean | false | Collect Kubernetes events |
presets.clusterMetrics.enabled | boolean | false | Collect cluster-wide metrics |
presets.kubeletMetrics.enabled | boolean | false | Collect kubelet metrics |
opentelemetry-collector:
enabled: true
presets:
logsCollection:
enabled: trueFor more information, see OTEL Collector presets.
You must update the default pipelines configuration for your environment. OTEL Collector executes each pipeline in three steps: receivers, processors, and exporters.
There are four pipelines:
logs/syslog- Syslog-received logslogs- OTLP-received logstraces- Distributed tracesmetrics- Application and system metrics
opentelemetry-collector:
config:
service:
pipelines:
logs/syslog:
receivers: [syslog]
processors: [batch]
exporters: [logging]
logs:
receivers: [otlp]
processors: [batch]
exporters: [logging]
traces:
receivers: [otlp]
processors: [tail_sampling]
exporters: [logging]
metrics:
receivers: [otlp]
processors: [batch]
exporters: [logging]The OTEL Collector Contrib GitHub repository provides public implementations and documentation for OTEL Collector receivers, processors, and exporters.
In OpenTelemetry, a processor sits between the receiver and exporter in the data pipeline. Processors modify telemetry data such as traces, metrics, and logs. Common tasks include filtering, batching, and data enrichment.
The Helm charts provide a default processor configuration named tail_sampling for handling traces:
opentelemetry-collector:
config:
processors:
tail_sampling:
decision_wait: 30s
num_traces: 50000
expected_new_traces_per_sec: 50
policies: [...]The tail_sampling processor defines policies that specify rules for selecting which traces to keep for analysis. Examples include capturing domain-related traces, authenticated requests, and forced logs. Policies also filter traces based on criteria such as specific HTTP targets, sources, payloads, latency, and status codes. The samples-some policy is a probabilistic sampling policy that keeps a percentage of traces to reduce storage and processing costs while providing a representative sample.
Exporters transmit telemetry data from OTEL Collector to external systems or storage. They package and send telemetry data to destinations such as monitoring platforms, logging systems, or analytics tools.
opentelemetry-collector:
config:
exporters:
elasticsearch/trace:
endpoints: ['http://my-elastic-search-host:9200']
traces_index: trace_index
elasticsearch/log:
endpoints: ['http://my-elastic-search-host:9200']
logs_index: log_index
sending_queue:
enabled: true
num_consumers: 20
queue_size: 1000
elasticsearch/syslog:
endpoints: ['http://my-elastic-search-host:9200']
logs_index: syslog_index
sending_queue:
enabled: true
num_consumers: 20
queue_size: 1000
pipelines:
logs/syslog:
exporters: [elasticsearch/syslog]
logs:
exporters: [elasticsearch/log]
traces:
exporters: [elasticsearch/trace]