Skip to content

Commit a4cd25b

Browse files
committed
refactor: deprecate clickhouse.json feature gate in favor of per-exporter json config
Replace the deprecated --feature-gates=clickhouse.json CLI flag with the per-exporter json: true config option, as recommended by the upstream OpenTelemetry ClickHouse exporter (v0.149.0). The old OTEL_AGENT_FEATURE_GATE_ARG env var is still supported for other feature gates. When it contains clickhouse.json, the entrypoint strips that specific gate, maps it to HYPERDX_CLICKHOUSE_JSON_ENABLED=true, and prints a deprecation warning. Any remaining feature gates are preserved and passed through to the collector binary as before. Changes: - Add HYPERDX_CLICKHOUSE_JSON_ENABLED env var as the new canonical config - Add json field to ClickHouse exporter configs in opampController.ts - Add json field to standalone config (config.standalone.yaml) - Strip clickhouse.json from OTEL_AGENT_FEATURE_GATE_ARG with deprecation warning, preserving other feature gates - Update docker-compose.dev.yml to use the new env var Ref: HDX-3994
1 parent 6e9a553 commit a4cd25b

5 files changed

Lines changed: 62 additions & 37 deletions

File tree

docker-compose.dev.yml

Lines changed: 35 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
11
name: ${HDX_DEV_PROJECT:-hdx-oss-dev}
22
x-hdx-labels: &hdx-labels
3-
hdx.dev.slot: '${HDX_DEV_SLOT:-0}'
4-
hdx.dev.branch: '${HDX_DEV_BRANCH:-unknown}'
5-
hdx.dev.worktree: '${HDX_DEV_WORKTREE:-unknown}'
3+
hdx.dev.slot: "${HDX_DEV_SLOT:-0}"
4+
hdx.dev.branch: "${HDX_DEV_BRANCH:-unknown}"
5+
hdx.dev.worktree: "${HDX_DEV_WORKTREE:-unknown}"
66
services:
77
db:
88
labels:
99
<<: *hdx-labels
1010
hdx.dev.service: mongodb
11-
hdx.dev.port: '${HDX_DEV_MONGO_PORT:-27017}'
11+
hdx.dev.port: "${HDX_DEV_MONGO_PORT:-27017}"
1212
image: mongo:5.0.32-focal
1313
volumes:
1414
- .volumes/db_dev_${HDX_DEV_SLOT:-0}:/data/db
1515
ports:
16-
- '${HDX_DEV_MONGO_PORT:-27017}:27017'
16+
- "${HDX_DEV_MONGO_PORT:-27017}:27017"
1717
networks:
1818
- internal
1919
otel-collector:
2020
labels:
2121
<<: *hdx-labels
2222
hdx.dev.service: otel-collector
23-
hdx.dev.port: '${HDX_DEV_OTEL_HTTP_PORT:-4318}'
24-
hdx.dev.url: 'http://localhost:${HDX_DEV_OTEL_HTTP_PORT:-4318}'
23+
hdx.dev.port: "${HDX_DEV_OTEL_HTTP_PORT:-4318}"
24+
hdx.dev.url: "http://localhost:${HDX_DEV_OTEL_HTTP_PORT:-4318}"
2525
build:
2626
context: .
2727
dockerfile: docker/otel-collector/Dockerfile
@@ -30,26 +30,26 @@ services:
3030
OTEL_COLLECTOR_VERSION: ${OTEL_COLLECTOR_VERSION}
3131
OTEL_COLLECTOR_CORE_VERSION: ${OTEL_COLLECTOR_CORE_VERSION}
3232
environment:
33-
CLICKHOUSE_ENDPOINT: 'tcp://ch-server:9000?dial_timeout=10s'
34-
CLICKHOUSE_PROMETHEUS_METRICS_ENDPOINT: 'ch-server:9363'
33+
CLICKHOUSE_ENDPOINT: "tcp://ch-server:9000?dial_timeout=10s"
34+
CLICKHOUSE_PROMETHEUS_METRICS_ENDPOINT: "ch-server:9363"
3535
HYPERDX_OTEL_EXPORTER_CLICKHOUSE_DATABASE: ${HYPERDX_OTEL_EXPORTER_CLICKHOUSE_DATABASE}
3636
HYPERDX_API_KEY: ${HYPERDX_API_KEY}
3737
HYPERDX_LOG_LEVEL: ${HYPERDX_LOG_LEVEL}
38-
OPAMP_SERVER_URL: 'http://host.docker.internal:${HYPERDX_OPAMP_PORT:-4320}'
39-
CUSTOM_OTELCOL_CONFIG_FILE: '/etc/otelcol-contrib/custom.config.yaml'
38+
OPAMP_SERVER_URL: "http://host.docker.internal:${HYPERDX_OPAMP_PORT:-4320}"
39+
CUSTOM_OTELCOL_CONFIG_FILE: "/etc/otelcol-contrib/custom.config.yaml"
4040
# Uncomment to enable stdout logging for the OTel collector
41-
OTEL_SUPERVISOR_LOGS: 'true'
42-
HYPERDX_OTEL_EXPORTER_TABLES_TTL: '24h'
41+
OTEL_SUPERVISOR_LOGS: "true"
42+
HYPERDX_OTEL_EXPORTER_TABLES_TTL: "24h"
4343
volumes:
4444
- ./docker/otel-collector/config.yaml:/etc/otelcol-contrib/config.yaml
4545
- ./docker/otel-collector/supervisor_docker.yaml.tmpl:/etc/otel/supervisor.yaml.tmpl
4646
# Add a custom config file
4747
- ./docker/otel-collector/custom.config.yaml:/etc/otelcol-contrib/custom.config.yaml
4848
ports:
49-
- '${HDX_DEV_OTEL_HEALTH_PORT:-13133}:13133' # health_check extension
50-
- '${HDX_DEV_OTEL_GRPC_PORT:-4317}:4317' # OTLP gRPC receiver
51-
- '${HDX_DEV_OTEL_HTTP_PORT:-4318}:4318' # OTLP http receiver
52-
- '${HDX_DEV_OTEL_METRICS_PORT:-8888}:8888' # metrics extension
49+
- "${HDX_DEV_OTEL_HEALTH_PORT:-13133}:13133" # health_check extension
50+
- "${HDX_DEV_OTEL_GRPC_PORT:-4317}:4317" # OTLP gRPC receiver
51+
- "${HDX_DEV_OTEL_HTTP_PORT:-4318}:4318" # OTLP http receiver
52+
- "${HDX_DEV_OTEL_METRICS_PORT:-8888}:8888" # metrics extension
5353
restart: always
5454
networks:
5555
- internal
@@ -60,8 +60,8 @@ services:
6060
labels:
6161
<<: *hdx-labels
6262
hdx.dev.service: otel-collector-json
63-
hdx.dev.port: '${HDX_DEV_OTEL_JSON_HTTP_PORT:-14318}'
64-
hdx.dev.url: 'http://localhost:${HDX_DEV_OTEL_JSON_HTTP_PORT:-14318}'
63+
hdx.dev.port: "${HDX_DEV_OTEL_JSON_HTTP_PORT:-14318}"
64+
hdx.dev.url: "http://localhost:${HDX_DEV_OTEL_JSON_HTTP_PORT:-14318}"
6565
build:
6666
context: .
6767
dockerfile: docker/otel-collector/Dockerfile
@@ -70,24 +70,25 @@ services:
7070
OTEL_COLLECTOR_VERSION: ${OTEL_COLLECTOR_VERSION}
7171
OTEL_COLLECTOR_CORE_VERSION: ${OTEL_COLLECTOR_CORE_VERSION}
7272
environment:
73-
CLICKHOUSE_ENDPOINT: 'tcp://ch-server:9000?dial_timeout=10s'
74-
CLICKHOUSE_PROMETHEUS_METRICS_ENDPOINT: 'ch-server:9363'
75-
HYPERDX_OTEL_EXPORTER_CLICKHOUSE_DATABASE: 'otel_json'
76-
HYPERDX_OTEL_EXPORTER_CREATE_LEGACY_SCHEMA: 'true'
73+
CLICKHOUSE_ENDPOINT: "tcp://ch-server:9000?dial_timeout=10s"
74+
CLICKHOUSE_PROMETHEUS_METRICS_ENDPOINT: "ch-server:9363"
75+
HYPERDX_OTEL_EXPORTER_CLICKHOUSE_DATABASE: "otel_json"
76+
HYPERDX_OTEL_EXPORTER_CREATE_LEGACY_SCHEMA: "true"
7777
HYPERDX_API_KEY: ${HYPERDX_API_KEY}
7878
HYPERDX_LOG_LEVEL: ${HYPERDX_LOG_LEVEL}
79-
OPAMP_SERVER_URL: 'http://host.docker.internal:${HYPERDX_OPAMP_PORT:-4320}'
80-
CUSTOM_OTELCOL_CONFIG_FILE: '/etc/otelcol-contrib/custom.config.yaml'
79+
OPAMP_SERVER_URL: "http://host.docker.internal:${HYPERDX_OPAMP_PORT:-4320}"
80+
CUSTOM_OTELCOL_CONFIG_FILE: "/etc/otelcol-contrib/custom.config.yaml"
8181
# Uncomment to enable stdout logging for the OTel collector
82-
OTEL_SUPERVISOR_LOGS: 'true'
83-
# Uncomment to enable JSON schema in ClickHouse
82+
OTEL_SUPERVISOR_LOGS: "true"
83+
# Enable JSON schema in the ClickHouse exporter (per-exporter config)
8484
# Be sure to also set BETA_CH_OTEL_JSON_SCHEMA_ENABLED to 'true' in ch-server
85-
OTEL_AGENT_FEATURE_GATE_ARG: '--feature-gates=clickhouse.json'
85+
# HYPERDX_CLICKHOUSE_JSON_ENABLED: 'true'
86+
OTEL_AGENT_FEATURE_GATE_ARG: "--feature-gates=clickhouse.json"
8687
volumes:
8788
- ./docker/otel-collector/config.yaml:/etc/otelcol-contrib/config.yaml
8889
- ./docker/otel-collector/supervisor_docker.yaml.tmpl:/etc/otel/supervisor.yaml.tmpl
8990
ports:
90-
- '${HDX_DEV_OTEL_JSON_HTTP_PORT:-14318}:4318' # OTLP http receiver
91+
- "${HDX_DEV_OTEL_JSON_HTTP_PORT:-14318}:4318" # OTLP http receiver
9192
restart: always
9293
networks:
9394
- internal
@@ -98,18 +99,18 @@ services:
9899
labels:
99100
<<: *hdx-labels
100101
hdx.dev.service: clickhouse
101-
hdx.dev.port: '${HDX_DEV_CH_HTTP_PORT:-8123}'
102-
hdx.dev.url: 'http://localhost:${HDX_DEV_CH_HTTP_PORT:-8123}'
102+
hdx.dev.port: "${HDX_DEV_CH_HTTP_PORT:-8123}"
103+
hdx.dev.url: "http://localhost:${HDX_DEV_CH_HTTP_PORT:-8123}"
103104
image: clickhouse/clickhouse-server:26.1-alpine
104105
ports:
105-
- '${HDX_DEV_CH_HTTP_PORT:-8123}:8123' # http api
106-
- '${HDX_DEV_CH_NATIVE_PORT:-9000}:9000' # native
106+
- "${HDX_DEV_CH_HTTP_PORT:-8123}:8123" # http api
107+
- "${HDX_DEV_CH_NATIVE_PORT:-9000}:9000" # native
107108
environment:
108109
# default settings
109110
CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: 1
110111
HYPERDX_OTEL_EXPORTER_CLICKHOUSE_DATABASE: ${HYPERDX_OTEL_EXPORTER_CLICKHOUSE_DATABASE}
111112
# Set to 'true' to allow for proper OTel JSON Schema creation
112-
# Be sure to also set the OTEL_AGENT_FEATURE_GATE_ARG env in otel-collector
113+
# Be sure to also set HYPERDX_CLICKHOUSE_JSON_ENABLED in otel-collector
113114
# BETA_CH_OTEL_JSON_SCHEMA_ENABLED: 'true'
114115
volumes:
115116
- ./docker/clickhouse/local/config.xml:/etc/clickhouse-server/config.xml

