[OTel] Micrometer to OpenTelemetry bridge support for metrics (#41716)

* [OTel] Micrometer to OpenTelemetry bridge support for metrics

Closes #41006

Signed-off-by: Martin Bartoš <mabartos@redhat.com>

* Review: Docs rewording

Signed-off-by: Ryan Emerson <remerson@ibm.com>

* Review: Make TELEMETRY Option descriptions consistently use OpenTelemetry to reflect pattern established by telemetry-enabled, telemetry-endpoint etc

Signed-off-by: Ryan Emerson <remerson@ibm.com>

---------

Signed-off-by: Martin Bartoš <mabartos@redhat.com>
Signed-off-by: Ryan Emerson <remerson@ibm.com>
Co-authored-by: Ryan Emerson <remerson@ibm.com>
This commit is contained in:
Martin Bartoš 2025-12-17 17:03:56 +01:00 committed by GitHub
parent 92849ef5d3
commit 548a89c823
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
18 changed files with 657 additions and 112 deletions

View File

@ -131,6 +131,7 @@ public class Profile {
OPENTELEMETRY("OpenTelemetry support", Type.DEFAULT),
OPENTELEMETRY_LOGS("OpenTelemetry Logs support", Type.PREVIEW, OPENTELEMETRY),
OPENTELEMETRY_METRICS("Micrometer to OpenTelemetry bridge support for metrics", Type.EXPERIMENTAL, OPENTELEMETRY),
DECLARATIVE_UI("declarative ui spi", Type.EXPERIMENTAL),

View File

@ -156,6 +156,13 @@ For more details, see the link:{telemetryguide_link}[{telemetryguide_name}] guid
== OpenTelemetry Logs (preview)
{project_name} now supports exporting logs to OpenTelemetry collectors, enabling centralized log management.
This preview feature allows you to export {project_name} logs to any OpenTelemetry-compatible backend and use the same OpenTelemetry collector for logs and traces.
This preview feature allows you to export {project_name} logs to any OpenTelemetry-compatible backend and use the same OpenTelemetry collector for logs, metrics and traces.
For more details, see the link:{telemetryguide_link}[{telemetryguide_name}] guide.
== OpenTelemetry Metrics (experimental)
{project_name} now provides the experimental support for exporting metrics to OpenTelemetry collectors by using the https://quarkus.io/guides/telemetry-micrometer-to-opentelemetry[Micrometer-to-OpenTelemetry bridge].
This experimental feature allows you to export {project_name} metrics to any OpenTelemetry-compatible backend and use the same OpenTelemetry collector for logs, metrics and traces.
For more details, see the link:{telemetryguide_link}[{telemetryguide_name}] guide.

View File

@ -80,6 +80,27 @@ For example, if you want only to export `WARN` and `ERROR` logs, you can change
<@kc.start parameters="--telemetry-logs-level=WARN"/>
== Metrics
WARNING: The OpenTelemetry Metrics feature is currently experimental, and it is not recommended for use in production.
NOTE: In order for the Metrics feature to function, the OpenTelemetry feature `opentelemetry` cannot be disabled.
For integrating OpenTelemetry Metrics, {project_name} uses the https://quarkus.io/guides/telemetry-micrometer-to-opentelemetry[Micrometer-to-OpenTelemetry bridge],
which provides the functionality to export metrics created by Micrometer to the OpenTelemetry Collector.
This means that all metrics created via Micrometer or OpenTelemetry metrics will be exported to the OpenTelemetry.
There are some https://quarkus.io/guides/telemetry-micrometer-to-opentelemetry#metric-differences-between-micrometer-and-opentelemetry[API, and Semantic convention differences] for Micrometer vs OTel Metrics, so you should check if all required metrics are exported.
=== Enable Metrics
You can enable the OpenTelemetry Metrics via CLI as follows:
<@kc.start parameters="--features=opentelemetry-metrics --telemetry-metrics-enabled=true --metrics-enabled=true"/>
NOTE: Metrics (`metrics-enabled`) needs to be enabled as well
For more information on how to set up metrics, see the configuration options below or visit the https://www.keycloak.org/observability/configuration-metrics[Gaining insights with metrics guide].
<@profile.ifCommunity>
== Development setup
@ -100,7 +121,7 @@ Then, you can navigate to Grafana UI by accessing `+localhost:3000+` and then yo
</@profile.ifCommunity>
<@opts.printRelevantOptions includedOptions="telemetry-*" excludedOptions="telemetry-logs-*">
<@opts.printRelevantOptions includedOptions="telemetry-*" excludedOptions="telemetry-logs-* telemetry-metrics-*">
=== Traces
<@opts.includeOptions includedOptions="tracing-enabled tracing-endpoint tracing-protocol tracing-service-name tracing-resource-attributes"/>
@ -108,6 +129,9 @@ Then, you can navigate to Grafana UI by accessing `+localhost:3000+` and then yo
=== Logs
<@opts.includeOptions includedOptions="telemetry-logs-*"/>
=== Metrics
<@opts.includeOptions includedOptions="metrics-enabled telemetry-metrics-*"/>
</@opts.printRelevantOptions>
</@tmpl.guide>

View File

@ -37,19 +37,19 @@ public class TelemetryOptions {
// Telemetry Logs
public static final Option<Boolean> TELEMETRY_LOGS_ENABLED = new OptionBuilder<>("telemetry-logs-enabled", Boolean.class)
.category(OptionCategory.TELEMETRY)
.description("Enables exporting logs to a destination handling telemetry data (OpenTelemetry Logs).")
.description("Enables exporting logs to a destination handling OpenTelemetry logs.")
.defaultValue(Boolean.FALSE)
.buildTime(true)
.build();
public static final Option<String> TELEMETRY_LOGS_ENDPOINT = new OptionBuilder<>("telemetry-logs-endpoint", String.class)
.category(OptionCategory.TELEMETRY)
.description("Telemetry (OpenTelemetry) endpoint to export logs to. If not given, the value is inherited from the '%s' option.".formatted(TELEMETRY_ENDPOINT.getKey()))
.description("OpenTelemetry endpoint to export logs to. If not given, the value is inherited from the '%s' option.".formatted(TELEMETRY_ENDPOINT.getKey()))
.build();
public static final Option<String> TELEMETRY_LOGS_PROTOCOL = new OptionBuilder<>("telemetry-logs-protocol", String.class)
.category(OptionCategory.TELEMETRY)
.description("Telemetry (OpenTelemetry) protocol used for exporting logs. If not given, the value is inherited from the '%s' option.".formatted(TELEMETRY_PROTOCOL.getKey()))
.description("OpenTelemetry protocol used for exporting logs. If not given, the value is inherited from the '%s' option.".formatted(TELEMETRY_PROTOCOL.getKey()))
.expectedValues("grpc", "http/protobuf")
.build();
@ -59,4 +59,29 @@ public class TelemetryOptions {
.defaultValue(LoggingOptions.Level.ALL)
.caseInsensitiveExpectedValues(true)
.build();
// Telemetry Metrics
public static final Option<Boolean> TELEMETRY_METRICS_ENABLED = new OptionBuilder<>("telemetry-metrics-enabled", Boolean.class)
.category(OptionCategory.TELEMETRY)
.description("Enables exporting metrics to a destination handling OpenTelemetry metrics.")
.defaultValue(Boolean.FALSE)
.buildTime(true)
.build();
public static final Option<String> TELEMETRY_METRICS_ENDPOINT = new OptionBuilder<>("telemetry-metrics-endpoint", String.class)
.category(OptionCategory.TELEMETRY)
.description("OpenTelemetry endpoint to connect to for Metrics. If not given, the value is inherited from the '%s' option.".formatted(TelemetryOptions.TELEMETRY_ENDPOINT.getKey()))
.build();
public static final Option<String> TELEMETRY_METRICS_PROTOCOL = new OptionBuilder<>("telemetry-metrics-protocol", String.class)
.category(OptionCategory.TELEMETRY)
.description("OpenTelemetry protocol used for the metrics telemetry data. If not given, the value is inherited from the '%s' option.".formatted(TelemetryOptions.TELEMETRY_PROTOCOL.getKey()))
.expectedValues("grpc", "http/protobuf")
.build();
public static final Option<String> TELEMETRY_METRICS_INTERVAL = new OptionBuilder<>("telemetry-metrics-interval", String.class)
.category(OptionCategory.TELEMETRY)
.description("The interval between the start of two metric export attempts to the destination handling OpenTelemetry metrics data. It accepts simplified format for time units as java.time.Duration (like 5000ms, 30s, 5m, 1h). If the value is only a number, it represents time in seconds.")
.defaultValue("60s")
.build();
}

View File

@ -270,6 +270,10 @@
<groupId>io.quarkus</groupId>
<artifactId>quarkus-opentelemetry-deployment</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-micrometer-opentelemetry-deployment</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>

View File

@ -125,6 +125,10 @@
<groupId>io.opentelemetry.instrumentation</groupId>
<artifactId>opentelemetry-apache-httpclient-4.3</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-micrometer-opentelemetry</artifactId>
</dependency>
<dependency>
<groupId>com.apicatalog</groupId>

View File

@ -25,6 +25,7 @@ import java.util.stream.Stream;
import org.keycloak.common.Profile;
import org.keycloak.config.HealthOptions;
import org.keycloak.config.MetricsOptions;
import org.keycloak.config.TelemetryOptions;
import org.keycloak.config.database.Database;
import static java.util.Collections.emptySet;
@ -41,7 +42,8 @@ public class IgnoredArtifacts {
fips(),
jdbcDrivers(),
health(),
metrics()
metrics(),
otelMetrics()
)
.flatMap(Collection::stream)
.collect(Collectors.toUnmodifiableSet());
@ -171,4 +173,16 @@ public class IgnoredArtifacts {
boolean isMetricsEnabled = Configuration.isTrue(MetricsOptions.METRICS_ENABLED);
return !isMetricsEnabled ? METRICS : emptySet();
}
// OpenTelemetry Metrics (Micrometer to OTel bridge)
public static Set<String> OTEL_METRICS = Set.of(
"io.quarkus:quarkus-micrometer-opentelemetry",
"io.quarkus:quarkus-micrometer-opentelemetry-deployment",
"io.opentelemetry.instrumentation:opentelemetry-micrometer-1.5"
);
private static Set<String> otelMetrics() {
boolean isOtelMetricsEnabled = Configuration.isTrue(TelemetryOptions.TELEMETRY_METRICS_ENABLED);
return !isOtelMetricsEnabled ? OTEL_METRICS : emptySet();
}
}

View File

@ -6,12 +6,14 @@ import java.net.URL;
import java.util.List;
import org.keycloak.common.Profile;
import org.keycloak.config.MetricsOptions;
import org.keycloak.config.TelemetryOptions;
import org.keycloak.config.TracingOptions;
import org.keycloak.quarkus.runtime.cli.PropertyException;
import org.keycloak.quarkus.runtime.configuration.Configuration;
import org.keycloak.utils.StringUtil;
import io.quarkus.runtime.configuration.DurationConverter;
import io.smallrye.config.ConfigSourceInterceptorContext;
import static org.keycloak.config.TelemetryOptions.TELEMETRY_ENABLED;
@ -20,6 +22,10 @@ import static org.keycloak.config.TelemetryOptions.TELEMETRY_LOGS_ENABLED;
import static org.keycloak.config.TelemetryOptions.TELEMETRY_LOGS_ENDPOINT;
import static org.keycloak.config.TelemetryOptions.TELEMETRY_LOGS_LEVEL;
import static org.keycloak.config.TelemetryOptions.TELEMETRY_LOGS_PROTOCOL;
import static org.keycloak.config.TelemetryOptions.TELEMETRY_METRICS_ENABLED;
import static org.keycloak.config.TelemetryOptions.TELEMETRY_METRICS_ENDPOINT;
import static org.keycloak.config.TelemetryOptions.TELEMETRY_METRICS_INTERVAL;
import static org.keycloak.config.TelemetryOptions.TELEMETRY_METRICS_PROTOCOL;
import static org.keycloak.config.TelemetryOptions.TELEMETRY_PROTOCOL;
import static org.keycloak.config.TelemetryOptions.TELEMETRY_RESOURCE_ATTRIBUTES;
import static org.keycloak.config.TelemetryOptions.TELEMETRY_SERVICE_NAME;
@ -27,9 +33,11 @@ import static org.keycloak.quarkus.runtime.configuration.mappers.PropertyMapper.
public class TelemetryPropertyMappers implements PropertyMapperGrouping{
private static final String OTEL_FEATURE_ENABLED_MSG = "'opentelemetry' feature is enabled";
private static final String OTEL_COLLECTOR_ENABLED_MSG = "any of available OpenTelemetry components (Logs, Traces) is turned on";
private static final String OTEL_COLLECTOR_ENABLED_MSG = "any of available OpenTelemetry components (Logs, Metrics, Traces) is turned on";
private static final String OTEL_LOGS_FEATURE_ENABLED_MSG = "feature '%s' is enabled".formatted(Profile.Feature.OPENTELEMETRY_LOGS.getVersionedKey());
private static final String OTEL_LOGS_ENABLED_MSG = "Telemetry Logs functionality ('%s') is enabled".formatted(TELEMETRY_LOGS_ENABLED.getKey());
private static final String OTEL_METRICS_FEATURE_ENABLED_MSG = "metrics and feature '%s' are enabled".formatted(Profile.Feature.OPENTELEMETRY_METRICS.getVersionedKey());
private static final String OTEL_METRICS_ENABLED_MSG = "metrics ('%s') and Telemetry Metrics functionality ('%s') are enabled".formatted(MetricsOptions.METRICS_ENABLED.getKey(), TELEMETRY_METRICS_ENABLED.getKey());
@Override
public List<? extends PropertyMapper<?>> getPropertyMappers() {
@ -85,12 +93,36 @@ public class TelemetryPropertyMappers implements PropertyMapperGrouping{
.to("quarkus.otel.logs.level")
.paramLabel("level")
.transformer(LoggingPropertyMappers::upperCase)
.build(),
// Telemetry Metrics
fromOption(TELEMETRY_METRICS_ENABLED)
.isEnabled(TelemetryPropertyMappers::isOtelMetricsFeatureEnabled, OTEL_METRICS_FEATURE_ENABLED_MSG)
.to("quarkus.otel.metrics.enabled")
.build(),
fromOption(TELEMETRY_METRICS_ENDPOINT)
.isEnabled(TelemetryPropertyMappers::isTelemetryMetricsEnabled, OTEL_METRICS_ENABLED_MSG)
.mapFrom(TelemetryOptions.TELEMETRY_ENDPOINT)
.to("quarkus.otel.exporter.otlp.metrics.endpoint")
.paramLabel("url")
.validator(TelemetryPropertyMappers::validateEndpoint)
.build(),
fromOption(TELEMETRY_METRICS_PROTOCOL)
.isEnabled(TelemetryPropertyMappers::isTelemetryMetricsEnabled, OTEL_METRICS_ENABLED_MSG)
.mapFrom(TelemetryOptions.TELEMETRY_PROTOCOL)
.to("quarkus.otel.exporter.otlp.metrics.protocol")
.paramLabel("protocol")
.build(),
fromOption(TELEMETRY_METRICS_INTERVAL)
.isEnabled(TelemetryPropertyMappers::isTelemetryMetricsEnabled, OTEL_METRICS_ENABLED_MSG)
.to("quarkus.otel.metric.export.interval")
.paramLabel("duration")
.validator(TelemetryPropertyMappers::validateDuration)
.build()
);
}
private static String checkIfDependantsAreEnabled(String value, ConfigSourceInterceptorContext context) {
if (TelemetryPropertyMappers.isTelemetryLogsEnabled() || TracingPropertyMappers.isTracingEnabled()) {
if (TelemetryPropertyMappers.isTelemetryLogsEnabled() || TelemetryPropertyMappers.isTelemetryMetricsEnabled() || TracingPropertyMappers.isTracingEnabled()) {
return Boolean.TRUE.toString();
}
return Boolean.FALSE.toString();
@ -104,6 +136,10 @@ public class TelemetryPropertyMappers implements PropertyMapperGrouping{
return Profile.isFeatureEnabled(Profile.Feature.OPENTELEMETRY_LOGS);
}
public static boolean isOtelMetricsFeatureEnabled() {
return MetricsPropertyMappers.metricsEnabled() && Profile.isFeatureEnabled(Profile.Feature.OPENTELEMETRY_METRICS);
}
public static boolean isTelemetryEnabled() {
return Configuration.isTrue("quarkus.otel.enabled");
}
@ -112,6 +148,10 @@ public class TelemetryPropertyMappers implements PropertyMapperGrouping{
return Configuration.isTrue("quarkus.otel.logs.enabled");
}
public static boolean isTelemetryMetricsEnabled() {
return MetricsPropertyMappers.metricsEnabled() && Configuration.isTrue("quarkus.otel.metrics.enabled");
}
static void validateEndpoint(String value) {
if (StringUtil.isBlank(value)) {
throw new PropertyException("Specified Endpoint URL must not be empty.");
@ -130,4 +170,15 @@ public class TelemetryPropertyMappers implements PropertyMapperGrouping{
return false;
}
}
private static void validateDuration(String value) {
try {
var duration = DurationConverter.parseDuration(value);
if (duration.isNegative() || duration.isZero()) {
throw new IllegalArgumentException();
}
} catch (IllegalArgumentException e) {
throw new PropertyException("Duration specified via '%s' is invalid.".formatted(TELEMETRY_METRICS_INTERVAL.getKey()));
}
}
}

View File

@ -1266,7 +1266,7 @@ public class PicocliTest extends AbstractConfigurationTest {
assertEquals(CommandLine.ExitCode.USAGE, nonRunningPicocli.exitCode);
assertThat(nonRunningPicocli.getErrString(), anyOf(
containsString("Disabled option: '--tracing-service-name'. Available only when Tracing is enabled"),
containsString("Disabled option: '--telemetry-service-name'. Available only when any of available OpenTelemetry components (Logs, Traces) is turned on")
containsString("Disabled option: '--telemetry-service-name'. Available only when any of available OpenTelemetry components (Logs, Metrics, Traces) is turned on")
));
assertThat(nonRunningPicocli.config.getConfigValue("quarkus.otel.enabled").getValue(), is("false"));
assertThat(nonRunningPicocli.config.getConfigValue("quarkus.otel.traces.enabled").getValue(), is("false"));
@ -1276,7 +1276,7 @@ public class PicocliTest extends AbstractConfigurationTest {
// disabled tracing
nonRunningPicocli = pseudoLaunch("start-dev", "--telemetry-service-name=service123");
assertEquals(CommandLine.ExitCode.USAGE, nonRunningPicocli.exitCode);
assertThat(nonRunningPicocli.getErrString(), containsString("Disabled option: '--telemetry-service-name'. Available only when any of available OpenTelemetry components (Logs, Traces) is turned on"));
assertThat(nonRunningPicocli.getErrString(), containsString("Disabled option: '--telemetry-service-name'. Available only when any of available OpenTelemetry components (Logs, Metrics, Traces) is turned on"));
assertThat(nonRunningPicocli.config.getConfigValue("quarkus.otel.enabled").getValue(), is("false"));
assertThat(nonRunningPicocli.config.getConfigValue("quarkus.otel.traces.enabled").getValue(), is("false"));
assertThat(nonRunningPicocli.config.getConfigValue("quarkus.otel.service.name").getValue(), is(nullValue()));
@ -1496,4 +1496,215 @@ public class PicocliTest extends AbstractConfigurationTest {
"quarkus.otel.logs.level", "DEBUG"
));
}
@Test
public void otelMetrics() {
// parent feature disabled
NonRunningPicocli nonRunningPicocli = pseudoLaunch("start-dev", "--feature-opentelemetry=disabled", "--feature-opentelemetry-metrics=enabled");
assertEquals(CommandLine.ExitCode.USAGE, nonRunningPicocli.exitCode);
assertThat(nonRunningPicocli.getErrString(), containsString("ERROR: Feature opentelemetry-metrics depends on disabled feature opentelemetry"));
onAfter();
// feature disabled
nonRunningPicocli = pseudoLaunch("start-dev", "--telemetry-metrics-enabled=true");
assertEquals(CommandLine.ExitCode.USAGE, nonRunningPicocli.exitCode);
assertThat(nonRunningPicocli.getErrString(), containsString("Disabled option: '--telemetry-metrics-enabled'. Available only when metrics and feature 'opentelemetry-metrics:v1' are enabled"));
onAfter();
// export disabled
nonRunningPicocli = pseudoLaunch("start-dev", "--features=opentelemetry-metrics", "--telemetry-metrics-enabled=true");
assertEquals(CommandLine.ExitCode.USAGE, nonRunningPicocli.exitCode);
assertThat(nonRunningPicocli.getErrString(), containsString("Disabled option: '--telemetry-metrics-enabled'. Available only when metrics and feature 'opentelemetry-metrics:v1' are enabled"));
onAfter();
// export disabled
nonRunningPicocli = pseudoLaunch("start-dev", "--metrics-enabled=true", "--features=opentelemetry-metrics", "--telemetry-metrics-enabled=false", "--telemetry-metrics-endpoint=endpoint");
assertEquals(CommandLine.ExitCode.USAGE, nonRunningPicocli.exitCode);
assertThat(nonRunningPicocli.getErrString(), containsString("Disabled option: '--telemetry-metrics-endpoint'. Available only when metrics ('metrics-enabled') and Telemetry Metrics functionality ('telemetry-metrics-enabled') are enabled"));
onAfter();
// check enabled
nonRunningPicocli = pseudoLaunch("start-dev", "--features=opentelemetry-metrics", "--metrics-enabled=true", "--telemetry-metrics-enabled=true");
assertEquals(CommandLine.ExitCode.OK, nonRunningPicocli.exitCode);
assertConfig("metrics-enabled", "true");
assertExternalConfig(Map.of(
"quarkus.otel.enabled", "true",
"quarkus.otel.metrics.enabled", "true"
));
onAfter();
// multiple components enabled
nonRunningPicocli = pseudoLaunch("start-dev", "--features=opentelemetry-metrics,opentelemetry-logs", "--metrics-enabled=true", "--telemetry-metrics-enabled=true", "--telemetry-logs-enabled=false");
assertEquals(CommandLine.ExitCode.OK, nonRunningPicocli.exitCode);
assertExternalConfig(Map.of(
"quarkus.otel.enabled", "true",
"quarkus.otel.metrics.enabled", "true",
"quarkus.otel.logs.enabled", "false"
));
onAfter();
// wrong protocol
nonRunningPicocli = pseudoLaunch("start-dev", "--features=opentelemetry-metrics", "--metrics-enabled=true", "--telemetry-metrics-enabled=true", "--telemetry-metrics-protocol=wrong");
assertEquals(CommandLine.ExitCode.USAGE, nonRunningPicocli.exitCode);
assertThat(nonRunningPicocli.getErrString(), containsString("Invalid value for option '--telemetry-metrics-protocol': wrong. Expected values are: grpc, http/protobuf"));
onAfter();
// otel protocol
nonRunningPicocli = pseudoLaunch("start-dev", "--features=opentelemetry-metrics", "--metrics-enabled=true", "--telemetry-metrics-enabled=true", "--telemetry-metrics-protocol=http/protobuf");
assertEquals(CommandLine.ExitCode.OK, nonRunningPicocli.exitCode);
assertExternalConfig(Map.of(
"quarkus.otel.enabled", "true",
"quarkus.otel.exporter.otlp.metrics.protocol", "http/protobuf"
));
onAfter();
// parent + child protocol
nonRunningPicocli = pseudoLaunch("start-dev", "--features=opentelemetry-metrics", "--metrics-enabled=true", "--telemetry-metrics-enabled=true", "--telemetry-metrics-protocol=http/protobuf", "--telemetry-protocol=grpc");
assertEquals(CommandLine.ExitCode.OK, nonRunningPicocli.exitCode);
assertExternalConfig(Map.of(
"quarkus.otel.enabled", "true",
"quarkus.otel.exporter.otlp.protocol", "grpc",
"quarkus.otel.exporter.otlp.metrics.protocol", "http/protobuf"
));
onAfter();
// parent protocol
nonRunningPicocli = pseudoLaunch("start-dev", "--features=opentelemetry-metrics", "--metrics-enabled=true", "--telemetry-metrics-enabled=true", "--telemetry-protocol=http/protobuf");
assertEquals(CommandLine.ExitCode.OK, nonRunningPicocli.exitCode);
assertExternalConfig(Map.of(
"quarkus.otel.enabled", "true",
"quarkus.otel.exporter.otlp.protocol", "http/protobuf",
"quarkus.otel.exporter.otlp.metrics.protocol", "http/protobuf"
));
onAfter();
// wrong parent endpoint
nonRunningPicocli = pseudoLaunch("start-dev", "--features=opentelemetry-metrics", "--metrics-enabled=true", "--telemetry-metrics-enabled=true", "--telemetry-endpoint=not-url");
assertEquals(CommandLine.ExitCode.USAGE, nonRunningPicocli.exitCode);
assertThat(nonRunningPicocli.getErrString(), containsString("Specified Endpoint URL is invalid"));
onAfter();
// wrong endpoint
nonRunningPicocli = pseudoLaunch("start-dev", "--features=opentelemetry-metrics", "--metrics-enabled=true", "--telemetry-metrics-enabled=true", "--telemetry-metrics-endpoint=not-url");
assertEquals(CommandLine.ExitCode.USAGE, nonRunningPicocli.exitCode);
assertThat(nonRunningPicocli.getErrString(), containsString("Specified Endpoint URL is invalid"));
onAfter();
// otel endpoint
nonRunningPicocli = pseudoLaunch("start-dev", "--features=opentelemetry-metrics", "--metrics-enabled=true", "--telemetry-metrics-enabled=true", "--telemetry-metrics-endpoint=http://keycloak.org");
assertEquals(CommandLine.ExitCode.OK, nonRunningPicocli.exitCode);
assertExternalConfig(Map.of(
"quarkus.otel.enabled", "true",
"quarkus.otel.exporter.otlp.endpoint", "http://localhost:4317",
"quarkus.otel.exporter.otlp.metrics.endpoint", "http://keycloak.org"
));
onAfter();
// parent + child endpoint
nonRunningPicocli = pseudoLaunch("start-dev", "--features=opentelemetry-metrics", "--metrics-enabled=true", "--telemetry-metrics-enabled=true", "--telemetry-endpoint=http://keycloak-keycloak-keycloak.org:3455", "--telemetry-metrics-endpoint=http://keycloak.org");
assertEquals(CommandLine.ExitCode.OK, nonRunningPicocli.exitCode);
assertExternalConfig(Map.of(
"quarkus.otel.enabled", "true",
"quarkus.otel.exporter.otlp.endpoint", "http://keycloak-keycloak-keycloak.org:3455",
"quarkus.otel.exporter.otlp.metrics.endpoint", "http://keycloak.org"
));
onAfter();
// parent endpoint
nonRunningPicocli = pseudoLaunch("start-dev", "--features=opentelemetry-metrics", "--metrics-enabled=true", "--telemetry-metrics-enabled=true", "--telemetry-endpoint=http://keycloak-keycloak-keycloak.org:3455");
assertEquals(CommandLine.ExitCode.OK, nonRunningPicocli.exitCode);
assertExternalConfig(Map.of(
"quarkus.otel.enabled", "true",
"quarkus.otel.exporter.otlp.endpoint", "http://keycloak-keycloak-keycloak.org:3455",
"quarkus.otel.exporter.otlp.metrics.endpoint", "http://keycloak-keycloak-keycloak.org:3455"
));
onAfter();
// wrong export interval
nonRunningPicocli = pseudoLaunch("start-dev", "--features=opentelemetry-metrics", "--metrics-enabled=true", "--telemetry-metrics-enabled=true", "--telemetry-metrics-interval=qwerty");
assertEquals(CommandLine.ExitCode.USAGE, nonRunningPicocli.exitCode);
assertThat(nonRunningPicocli.getErrString(), containsString("Duration specified via 'telemetry-metrics-interval' is invalid."));
onAfter();
// negative export interval
nonRunningPicocli = pseudoLaunch("start-dev", "--features=opentelemetry-metrics", "--metrics-enabled=true", "--telemetry-metrics-enabled=true", "--telemetry-metrics-interval=-12s");
assertEquals(CommandLine.ExitCode.USAGE, nonRunningPicocli.exitCode);
assertThat(nonRunningPicocli.getErrString(), containsString("Duration specified via 'telemetry-metrics-interval' is invalid."));
onAfter();
// zero export interval
nonRunningPicocli = pseudoLaunch("start-dev", "--features=opentelemetry-metrics", "--metrics-enabled=true", "--telemetry-metrics-enabled=true", "--telemetry-metrics-interval=0");
assertEquals(CommandLine.ExitCode.USAGE, nonRunningPicocli.exitCode);
assertThat(nonRunningPicocli.getErrString(), containsString("Duration specified via 'telemetry-metrics-interval' is invalid."));
onAfter();
// interval minutes
nonRunningPicocli = pseudoLaunch("start-dev", "--features=opentelemetry-metrics", "--metrics-enabled=true", "--telemetry-metrics-enabled=true", "--telemetry-metrics-interval=10m");
assertEquals(CommandLine.ExitCode.OK, nonRunningPicocli.exitCode);
assertExternalConfig("quarkus.otel.metric.export.interval","10m");
onAfter();
// interval hours
nonRunningPicocli = pseudoLaunch("start-dev", "--features=opentelemetry-metrics", "--metrics-enabled=true", "--telemetry-metrics-enabled=true", "--telemetry-metrics-interval=12h");
assertEquals(CommandLine.ExitCode.OK, nonRunningPicocli.exitCode);
assertExternalConfig("quarkus.otel.metric.export.interval","12h");
}
@Test
public void otelAll() {
// tracing
pseudoLaunch("start-dev", "--tracing-enabled=true");
assertConfig("tracing-enabled", "true");
assertExternalConfig(Map.of(
"quarkus.otel.enabled", "true",
"quarkus.otel.traces.enabled", "true"
));
onAfter();
// logs
pseudoLaunch("start-dev", "--features=opentelemetry-logs", "--telemetry-logs-enabled=true");
assertConfig(Map.of("telemetry-logs-enabled", "true"));
assertExternalConfig(Map.of(
"quarkus.otel.enabled", "true",
"quarkus.otel.logs.enabled", "true"
));
onAfter();
// metrics - not enabled
pseudoLaunch("start-dev", "--features=opentelemetry-metrics", "--telemetry-metrics-enabled=true");
assertConfig(Map.of(
"telemetry-metrics-enabled", "true",
"metrics-enabled", "false"
));
assertExternalConfigNull("quarkus.otel.metrics.enabled");
assertExternalConfig("quarkus.otel.enabled", "false");
onAfter();
// metrics
pseudoLaunch("start-dev", "--features=opentelemetry-metrics", "--telemetry-metrics-enabled=true", "--metrics-enabled=true");
assertConfig(Map.of(
"telemetry-metrics-enabled", "true",
"metrics-enabled", "true"
));
assertExternalConfig(Map.of(
"quarkus.otel.enabled", "true",
"quarkus.otel.metrics.enabled", "true"
));
onAfter();
// all
pseudoLaunch("start-dev", "--features=opentelemetry-metrics,opentelemetry-logs", "--telemetry-metrics-enabled=true", "--metrics-enabled=true", "--tracing-enabled=true", "--telemetry-logs-enabled=true");
assertConfig(Map.of(
"telemetry-metrics-enabled", "true",
"metrics-enabled", "true",
"tracing-enabled", "true",
"telemetry-logs-enabled", "true"
));
assertExternalConfig(Map.of(
"quarkus.otel.enabled", "true",
"quarkus.otel.metrics.enabled", "true",
"quarkus.otel.traces.enabled", "true",
"quarkus.otel.logs.enabled", "true"
));
}
}

View File

@ -31,6 +31,7 @@ import org.keycloak.config.DatabaseOptions;
import org.keycloak.config.HealthOptions;
import org.keycloak.config.MetricsOptions;
import org.keycloak.config.Option;
import org.keycloak.config.TelemetryOptions;
import org.junit.Test;
@ -155,6 +156,11 @@ public class IgnoredArtifactsTest extends AbstractConfigurationTest {
assertIgnoredArtifacts(IgnoredArtifacts.METRICS, MetricsOptions.METRICS_ENABLED);
}
@Test
public void otelMetrics(){
assertIgnoredArtifacts(IgnoredArtifacts.OTEL_METRICS, TelemetryOptions.TELEMETRY_METRICS_ENABLED);
}
private void assertIgnoredArtifacts(Set<String> artifactsSet, Option<Boolean> enabledOption) {
assertIgnoredArtifacts(artifactsSet, enabledOption, true);
}

View File

@ -124,4 +124,58 @@ public class TelemetryConfigurationTest extends AbstractConfigurationTest {
"quarkus.otel.exporter.otlp.logs.protocol", "http/protobuf"
));
}
@Test
public void metricsDefaults() {
initConfig();
assertConfig(Map.of(
"telemetry-metrics-enabled", "false",
"telemetry-metrics-endpoint", "http://localhost:4317",
"telemetry-metrics-protocol", "grpc",
"telemetry-metrics-interval", "60s"
));
assertExternalConfig(Map.of(
"quarkus.otel.metrics.enabled", "false",
"quarkus.otel.enabled", "false",
"quarkus.otel.exporter.otlp.metrics.endpoint", "http://localhost:4317",
"quarkus.otel.exporter.otlp.metrics.protocol", "grpc",
"quarkus.otel.metric.export.interval", "60s"
));
}
@Test
public void metricsPriorities() {
ConfigArgsConfigSource.setCliArgs("--features=opentelemetry-metrics", "--metrics-enabled=true", "--telemetry-metrics-enabled=true", "--telemetry-metrics-endpoint=localhost:2000", "--telemetry-metrics-protocol=http/protobuf");
initConfig();
assertConfig(Map.of(
"telemetry-metrics-enabled", "true",
"telemetry-metrics-endpoint", "localhost:2000",
"telemetry-metrics-protocol", "http/protobuf"
));
assertExternalConfig(Map.of(
"quarkus.otel.metrics.enabled", "true",
"quarkus.otel.enabled", "true",
"quarkus.otel.exporter.otlp.metrics.endpoint", "localhost:2000",
"quarkus.otel.exporter.otlp.metrics.protocol", "http/protobuf"
));
onAfter();
ConfigArgsConfigSource.setCliArgs("--features=opentelemetry-metrics", "--metrics-enabled=true", "--telemetry-endpoint=http://keycloak.org:1234", "--telemetry-protocol=grpc", "--telemetry-metrics-enabled=true", "--telemetry-metrics-endpoint=my-domain:2001", "--telemetry-metrics-protocol=http/protobuf");
initConfig();
assertConfig(Map.of(
"telemetry-metrics-enabled", "true",
"telemetry-metrics-endpoint", "my-domain:2001",
"telemetry-metrics-protocol", "http/protobuf",
"telemetry-endpoint", "http://keycloak.org:1234",
"telemetry-protocol", "grpc"
));
assertExternalConfig(Map.of(
"quarkus.otel.metrics.enabled", "true",
"quarkus.otel.enabled", "true",
"quarkus.otel.exporter.otlp.metrics.endpoint", "my-domain:2001",
"quarkus.otel.exporter.otlp.metrics.protocol", "http/protobuf"
));
}
}

View File

@ -313,16 +313,15 @@ Telemetry (OpenTelemetry):
--telemetry-endpoint <url>
OpenTelemetry endpoint to connect to. Default: http://localhost:4317.
Available only when any of available OpenTelemetry components (Logs, Traces)
is turned on.
Available only when any of available OpenTelemetry components (Logs,
Metrics, Traces) is turned on.
--telemetry-logs-enabled <true|false>
Enables exporting logs to a destination handling telemetry data (OpenTelemetry
Logs). Default: false. Available only when feature 'opentelemetry-logs:v1'
is enabled.
Enables exporting logs to a destination handling OpenTelemetry logs. Default:
false. Available only when feature 'opentelemetry-logs:v1' is enabled.
--telemetry-logs-endpoint <url>
Telemetry (OpenTelemetry) endpoint to export logs to. If not given, the value
is inherited from the 'telemetry-endpoint' option. Available only when
Telemetry Logs functionality ('telemetry-logs-enabled') is enabled.
OpenTelemetry endpoint to export logs to. If not given, the value is inherited
from the 'telemetry-endpoint' option. Available only when Telemetry Logs
functionality ('telemetry-logs-enabled') is enabled.
--telemetry-logs-level <level>
The most verbose log level exported to the telemetry endpoint. For more
information, check the Telemetry guide. Possible values are (case
@ -330,24 +329,46 @@ Telemetry (OpenTelemetry):
all. Available only when Telemetry Logs functionality
('telemetry-logs-enabled') is enabled.
--telemetry-logs-protocol <protocol>
Telemetry (OpenTelemetry) protocol used for exporting logs. If not given, the
value is inherited from the 'telemetry-protocol' option. Possible values
are: grpc, http/protobuf. Available only when Telemetry Logs functionality
OpenTelemetry protocol used for exporting logs. If not given, the value is
inherited from the 'telemetry-protocol' option. Possible values are: grpc,
http/protobuf. Available only when Telemetry Logs functionality
('telemetry-logs-enabled') is enabled.
--telemetry-metrics-enabled <true|false>
Enables exporting metrics to a destination handling OpenTelemetry metrics.
Default: false. Available only when metrics and feature
'opentelemetry-metrics:v1' are enabled.
--telemetry-metrics-endpoint <url>
OpenTelemetry endpoint to connect to for Metrics. If not given, the value is
inherited from the 'telemetry-endpoint' option. Available only when metrics
('metrics-enabled') and Telemetry Metrics functionality
('telemetry-metrics-enabled') are enabled.
--telemetry-metrics-interval <duration>
The interval between the start of two metric export attempts to the
destination handling OpenTelemetry metrics data. It accepts simplified
format for time units as java.time.Duration (like 5000ms, 30s, 5m, 1h). If
the value is only a number, it represents time in seconds. Default: 60s.
Available only when metrics ('metrics-enabled') and Telemetry Metrics
functionality ('telemetry-metrics-enabled') are enabled.
--telemetry-metrics-protocol <protocol>
OpenTelemetry protocol used for the metrics telemetry data. If not given, the
value is inherited from the 'telemetry-protocol' option. Possible values
are: grpc, http/protobuf. Available only when metrics ('metrics-enabled')
and Telemetry Metrics functionality ('telemetry-metrics-enabled') are
enabled.
--telemetry-protocol <protocol>
OpenTelemetry protocol used for the communication between server and
OpenTelemetry collector. Possible values are: grpc, http/protobuf. Default:
grpc. Available only when any of available OpenTelemetry components (Logs,
Traces) is turned on.
Metrics, Traces) is turned on.
--telemetry-resource-attributes <attributes>
OpenTelemetry resource attributes characterize the telemetry producer. Values
in format 'key1=val1,key2=val2'. Available only when any of available
OpenTelemetry components (Logs, Traces) is turned on.
OpenTelemetry components (Logs, Metrics, Traces) is turned on.
--telemetry-service-name <name>
OpenTelemetry service name. Takes precedence over 'service.name' defined in
the 'telemetry-resource-attributes' property. Default: keycloak. Available
only when any of available OpenTelemetry components (Logs, Traces) is turned
on.
only when any of available OpenTelemetry components (Logs, Metrics, Traces)
is turned on.
Tracing:

View File

@ -313,16 +313,15 @@ Telemetry (OpenTelemetry):
--telemetry-endpoint <url>
OpenTelemetry endpoint to connect to. Default: http://localhost:4317.
Available only when any of available OpenTelemetry components (Logs, Traces)
is turned on.
Available only when any of available OpenTelemetry components (Logs,
Metrics, Traces) is turned on.
--telemetry-logs-enabled <true|false>
Enables exporting logs to a destination handling telemetry data (OpenTelemetry
Logs). Default: false. Available only when feature 'opentelemetry-logs:v1'
is enabled.
Enables exporting logs to a destination handling OpenTelemetry logs. Default:
false. Available only when feature 'opentelemetry-logs:v1' is enabled.
--telemetry-logs-endpoint <url>
Telemetry (OpenTelemetry) endpoint to export logs to. If not given, the value
is inherited from the 'telemetry-endpoint' option. Available only when
Telemetry Logs functionality ('telemetry-logs-enabled') is enabled.
OpenTelemetry endpoint to export logs to. If not given, the value is inherited
from the 'telemetry-endpoint' option. Available only when Telemetry Logs
functionality ('telemetry-logs-enabled') is enabled.
--telemetry-logs-level <level>
The most verbose log level exported to the telemetry endpoint. For more
information, check the Telemetry guide. Possible values are (case
@ -330,24 +329,46 @@ Telemetry (OpenTelemetry):
all. Available only when Telemetry Logs functionality
('telemetry-logs-enabled') is enabled.
--telemetry-logs-protocol <protocol>
Telemetry (OpenTelemetry) protocol used for exporting logs. If not given, the
value is inherited from the 'telemetry-protocol' option. Possible values
are: grpc, http/protobuf. Available only when Telemetry Logs functionality
OpenTelemetry protocol used for exporting logs. If not given, the value is
inherited from the 'telemetry-protocol' option. Possible values are: grpc,
http/protobuf. Available only when Telemetry Logs functionality
('telemetry-logs-enabled') is enabled.
--telemetry-metrics-enabled <true|false>
Enables exporting metrics to a destination handling OpenTelemetry metrics.
Default: false. Available only when metrics and feature
'opentelemetry-metrics:v1' are enabled.
--telemetry-metrics-endpoint <url>
OpenTelemetry endpoint to connect to for Metrics. If not given, the value is
inherited from the 'telemetry-endpoint' option. Available only when metrics
('metrics-enabled') and Telemetry Metrics functionality
('telemetry-metrics-enabled') are enabled.
--telemetry-metrics-interval <duration>
The interval between the start of two metric export attempts to the
destination handling OpenTelemetry metrics data. It accepts simplified
format for time units as java.time.Duration (like 5000ms, 30s, 5m, 1h). If
the value is only a number, it represents time in seconds. Default: 60s.
Available only when metrics ('metrics-enabled') and Telemetry Metrics
functionality ('telemetry-metrics-enabled') are enabled.
--telemetry-metrics-protocol <protocol>
OpenTelemetry protocol used for the metrics telemetry data. If not given, the
value is inherited from the 'telemetry-protocol' option. Possible values
are: grpc, http/protobuf. Available only when metrics ('metrics-enabled')
and Telemetry Metrics functionality ('telemetry-metrics-enabled') are
enabled.
--telemetry-protocol <protocol>
OpenTelemetry protocol used for the communication between server and
OpenTelemetry collector. Possible values are: grpc, http/protobuf. Default:
grpc. Available only when any of available OpenTelemetry components (Logs,
Traces) is turned on.
Metrics, Traces) is turned on.
--telemetry-resource-attributes <attributes>
OpenTelemetry resource attributes characterize the telemetry producer. Values
in format 'key1=val1,key2=val2'. Available only when any of available
OpenTelemetry components (Logs, Traces) is turned on.
OpenTelemetry components (Logs, Metrics, Traces) is turned on.
--telemetry-service-name <name>
OpenTelemetry service name. Takes precedence over 'service.name' defined in
the 'telemetry-resource-attributes' property. Default: keycloak. Available
only when any of available OpenTelemetry components (Logs, Traces) is turned
on.
only when any of available OpenTelemetry components (Logs, Metrics, Traces)
is turned on.
Tracing:

View File

@ -640,16 +640,15 @@ Telemetry (OpenTelemetry):
--telemetry-endpoint <url>
OpenTelemetry endpoint to connect to. Default: http://localhost:4317.
Available only when any of available OpenTelemetry components (Logs, Traces)
is turned on.
Available only when any of available OpenTelemetry components (Logs,
Metrics, Traces) is turned on.
--telemetry-logs-enabled <true|false>
Enables exporting logs to a destination handling telemetry data (OpenTelemetry
Logs). Default: false. Available only when feature 'opentelemetry-logs:v1'
is enabled.
Enables exporting logs to a destination handling OpenTelemetry logs. Default:
false. Available only when feature 'opentelemetry-logs:v1' is enabled.
--telemetry-logs-endpoint <url>
Telemetry (OpenTelemetry) endpoint to export logs to. If not given, the value
is inherited from the 'telemetry-endpoint' option. Available only when
Telemetry Logs functionality ('telemetry-logs-enabled') is enabled.
OpenTelemetry endpoint to export logs to. If not given, the value is inherited
from the 'telemetry-endpoint' option. Available only when Telemetry Logs
functionality ('telemetry-logs-enabled') is enabled.
--telemetry-logs-level <level>
The most verbose log level exported to the telemetry endpoint. For more
information, check the Telemetry guide. Possible values are (case
@ -657,24 +656,46 @@ Telemetry (OpenTelemetry):
all. Available only when Telemetry Logs functionality
('telemetry-logs-enabled') is enabled.
--telemetry-logs-protocol <protocol>
Telemetry (OpenTelemetry) protocol used for exporting logs. If not given, the
value is inherited from the 'telemetry-protocol' option. Possible values
are: grpc, http/protobuf. Available only when Telemetry Logs functionality
OpenTelemetry protocol used for exporting logs. If not given, the value is
inherited from the 'telemetry-protocol' option. Possible values are: grpc,
http/protobuf. Available only when Telemetry Logs functionality
('telemetry-logs-enabled') is enabled.
--telemetry-metrics-enabled <true|false>
Enables exporting metrics to a destination handling OpenTelemetry metrics.
Default: false. Available only when metrics and feature
'opentelemetry-metrics:v1' are enabled.
--telemetry-metrics-endpoint <url>
OpenTelemetry endpoint to connect to for Metrics. If not given, the value is
inherited from the 'telemetry-endpoint' option. Available only when metrics
('metrics-enabled') and Telemetry Metrics functionality
('telemetry-metrics-enabled') are enabled.
--telemetry-metrics-interval <duration>
The interval between the start of two metric export attempts to the
destination handling OpenTelemetry metrics data. It accepts simplified
format for time units as java.time.Duration (like 5000ms, 30s, 5m, 1h). If
the value is only a number, it represents time in seconds. Default: 60s.
Available only when metrics ('metrics-enabled') and Telemetry Metrics
functionality ('telemetry-metrics-enabled') are enabled.
--telemetry-metrics-protocol <protocol>
OpenTelemetry protocol used for the metrics telemetry data. If not given, the
value is inherited from the 'telemetry-protocol' option. Possible values
are: grpc, http/protobuf. Available only when metrics ('metrics-enabled')
and Telemetry Metrics functionality ('telemetry-metrics-enabled') are
enabled.
--telemetry-protocol <protocol>
OpenTelemetry protocol used for the communication between server and
OpenTelemetry collector. Possible values are: grpc, http/protobuf. Default:
grpc. Available only when any of available OpenTelemetry components (Logs,
Traces) is turned on.
Metrics, Traces) is turned on.
--telemetry-resource-attributes <attributes>
OpenTelemetry resource attributes characterize the telemetry producer. Values
in format 'key1=val1,key2=val2'. Available only when any of available
OpenTelemetry components (Logs, Traces) is turned on.
OpenTelemetry components (Logs, Metrics, Traces) is turned on.
--telemetry-service-name <name>
OpenTelemetry service name. Takes precedence over 'service.name' defined in
the 'telemetry-resource-attributes' property. Default: keycloak. Available
only when any of available OpenTelemetry components (Logs, Traces) is turned
on.
only when any of available OpenTelemetry components (Logs, Metrics, Traces)
is turned on.
Tracing:

View File

@ -641,16 +641,15 @@ Telemetry (OpenTelemetry):
--telemetry-endpoint <url>
OpenTelemetry endpoint to connect to. Default: http://localhost:4317.
Available only when any of available OpenTelemetry components (Logs, Traces)
is turned on.
Available only when any of available OpenTelemetry components (Logs,
Metrics, Traces) is turned on.
--telemetry-logs-enabled <true|false>
Enables exporting logs to a destination handling telemetry data (OpenTelemetry
Logs). Default: false. Available only when feature 'opentelemetry-logs:v1'
is enabled.
Enables exporting logs to a destination handling OpenTelemetry logs. Default:
false. Available only when feature 'opentelemetry-logs:v1' is enabled.
--telemetry-logs-endpoint <url>
Telemetry (OpenTelemetry) endpoint to export logs to. If not given, the value
is inherited from the 'telemetry-endpoint' option. Available only when
Telemetry Logs functionality ('telemetry-logs-enabled') is enabled.
OpenTelemetry endpoint to export logs to. If not given, the value is inherited
from the 'telemetry-endpoint' option. Available only when Telemetry Logs
functionality ('telemetry-logs-enabled') is enabled.
--telemetry-logs-level <level>
The most verbose log level exported to the telemetry endpoint. For more
information, check the Telemetry guide. Possible values are (case
@ -658,24 +657,46 @@ Telemetry (OpenTelemetry):
all. Available only when Telemetry Logs functionality
('telemetry-logs-enabled') is enabled.
--telemetry-logs-protocol <protocol>
Telemetry (OpenTelemetry) protocol used for exporting logs. If not given, the
value is inherited from the 'telemetry-protocol' option. Possible values
are: grpc, http/protobuf. Available only when Telemetry Logs functionality
OpenTelemetry protocol used for exporting logs. If not given, the value is
inherited from the 'telemetry-protocol' option. Possible values are: grpc,
http/protobuf. Available only when Telemetry Logs functionality
('telemetry-logs-enabled') is enabled.
--telemetry-metrics-enabled <true|false>
Enables exporting metrics to a destination handling OpenTelemetry metrics.
Default: false. Available only when metrics and feature
'opentelemetry-metrics:v1' are enabled.
--telemetry-metrics-endpoint <url>
OpenTelemetry endpoint to connect to for Metrics. If not given, the value is
inherited from the 'telemetry-endpoint' option. Available only when metrics
('metrics-enabled') and Telemetry Metrics functionality
('telemetry-metrics-enabled') are enabled.
--telemetry-metrics-interval <duration>
The interval between the start of two metric export attempts to the
destination handling OpenTelemetry metrics data. It accepts simplified
format for time units as java.time.Duration (like 5000ms, 30s, 5m, 1h). If
the value is only a number, it represents time in seconds. Default: 60s.
Available only when metrics ('metrics-enabled') and Telemetry Metrics
functionality ('telemetry-metrics-enabled') are enabled.
--telemetry-metrics-protocol <protocol>
OpenTelemetry protocol used for the metrics telemetry data. If not given, the
value is inherited from the 'telemetry-protocol' option. Possible values
are: grpc, http/protobuf. Available only when metrics ('metrics-enabled')
and Telemetry Metrics functionality ('telemetry-metrics-enabled') are
enabled.
--telemetry-protocol <protocol>
OpenTelemetry protocol used for the communication between server and
OpenTelemetry collector. Possible values are: grpc, http/protobuf. Default:
grpc. Available only when any of available OpenTelemetry components (Logs,
Traces) is turned on.
Metrics, Traces) is turned on.
--telemetry-resource-attributes <attributes>
OpenTelemetry resource attributes characterize the telemetry producer. Values
in format 'key1=val1,key2=val2'. Available only when any of available
OpenTelemetry components (Logs, Traces) is turned on.
OpenTelemetry components (Logs, Metrics, Traces) is turned on.
--telemetry-service-name <name>
OpenTelemetry service name. Takes precedence over 'service.name' defined in
the 'telemetry-resource-attributes' property. Default: keycloak. Available
only when any of available OpenTelemetry components (Logs, Traces) is turned
on.
only when any of available OpenTelemetry components (Logs, Metrics, Traces)
is turned on.
Tracing:

View File

@ -567,12 +567,12 @@ Telemetry (OpenTelemetry):
--telemetry-endpoint <url>
OpenTelemetry endpoint to connect to. Default: http://localhost:4317.
Available only when any of available OpenTelemetry components (Logs, Traces)
is turned on.
Available only when any of available OpenTelemetry components (Logs,
Metrics, Traces) is turned on.
--telemetry-logs-endpoint <url>
Telemetry (OpenTelemetry) endpoint to export logs to. If not given, the value
is inherited from the 'telemetry-endpoint' option. Available only when
Telemetry Logs functionality ('telemetry-logs-enabled') is enabled.
OpenTelemetry endpoint to export logs to. If not given, the value is inherited
from the 'telemetry-endpoint' option. Available only when Telemetry Logs
functionality ('telemetry-logs-enabled') is enabled.
--telemetry-logs-level <level>
The most verbose log level exported to the telemetry endpoint. For more
information, check the Telemetry guide. Possible values are (case
@ -580,24 +580,42 @@ Telemetry (OpenTelemetry):
all. Available only when Telemetry Logs functionality
('telemetry-logs-enabled') is enabled.
--telemetry-logs-protocol <protocol>
Telemetry (OpenTelemetry) protocol used for exporting logs. If not given, the
value is inherited from the 'telemetry-protocol' option. Possible values
are: grpc, http/protobuf. Available only when Telemetry Logs functionality
OpenTelemetry protocol used for exporting logs. If not given, the value is
inherited from the 'telemetry-protocol' option. Possible values are: grpc,
http/protobuf. Available only when Telemetry Logs functionality
('telemetry-logs-enabled') is enabled.
--telemetry-metrics-endpoint <url>
OpenTelemetry endpoint to connect to for Metrics. If not given, the value is
inherited from the 'telemetry-endpoint' option. Available only when metrics
('metrics-enabled') and Telemetry Metrics functionality
('telemetry-metrics-enabled') are enabled.
--telemetry-metrics-interval <duration>
The interval between the start of two metric export attempts to the
destination handling OpenTelemetry metrics data. It accepts simplified
format for time units as java.time.Duration (like 5000ms, 30s, 5m, 1h). If
the value is only a number, it represents time in seconds. Default: 60s.
Available only when metrics ('metrics-enabled') and Telemetry Metrics
functionality ('telemetry-metrics-enabled') are enabled.
--telemetry-metrics-protocol <protocol>
OpenTelemetry protocol used for the metrics telemetry data. If not given, the
value is inherited from the 'telemetry-protocol' option. Possible values
are: grpc, http/protobuf. Available only when metrics ('metrics-enabled')
and Telemetry Metrics functionality ('telemetry-metrics-enabled') are
enabled.
--telemetry-protocol <protocol>
OpenTelemetry protocol used for the communication between server and
OpenTelemetry collector. Possible values are: grpc, http/protobuf. Default:
grpc. Available only when any of available OpenTelemetry components (Logs,
Traces) is turned on.
Metrics, Traces) is turned on.
--telemetry-resource-attributes <attributes>
OpenTelemetry resource attributes characterize the telemetry producer. Values
in format 'key1=val1,key2=val2'. Available only when any of available
OpenTelemetry components (Logs, Traces) is turned on.
OpenTelemetry components (Logs, Metrics, Traces) is turned on.
--telemetry-service-name <name>
OpenTelemetry service name. Takes precedence over 'service.name' defined in
the 'telemetry-resource-attributes' property. Default: keycloak. Available
only when any of available OpenTelemetry components (Logs, Traces) is turned
on.
only when any of available OpenTelemetry components (Logs, Metrics, Traces)
is turned on.
Tracing:

View File

@ -640,16 +640,15 @@ Telemetry (OpenTelemetry):
--telemetry-endpoint <url>
OpenTelemetry endpoint to connect to. Default: http://localhost:4317.
Available only when any of available OpenTelemetry components (Logs, Traces)
is turned on.
Available only when any of available OpenTelemetry components (Logs,
Metrics, Traces) is turned on.
--telemetry-logs-enabled <true|false>
Enables exporting logs to a destination handling telemetry data (OpenTelemetry
Logs). Default: false. Available only when feature 'opentelemetry-logs:v1'
is enabled.
Enables exporting logs to a destination handling OpenTelemetry logs. Default:
false. Available only when feature 'opentelemetry-logs:v1' is enabled.
--telemetry-logs-endpoint <url>
Telemetry (OpenTelemetry) endpoint to export logs to. If not given, the value
is inherited from the 'telemetry-endpoint' option. Available only when
Telemetry Logs functionality ('telemetry-logs-enabled') is enabled.
OpenTelemetry endpoint to export logs to. If not given, the value is inherited
from the 'telemetry-endpoint' option. Available only when Telemetry Logs
functionality ('telemetry-logs-enabled') is enabled.
--telemetry-logs-level <level>
The most verbose log level exported to the telemetry endpoint. For more
information, check the Telemetry guide. Possible values are (case
@ -657,24 +656,46 @@ Telemetry (OpenTelemetry):
all. Available only when Telemetry Logs functionality
('telemetry-logs-enabled') is enabled.
--telemetry-logs-protocol <protocol>
Telemetry (OpenTelemetry) protocol used for exporting logs. If not given, the
value is inherited from the 'telemetry-protocol' option. Possible values
are: grpc, http/protobuf. Available only when Telemetry Logs functionality
OpenTelemetry protocol used for exporting logs. If not given, the value is
inherited from the 'telemetry-protocol' option. Possible values are: grpc,
http/protobuf. Available only when Telemetry Logs functionality
('telemetry-logs-enabled') is enabled.
--telemetry-metrics-enabled <true|false>
Enables exporting metrics to a destination handling OpenTelemetry metrics.
Default: false. Available only when metrics and feature
'opentelemetry-metrics:v1' are enabled.
--telemetry-metrics-endpoint <url>
OpenTelemetry endpoint to connect to for Metrics. If not given, the value is
inherited from the 'telemetry-endpoint' option. Available only when metrics
('metrics-enabled') and Telemetry Metrics functionality
('telemetry-metrics-enabled') are enabled.
--telemetry-metrics-interval <duration>
The interval between the start of two metric export attempts to the
destination handling OpenTelemetry metrics data. It accepts simplified
format for time units as java.time.Duration (like 5000ms, 30s, 5m, 1h). If
the value is only a number, it represents time in seconds. Default: 60s.
Available only when metrics ('metrics-enabled') and Telemetry Metrics
functionality ('telemetry-metrics-enabled') are enabled.
--telemetry-metrics-protocol <protocol>
OpenTelemetry protocol used for the metrics telemetry data. If not given, the
value is inherited from the 'telemetry-protocol' option. Possible values
are: grpc, http/protobuf. Available only when metrics ('metrics-enabled')
and Telemetry Metrics functionality ('telemetry-metrics-enabled') are
enabled.
--telemetry-protocol <protocol>
OpenTelemetry protocol used for the communication between server and
OpenTelemetry collector. Possible values are: grpc, http/protobuf. Default:
grpc. Available only when any of available OpenTelemetry components (Logs,
Traces) is turned on.
Metrics, Traces) is turned on.
--telemetry-resource-attributes <attributes>
OpenTelemetry resource attributes characterize the telemetry producer. Values
in format 'key1=val1,key2=val2'. Available only when any of available
OpenTelemetry components (Logs, Traces) is turned on.
OpenTelemetry components (Logs, Metrics, Traces) is turned on.
--telemetry-service-name <name>
OpenTelemetry service name. Takes precedence over 'service.name' defined in
the 'telemetry-resource-attributes' property. Default: keycloak. Available
only when any of available OpenTelemetry components (Logs, Traces) is turned
on.
only when any of available OpenTelemetry components (Logs, Metrics, Traces)
is turned on.
Tracing:

View File

@ -638,16 +638,15 @@ Telemetry (OpenTelemetry):
--telemetry-endpoint <url>
OpenTelemetry endpoint to connect to. Default: http://localhost:4317.
Available only when any of available OpenTelemetry components (Logs, Traces)
is turned on.
Available only when any of available OpenTelemetry components (Logs,
Metrics, Traces) is turned on.
--telemetry-logs-enabled <true|false>
Enables exporting logs to a destination handling telemetry data (OpenTelemetry
Logs). Default: false. Available only when feature 'opentelemetry-logs:v1'
is enabled.
Enables exporting logs to a destination handling OpenTelemetry logs. Default:
false. Available only when feature 'opentelemetry-logs:v1' is enabled.
--telemetry-logs-endpoint <url>
Telemetry (OpenTelemetry) endpoint to export logs to. If not given, the value
is inherited from the 'telemetry-endpoint' option. Available only when
Telemetry Logs functionality ('telemetry-logs-enabled') is enabled.
OpenTelemetry endpoint to export logs to. If not given, the value is inherited
from the 'telemetry-endpoint' option. Available only when Telemetry Logs
functionality ('telemetry-logs-enabled') is enabled.
--telemetry-logs-level <level>
The most verbose log level exported to the telemetry endpoint. For more
information, check the Telemetry guide. Possible values are (case
@ -655,24 +654,46 @@ Telemetry (OpenTelemetry):
all. Available only when Telemetry Logs functionality
('telemetry-logs-enabled') is enabled.
--telemetry-logs-protocol <protocol>
Telemetry (OpenTelemetry) protocol used for exporting logs. If not given, the
value is inherited from the 'telemetry-protocol' option. Possible values
are: grpc, http/protobuf. Available only when Telemetry Logs functionality
OpenTelemetry protocol used for exporting logs. If not given, the value is
inherited from the 'telemetry-protocol' option. Possible values are: grpc,
http/protobuf. Available only when Telemetry Logs functionality
('telemetry-logs-enabled') is enabled.
--telemetry-metrics-enabled <true|false>
Enables exporting metrics to a destination handling OpenTelemetry metrics.
Default: false. Available only when metrics and feature
'opentelemetry-metrics:v1' are enabled.
--telemetry-metrics-endpoint <url>
OpenTelemetry endpoint to connect to for Metrics. If not given, the value is
inherited from the 'telemetry-endpoint' option. Available only when metrics
('metrics-enabled') and Telemetry Metrics functionality
('telemetry-metrics-enabled') are enabled.
--telemetry-metrics-interval <duration>
The interval between the start of two metric export attempts to the
destination handling OpenTelemetry metrics data. It accepts simplified
format for time units as java.time.Duration (like 5000ms, 30s, 5m, 1h). If
the value is only a number, it represents time in seconds. Default: 60s.
Available only when metrics ('metrics-enabled') and Telemetry Metrics
functionality ('telemetry-metrics-enabled') are enabled.
--telemetry-metrics-protocol <protocol>
OpenTelemetry protocol used for the metrics telemetry data. If not given, the
value is inherited from the 'telemetry-protocol' option. Possible values
are: grpc, http/protobuf. Available only when metrics ('metrics-enabled')
and Telemetry Metrics functionality ('telemetry-metrics-enabled') are
enabled.
--telemetry-protocol <protocol>
OpenTelemetry protocol used for the communication between server and
OpenTelemetry collector. Possible values are: grpc, http/protobuf. Default:
grpc. Available only when any of available OpenTelemetry components (Logs,
Traces) is turned on.
Metrics, Traces) is turned on.
--telemetry-resource-attributes <attributes>
OpenTelemetry resource attributes characterize the telemetry producer. Values
in format 'key1=val1,key2=val2'. Available only when any of available
OpenTelemetry components (Logs, Traces) is turned on.
OpenTelemetry components (Logs, Metrics, Traces) is turned on.
--telemetry-service-name <name>
OpenTelemetry service name. Takes precedence over 'service.name' defined in
the 'telemetry-resource-attributes' property. Default: keycloak. Available
only when any of available OpenTelemetry components (Logs, Traces) is turned
on.
only when any of available OpenTelemetry components (Logs, Metrics, Traces)
is turned on.
Tracing: