From d17a48f8f87dd5949d5662105a39867f3e954b4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Barto=C5=A1?= Date: Tue, 13 Aug 2024 07:46:48 +0100 Subject: [PATCH] Add docs for the OpenTelemetry tracing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #31908 Signed-off-by: Martin Bartoš Co-authored-by: Alexander Schwartz Co-authored-by: Steven Hawkins Co-authored-by: Václav Muzikář --- .../release_notes/topics/26_0_0.adoc | 8 ++ .../tests/src/test/resources/ignored-links | 5 +- .../topics/templates/document-attributes.adoc | 2 + docs/guides/images/jaeger-tracing.png | Bin 0 -> 79461 bytes docs/guides/server/pinned-guides | 1 + docs/guides/server/tracing.adoc | 116 ++++++++++++++++++ 6 files changed, 130 insertions(+), 2 deletions(-) create mode 100644 docs/guides/images/jaeger-tracing.png create mode 100644 docs/guides/server/tracing.adoc diff --git a/docs/documentation/release_notes/topics/26_0_0.adoc b/docs/documentation/release_notes/topics/26_0_0.adoc index 6ca3423328..618d2fda54 100644 --- a/docs/documentation/release_notes/topics/26_0_0.adoc +++ b/docs/documentation/release_notes/topics/26_0_0.adoc @@ -111,3 +111,11 @@ Now {project_name} allows configuring ECDH-ES, ECDH-ES+A128KW, ECDH-ES+A192KW or ifeval::[{project_community}==true] Many thanks to https://github.com/justin-tay[Justin Tay] for the contribution. endif::[] + += OpenTelemetry Tracing support _(Preview)_ + +The underlying Quarkus support for OpenTelemetry Tracing has been exposed to {project_name} and allows obtaining application traces for better observability. +It helps to find performance bottlenecks, determine the cause of application failures, trace a request through the distributed system, and much more. +The support is in preview mode, and we would be happy to obtain any feedback. + +For more information, see the link:{tracingguide_link}[{tracingguide_name}] guide. diff --git a/docs/documentation/tests/src/test/resources/ignored-links b/docs/documentation/tests/src/test/resources/ignored-links index bd864e36ae..fe9cfa7b83 100644 --- a/docs/documentation/tests/src/test/resources/ignored-links +++ b/docs/documentation/tests/src/test/resources/ignored-links @@ -36,5 +36,6 @@ https://account.live.com/developers/applications/create https://developer.twitter.com/apps/ https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/#rolling-update https://stackapps.com/apps/oauth/register -# Remove the following line once KC26 is released -https://www.keycloak.org/server/bootstrap-admin-recovery \ No newline at end of file +# Remove following lines once KC26 is released +https://www.keycloak.org/server/bootstrap-admin-recovery +https://www.keycloak.org/server/tracing \ No newline at end of file diff --git a/docs/documentation/topics/templates/document-attributes.adoc b/docs/documentation/topics/templates/document-attributes.adoc index 75503f62d5..20587e65f7 100644 --- a/docs/documentation/topics/templates/document-attributes.adoc +++ b/docs/documentation/topics/templates/document-attributes.adoc @@ -71,6 +71,8 @@ :gettingstarted_link_latest: https://www.keycloak.org/guides#getting-started :highavailabilityguide_name: High Availability Guide :highavailabilityguide_link: https://www.keycloak.org/guides#high-availability +:tracingguide_name: Enabling Tracing +:tracingguide_link: https://www.keycloak.org/server/tracing :upgradingguide_name: Upgrading Guide :upgradingguide_name_short: Upgrading :upgradingguide_link: {project_doc_base_url}/upgrading/ diff --git a/docs/guides/images/jaeger-tracing.png b/docs/guides/images/jaeger-tracing.png new file mode 100644 index 0000000000000000000000000000000000000000..45d2e54e7d2e9bdce194608957230dcd63ef9b61 GIT binary patch literal 79461 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∋Ms8(C;Mgsb^2OuowyP} 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 +<#import "/templates/kc.adoc" as kc> +<#import "/templates/options.adoc" as opts> +<#import "/templates/links.adoc" as links> +<#import "/templates/profile.adoc" as profile> + +<@tmpl.guide title="Enabling Tracing" +preview="true" +summary="Learn how to enable distributed tracing in {project_name}" +includedOptions="tracing-* log-*-include-trace"> + +This {section} explains how you can enable and configure distributed tracing in {project_name} by utilizing https://opentelemetry.io/[OpenTelemetry] (OTel). +Tracing allows for detailed monitoring of each request's lifecycle, which helps quickly identify and diagnose issues, leading to more efficient debugging and maintenance. + +It also provides valuable insights into performance bottlenecks and can help optimize the system's overall efficiency. +{project_name} uses a supported https://quarkus.io/guides/opentelemetry-tracing[Quarkus OTel extension] that provides smooth integration and exposure of application traces. + +== Enable tracing + +It is possible to enable exposing traces using the build time option `tracing-enabled` as follows: + +<@kc.start parameters="--tracing-enabled=true"/> + +By default, the trace exporters send out data in batches, using the `gRPC` protocol and endpoint `+http://localhost:4317+`. +For more tracing settings, see all possible configurations below. + +== Development setup + +In order to see the captured {project_name} traces, the basic setup with leveraging the https://www.jaegertracing.io/[Jaeger] tracing platform might be used. +For development purposes, the Jaeger-all-in-one can be used to see traces as easily as possible. + +NOTE: Jaeger-all-in-one includes the Jaeger agent, an OTel collector, and the query service/UI. +You do not need to install a separate collector, as you can directly send the trace data to Jaeger. + +[source, bash] +---- +podman|docker run --name jaeger \ +-p 16686:16686 \ +-p 4317:4317 \ +-p 4318:4318 \ +jaegertracing/all-in-one +---- + +=== Exposed ports + +* `:16686` - Jaeger UI +* `:4317` - OpenTelemetry Protocol gRPC receiver (default) +* `:4318` - OpenTelemetry Protocol HTTP receiver + +You can visit the Jaeger UI on `+http://localhost:16686/+` to see the tracing information. +The Jaeger UI might look like this with an arbitrary {project_name} trace: + +image::jaeger-tracing.png[Jaeger UI] + +== Traces in logs + +When tracing is enabled, the trace information is included in the log messages of all enabled log handlers (see more in <@links.server id="logging"/>). +It can be useful for associating log events to request execution, which might provide better traceability and debugging. +All log lines originating from the same request will have the same `traceId` in the log. + +The log message also contains a `sampled` flag, which relates to the sampling described below and indicates whether the span was sampled - sent to the collector. + +The format of the log records may start as follows: + +[source, bash] +---- +2024-08-05 15:27:07,144 traceId=b636ac4c665ceb901f7fdc3fc7e80154, parentId=d59cea113d0c2549, spanId=d59cea113d0c2549, sampled=true WARN [org.keycloak.events] ... +---- + +=== Hide trace info in logs + +You can hide tracing information in specific log handlers by specifying their associated {project_name} option `log--include-trace`, where `` is the name of the log handler. +For instance, to disable trace info in the `console` log, you can turn it off as follows: + +<@kc.start parameters="--tracing-enabled=true --log=console --log-console-include-trace=false"/> + +NOTE: When you explicitly override the log format for the particular log handlers, the `*-include-trace` options do not have any effect, and no tracing is included. + +== Sampling + +Sampler decides whether a trace should be discarded or forwarded, effectively reducing overhead by limiting the number of collected traces sent to the collector. +It helps manage resource consumption, which leads to avoiding the huge storage costs of tracing every single request and potential performance penalty. + +WARNING: For a production-ready environment, sampling should be properly set to minimize infrastructure costs. + +{project_name} supports several built-in OpenTelemetry samplers, such as: + +<@opts.expectedValues option="tracing-sampler-type"/> + +The used sampler can be changed via the `tracing-sampler-type` property. + +=== Default sampler +The default sampler for {project_name} is `traceidratio`, which controls the rate of trace sampling based on a specified ratio configurable via the `tracing-sampler-ratio` property. + +==== Trace ratio +The default trace ratio is `1.0`, which means all traces are sampled - sent to the collector. +The ratio is a floating number in the range `(0,1]`. +For instance, when the ratio is `0.1`, only 10% of the traces are sampled. + +WARNING: For a production-ready environment, the trace ratio should be a smaller number to prevent the massive cost of trace store infrastructure and avoid performance overhead. + +==== Rationale + +The sampler makes its own sampling decisions based on the current ratio of sampled spans, regardless of the decision made on the parent span, +as with using the `parentbased_traceidratio` sampler. + +The `parentbased_traceidratio` sampler could be the preferred default type as it ensures the sampling consistency between parent and child spans. +Specifically, if a parent span is sampled, all its child spans will be sampled as well - the same sampling decision for all. +It helps to keep all spans together and prevents storing incomplete traces. + +However, it might introduce certain security risks leading to DoS attacks. +External callers can manipulate trace headers, parent spans can be injected, and the trace store can be overwhelmed. +Proper HTTP headers (especially `tracestate`) filtering and adequate measures of caller trust would need to be assessed. + +For more information, see the https://www.w3.org/TR/trace-context/#security-considerations[W3C Trace context] document. +