docker/otel-collector/config.standalone.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ exporters:
3333
logs_table_name: hyperdx_sessions
3434
timeout: 5s
3535
create_schema: ${env:HYPERDX_OTEL_EXPORTER_CREATE_LEGACY_SCHEMA:-false}
36+
json: ${env:HYPERDX_CLICKHOUSE_JSON_ENABLED:-false}
3637
retry_on_failure:
3738
enabled: true
3839
initial_interval: 5s
@@ -46,6 +47,7 @@ exporters:
4647
ttl: 720h
4748
timeout: 5s
4849
create_schema: ${env:HYPERDX_OTEL_EXPORTER_CREATE_LEGACY_SCHEMA:-false}
50+
json: ${env:HYPERDX_CLICKHOUSE_JSON_ENABLED:-false}
4951
retry_on_failure:
5052
enabled: true
5153
initial_interval: 5s

docker/otel-collector/entrypoint.sh

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,26 @@
11
#!/bin/sh
22
set -e
33

4-
# Fall back to legacy schema when the ClickHouse JSON feature gate is enabled
4+
# DEPRECATED: The clickhouse.json feature gate has been removed upstream.
5+
# When OTEL_AGENT_FEATURE_GATE_ARG contains clickhouse.json, strip it and
6+
# map it to HYPERDX_CLICKHOUSE_JSON_ENABLED instead. Other feature gates
7+
# are preserved and passed through to the collector.
58
if echo "$OTEL_AGENT_FEATURE_GATE_ARG" | grep -q "clickhouse.json"; then
9+
echo "WARNING: '--feature-gates=clickhouse.json' is deprecated and no longer supported by the collector."
10+
echo "WARNING: Use HYPERDX_CLICKHOUSE_JSON_ENABLED=true instead. This flag will be removed in a future release."
11+
export HYPERDX_CLICKHOUSE_JSON_ENABLED=true
12+
13+
# Strip clickhouse.json from the feature gates, keeping any other gates
14+
REMAINING_GATES=$(echo "$OTEL_AGENT_FEATURE_GATE_ARG" | sed 's/--feature-gates=//' | tr ',' '\n' | grep -v 'clickhouse.json' | tr '\n' ',' | sed 's/,$//')
15+
if [ -n "$REMAINING_GATES" ]; then
16+
export OTEL_AGENT_FEATURE_GATE_ARG="--feature-gates=$REMAINING_GATES"
17+
else
18+
unset OTEL_AGENT_FEATURE_GATE_ARG
19+
fi
20+
fi
21+
22+
# Fall back to legacy schema when ClickHouse JSON exporter mode is enabled
23+
if [ "$HYPERDX_CLICKHOUSE_JSON_ENABLED" = "true" ]; then
624
export HYPERDX_OTEL_EXPORTER_CREATE_LEGACY_SCHEMA=true
725
fi
826

