Skip to content

Releases: grafana/beyla

v1.4.0: experimental network metrics

15 Mar 09:06
f205789
Compare
Choose a tag to compare

What's new

Network metrics (experimental feature)

⚠️ Network metrics is an experimental under development feature, expect breaking changes in the short term.

In addition to application-level metrics, Beyla can provide now the beyla.network.flow.bytes network-level metric, which captures the network bytes between two endpoints in a host.

This feature is independent from the Beyla application observability feature, and is application-agnostic. Beyla will capture all the network metrics in the host, independently of which applications is Beyla instrumenting.

To learn how to activate and configure network metrics, refer to the Grafana Beyla network documentation

Bug fixes

  • Make sure that all the subcomponents have finished before stopping Beyla by @mariomac in #663

Other changes/additions

  • Fix HTTP2 context propagation size update by @grcevski in #651
  • Parse gRPC/HTTP2 requests with kprobes by @grcevski in #649
  • Stop Beyla if the kernel version is unsupported by @mariomac in #653
  • Go gRPC: make sure host/peer is initialized by @grcevski in #658
  • Docs: Update Docker instructions by @fridgepoet in #664
  • Automatic update of offsets.json by @github-actions in #668
  • Add grafana docker compose service for greetings demo by @marctc in #665
  • Fix mio in example by @grcevski in #667
  • Remove deadcode and varcheck deprecated linters by @marctc in #680
  • Docs: Create network metrics docs by @mariomac in #675

New Contributors

Full Changelog: v1.3.3...v1.4.0

v1.3.3

01 Mar 17:37
636e7a0
Compare
Choose a tag to compare

What's Changed

Other changes/additions

  • Fix for crash related to processing uninitialized memory in Go gRPC by @grcevski in #659

Full Changelog: v1.3.2...v1.3.3

v1.3.2

29 Feb 17:36
9cd9845
Compare
Choose a tag to compare

What's Changed

Other changes/additions

Full Changelog: v1.3.1...v1.3.2

Beyla v1.3.1

26 Feb 15:34
b70f7b9
Compare
Choose a tag to compare

Highlights

⚠️ Breaking change: update metric collection names to stable HTTP spec

We have updated the metrics collection names to the stable HTTP spec for OpenTelemetry. This change also
applies to our Prometheus metrics exporter: https://github.com/open-telemetry/semantic-conventions/blob/main/docs/http/http-metrics.md

Users should update their dashboards, alerts, etc, from the following old to the following new names.

Old Prometheus metric names:

  • http_server_duration_seconds
  • http_client_duration_seconds
  • http_server_request_size_bytes
  • http_client_request_size_bytes

Old OTEL metric names:

  • http.server.duration
  • http.client.duration
  • http.server.request.size
  • http.client.request.size

New Prometheus metric names:

  • http_server_request_duration_seconds
  • http_client_request_duration_seconds
  • http_server_request_body_size_bytes
  • http_client_request_body_size_bytes

New OTEL metric names:

  • http.server.request.duration
  • http.client.request.duration
  • http.server.request.body.size
  • http.client.request.body.size

Fixed Kubernetes integration for GKE and other distributions

The way GKE internally stored the container IDs in the /proc filesystem was not recognized by
Beyla. In consequence, Beyla was not able to match process/container low-level information
with high-level Kubernetes metadata.

This could also happen with other Kubernetes distributions.

Native histograms for Prometheus

For Prometheus, native histograms are enabled if you
enable the native-histograms feature in your Prometheus collector.

Exponential histograms for OpenTelemetry

For OpenTelemetry you can use exponential histograms
for the predefined histograms instead of defining the buckets manually. You need to set up the standard
OTEL_EXPORTER_OTLP_METRICS_DEFAULT_HISTOGRAM_AGGREGATION
environment variable. See the Beyla documentation for more information.

Improved memory usage

Under some high-load scenarios (a single Beyla instance instrumenting 80 containers), the virtual memory space
was in the order of GigaBytes.

In the test results, the virtual memory (container_memory_usage_bytes and container_memory_working_set_bytes)
decreased from 155MiB to 84MiB on 1 container instrumentation, and 3.5GiB to 338MiB when load tested with about 80 containers.

RSS (container_memory_rss) didn't change much. About 75MiB with 1 container and 206MiB when load tested.

Full changelog

Breaking changes 🔨

  • Update metric collection names to stable HTTP spec by @grcevski in #598

Bug fixes 🐛

  • Support DaemonSet and StatefulSet in discovery and decoration by @mariomac in #571
  • Fixed gRPC 1.61 offsets and updated go.mod versions by @mariomac in #609

