Skip to content

v1.2.0: improvements in Kubernetes support and context propagation

Compare
Choose a tag to compare
@mariomac mariomac released this 18 Jan 13:38
· 493 commits to main since this release

What's Changed

Fixing docker command arguments

⚠️ this might lead to a breaking change in some Docker compose setups.

In the Beyla Dockerfile, we replaced CMD by ENTRYPOINT in Beyla, as it should be the standard way of specifying a container command.

This will cause that some docker-compose setups will break because this command value won't be valid anymore:

command:
- /beyla
- --config=config-file.yml

The correct and standard way will be:

command:
- --config=config-file.yml

Kubernetes deployments will still keep working because they accept either command for the whole CLI and args for the arguments.

In addition, the BEYLA_CONFIG_PATH environment variable is now the preferred way to specify the configuration file path in Docker and Kubernetes environments.

Context propagation (distributed traces) for Go services

Beyla 1.0, was able to read the Traceparent header of the incoming service calls and report it as part of the generated traces. However, it was not able to inject the traceparent header in the outgoing calls of the instrumented service.

This means that it was possible to relate a service span with its parent trace, but not with their child invocations to other services, as the trace parent was lost.

For Go services Beyla 1.2 is able to inject the traceparent header to the child service requests from an instrumented application,
enabling fully distributed traces.

For more information, read the distributed traces documentation.

Kubernetes service selectors

In Beyla 1.0, the user could select which applications to instrument by specifying their used ports or the name of the executable file. These criteria were difficult to use to select Kubernetes Pods or Services, as they work in a higher level of abstraction.

Beyla 1.2 allows specifying the following service selection criteria: k8s_namespace, k8s_deployment_name, k8s_replicaset_name and/or k8s_pod_name.

You need to run Beyla with the BEYLA_KUBE_METADATA_ENABLE configuration option set to true.

For more information, read the Kubernetes tutorial.

OpenTelemetry-compliant Kubernetes metadata decoration

Beyla 1.0 allowed, as an experimental-hidden (undocumented) feature, decorating metrics and traces with Kubernetes metadata about source and destination Pods. These attributes were not standard and, due to an experimental implementation, not 100% reliable.

Beyla 1.2 can decorate any metric with the following, standard OpenTelemetry
attributes:

  • k8s.namespace.name
  • k8s.deployment.name
  • k8s.node.name
  • k8s.pod.name
  • k8s.pod.uid
  • k8s.pod.start_time

You need to run Beyla with the BEYLA_KUBE_METADATA_ENABLE configuration option
set to true.

For more information, read the Kubernetes tutorial.

Full list of PRs

New Contributors

Full Changelog: v1.0.2...v1.2.0