@@ -39,7 +57,7 @@ if [ -z "$OPAMP_SERVER_URL" ]; then
3957
COLLECTOR_ARGS="$COLLECTOR_ARGS --config $CUSTOM_OTELCOL_CONFIG_FILE"
4058
fi
4159

42-
# Pass feature gates to the collector in standalone mode
60+
# Pass remaining feature gates to the collector in standalone mode
4361
if [ -n "$OTEL_AGENT_FEATURE_GATE_ARG" ]; then
4462
COLLECTOR_ARGS="$COLLECTOR_ARGS $OTEL_AGENT_FEATURE_GATE_ARG"
4563
fi

docker/otel-collector/supervisor_docker.yaml.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ agent:
2323
{{- if getenv "CUSTOM_OTELCOL_CONFIG_FILE" }}
2424
- {{ getenv "CUSTOM_OTELCOL_CONFIG_FILE" }}
2525
{{- end }}
26-
args:
2726
{{- if getenv "OTEL_AGENT_FEATURE_GATE_ARG" }}
27+
args:
2828
- {{ getenv "OTEL_AGENT_FEATURE_GATE_ARG" }}
2929
{{- end }}
3030

packages/api/src/opamp/controllers/opampController.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ type CollectorConfig = {
8282
logs_table_name: string;
8383
timeout: string;
8484
create_schema: string;
85+
json: string;
8586
retry_on_failure: {
8687
enabled: boolean;
8788
initial_interval: string;
@@ -97,6 +98,7 @@ type CollectorConfig = {
9798
ttl: string;
9899
timeout: string;
99100
create_schema: string;
101+
json: string;
100102
retry_on_failure: {
101103
enabled: boolean;
102104
initial_interval: string;
@@ -205,6 +207,7 @@ export const buildOtelCollectorConfig = (
205207
timeout: '5s',
206208
create_schema:
207209
'${env:HYPERDX_OTEL_EXPORTER_CREATE_LEGACY_SCHEMA:-false}',
210+
json: '${env:HYPERDX_CLICKHOUSE_JSON_ENABLED:-false}',
208211
retry_on_failure: {
209212
enabled: true,
210213
initial_interval: '5s',
@@ -221,6 +224,7 @@ export const buildOtelCollectorConfig = (
221224
timeout: '5s',
222225
create_schema:
223226
'${env:HYPERDX_OTEL_EXPORTER_CREATE_LEGACY_SCHEMA:-false}',
227+
json: '${env:HYPERDX_CLICKHOUSE_JSON_ENABLED:-false}',
224228
retry_on_failure: {
225229
enabled: true,
226230
initial_interval: '5s',

0 commit comments

Comments
 (0)