Other changes/additions

  • Detect trace conflicts in Kprobe context propagation by @grcevski in #557
  • K8s tutorial: add extra steps for trace visualization by @mariomac in #561
  • Track clones for context propagation by @grcevski in #560
  • Add support for tracking http2 client and server requests by @grcevski in #568
  • Prometheus exporter: add k8s_replicaset_name, k8s_daemonset_name and k8s_statefulset_name attributes by @mariomac in #574
  • Update K8s documentation with the daemonset/replicaset/statefulset selectors and labels by @mariomac in #575
  • Removing BEYLA_SYSTEM_WIDE advicing from error logs by @mariomac in #577
  • Improve Docker container ID parsing from /proc/pid/cgroup by @mariomac in #578
  • Fix publish-technical-documentation-release workflow for tag events by @jdbaldry in #583
  • Catch pids that are off a parent and not quite ready by @grcevski in #581
  • Add fallback to no kretprobes by @grcevski in #582
  • Reorganizing Beyla configuration packages by @mariomac in #584
  • Propagate context in http2 by @grcevski in #585
  • Black-box context propagation for go by @grcevski in #587
  • doc update for readOnlyRootFilesystem by @esara in #594
  • Disable http2 context prop test by @grcevski in #596
  • Added http route to client attributes by @vgnanasekaran in #597
  • Fix check for context propagation support by @myhro in #600
  • Add route to client requests for promscrape and tests by @grcevski in #599
  • Compile as statically linked binary by @myhro in #601
  • Add Vale workflow to lint prose on added/modified lines by @jdbaldry in #604
  • parse containerid for a pid from cgroup as a hex chain by @esara in #589
  • Synchronize bpf2go in makefile with version in go.mod by @mariomac in #610
  • update ebp-generator image to ubuntu by @mariomac in #613
  • Add docs for running unprivileged in k8s by @grcevski in #611
  • Announce the community call by @grcevski in #616
  • Switch to sys_bind to support more platforms by @grcevski in #615
  • Add support for native/exponential histograms by @marctc in #614
  • Don't cleanup prematurely by @grcevski in #619
  • Fix generator-build-image makefile task by @mariomac in #624
  • Network flows metrics by @mariomac in #586
  • Temporary workaround for unsupported DWARF location types by @mariomac in #626
  • Reduce BPF memory consumption by @grcevski in #620
  • Exposing beyla_build_info metric in Prometheus exporter by @mariomac in #627
  • Fix integration tests' coverage data by @mariomac in #631
  • Fixing coverage report in K8s tests by @mariomac in #633
  • Fix docs links and build warnings by @grafsean in #636
  • Replace BEYLA_OTEL_USE_EXPONENTIAL_HISTOGRAMS by standard env var by @mariomac in #635
  • Fix missing go_trace_map cleanup by @grcevski in #638
  • Fixing network metrics' bytes and adding some useful fields by @mariomac in #641
  • switch maps to LRU to mitigate failed retprobes by @grcevski in #643
  • Added Marc to code owners and maintainers lists by @mariomac in #647

New Contributors

Full Changelog: v1.2.1...v1.3.1

Beyla v1.2.1

26 Jan 09:47
992041d
Compare
Choose a tag to compare

What's Changed

We have improved the integration of Beyla with Kubernetes DaemonSets, ReplicaSets and StatefulSets.

Kubernetes discovery mechanism now accepts the following arguments:

  • k8s_statefulset_name
  • k8s_daemonset_name

Also, the metrics and traces can be decorated with the following metadata when it applies:

  • k8s.replicaset.name
  • k8s.statefulset.name
  • k8s.daemonset.name

Due to internal limitations in the way we use the Prometheus SDK (aiming for performance), metrics exported by our Prometheus exporter node will be decorated with all the k8s_statefulset_name, k8s_daemonset_name, k8s_deployment_name, and k8s_replicaset_name arguments, having empty values where it does not apply.

The above does not apply for OpenTelemetry-exported metrics that are later converted to Prometheus (e.g. in Grafana Cloud, Grafana Agent or an Opentelemetry Collector).

Full list of PRs

  • retrigger documentation build by @mariomac in #559
  • K8s tutorial: add extra steps for trace visualization (1.2 backport) by @mariomac in #563
  • Support DaemonSet and StatefulSet in discovery and decoration (1.2 backport) by @mariomac in #572
  • [release-1.2] Update K8s documentation with the daemonset/replicaset/statefulset selectors and labels by @github-actions in #576

Full Changelog: v1.2.0...v1.2.1

v1.2.0: improvements in Kubernetes support and context propagation

18 Jan 13:38
Compare
Choose a tag to compare

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

Read more

v1.0.2 Bugfix release

07 Dec 18:35
21bcc01
Compare
Choose a tag to compare

What's Changed

Other changes/additions

Full Changelog: v1.0.1...v1.0.2

v1.1.0

06 Dec 17:03
26092c5
Compare
Choose a tag to compare
v1.1.0 Pre-release
Pre-release

Test release from main

What's Changed

Other changes/additions

New Contributors

Full Changelog: v1.0.0...v1.1.0

Beyla v1.0.1 Bugfix release

16 Nov 18:42
18dcad4
Compare
Choose a tag to compare

Thank you for the good reception of Beyla 1.0.0!! Your feedback was very valuable and helped us spotting some bugs that are being fixed with this version 1.0.1.

What's Changed

Bug fixes

  • Fix occasional 401 Unauthorized errors in Grafana OTEL endpoint by @mariomac in #447
  • Fixed panics caused by non-semantic Go versions (for example, 1.20.5 X:buildcrypto) by @mariomac in #450

Other changes/additions

  • Removed preview notice from 1.0 release docs by @mariomac in #440
  • Trigger tests in release-* branches (release-1.0 backport) by @mariomac in #445

Full Changelog: v1.0.0...v1.0.1

Beyla 1.0.0!!

14 Nov 15:18
bcdb9a3
Compare
Choose a tag to compare

Grafana Beyla reached version 1.0!!

Check our Grafana Blog for a human-friendly description of its changes: https://grafana.com/blog/2023/11/14/grafana-beyla-1.0-release-zero-code-instrumentation-for-application-telemetry-using-ebpf/

Below, some log-like changes since the last release.

What's Changed

Other changes/additions

Full Changelog: v0.4.2...v1.0.0