Releases: grafana/beyla
v1.4.0: experimental network metrics
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
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
- @fridgepoet made their first contribution in #664
Full Changelog: v1.3.3...v1.4.0
v1.3.3
v1.3.2
Beyla v1.3.1
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 🔨
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
- @esara made their first contribution in #594
- @vgnanasekaran made their first contribution in #597
- @marctc made their first contribution in #614
Full Changelog: v1.2.1...v1.3.1
Beyla v1.2.1
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
What's Changed
Fixing docker command
arguments
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
- Fix Dockerfile by @mariomac in #551
- Send K8s metadata as resource metadata by @mariomac in #548
- Remove Public Preview notice from docs by @mariomac in #434
- Fix workflow conditional by @jdbaldry in #437
- Make release_branch_regexp match existing release branch by @jdbaldry in #438
- Fix escaping in quoted regexp by @jdbaldry in #439
- Trigger tests in release-* branches by @mariomac in #444
- Fix Basic auth key encoding by @mariomac in #446
- Update go offsets tracker version by @mariomac in #449
- Add systemd service file and related docs by @proffalken in #448
- Fix support for skipping Go tracers by @grcevski in #451
- Different handling of traceparent by @grcevski in #455
- OTEL-compliant K8s decoration by @mariomac in #460
- Add utility helper to determine the kernel lockdown mode by @grcevski in #461
- Kubernetes decoration documentation by @mariomac in #462
- Fix container parse from cgroup file by @mariomac in #468
- Fix documentation links by @mariomac in #469
- Fix more cloud documentation links by @mariomac in #473
- Document service discovery section by @mariomac in #476
- Fix concurrent access crash in PIDsFilter by @mariomac in #479
- Reuse BPF programs in multi-process mode by @grcevski in #471
- Fix 'grafana-agent' URL on Kubernetes docs by @myhro in #481
- Automatic update of offsets.json by @github-actions in #488
- Add test for unsupported Go by @grcevski in #490
- Fix host parsing in httpfltr by @grcevski in #487
- Fix linting/testing on nonlinux systems by @mariomac in #497
- Update and document Beyla requirements by @mariomac in #500
- Remove Go tracers when they become unused by @mariomac in #499
- Add Go version detection by @myhro in #485
- Propagate HTTP trace context in Go by @grcevski in #491
- K8s: fix crash on pod undeployment by @mariomac in #503
- Propagate context go gRPC by @grcevski in #507
- Automatic update of offsets.json by @github-actions in #510
- Documented Grafana OTLP credentials setup with the new OpenTelemetry box by @mariomac in #509
- Fix integration tests by @mariomac in #512
- K8s discovery by @mariomac in #511
- Automatic name/namespace setting from K8s metadata by @mariomac in #513
- Update kubernetes.md by @Obito1903 in #514
- Refactor: clean code for else if by @lwangrabbit in #520
- Documenting Kubernetes discovery by @mariomac in #516
- Refactor: delete magic number by @lwangrabbit in #522
- Fix tutorial usage of open_port by @grcevski in #523
- Add pointer to the community Slack by @grcevski in #525
- Remove stray print by @grcevski in #527
- use privileged: true by default in some examples by @mariomac in #528
- Embed Grafana Office Hours video on deploying Beyla in Kubernetes by @nicolevanderhoeven in #529
- First draft for Go quickstart guide by @mariomac in #530
- Improve gRPC context propagation with hpack by @grcevski in #531
- Improve Ruby and Python executable detection by @mariomac in #533
- Quickstart guides for C/C++, Ruby, Python and Node.js by @mariomac in #534
- Automatic update of offsets.json by @github-actions in #535
- Open source redirects by @grafsean in #537
- Replace Grafana cloud credentials by standard OTLP credentials in quickstart guides by @mariomac in #538
- Report Beyla as SDK name by @grcevski in #540
- Forward port of the LRU size fix by @grcevski in #539
- Add "we are hiring" note by @fstab in #543
- Document distributed traces by @grcevski in #541
- Rust quickstart tutorial by @mariomac in #544
- Suggestion to group tutorials into a folder by @mariomac in #545
- Add BEYLA_CONFIG_PATH env var by @mariomac in #549
- Fix K8s tutorial images by @mariomac in #550
- Black box context propagation by @grcevski in #547
- Fix wrong reported program type and missing traces by @grcevski in #552
- Add backport workflow to cherry-pick PR merge commits to other long-lived branches by @jdbaldry in #553
- minor fixes to k8s-walkthrough.md by @mariomac in #554
- Disable context propagation on kprobes by @grcevski in #556
- Fix GITHUB_TOKEN lookup by @jdbaldry in #558
- Java quickstart tutorial by @mariomac in #546
New Contributors
- @proffalken made their first contribution in #448
- @myhro made their first contributi...
v1.0.2 Bugfix release
What's Changed
Other changes/additions
- Backport #451. Fix for skip go tracers. by @grcevski in #453
- Fixed Cloud Documentation links (1.0.x backport) by @mariomac in #474
- Document service discovery section (#476) 1.0 backport by @mariomac in #477
- Fix URL on kubernetes docs (1.0 backport) by @mariomac in #483
- Fix host parsing bug by @grcevski in #486
Full Changelog: v1.0.1...v1.0.2
v1.1.0
Test release from main
What's Changed
Other changes/additions
- Remove Public Preview notice from docs by @mariomac in #434
- Fix workflow conditional by @jdbaldry in #437
- Make release_branch_regexp match existing release branch by @jdbaldry in #438
- Fix escaping in quoted regexp by @jdbaldry in #439
- Trigger tests in release-* branches by @mariomac in #444
- Fix Basic auth key encoding by @mariomac in #446
- Update go offsets tracker version by @mariomac in #449
- Add systemd service file and related docs by @proffalken in #448
- Fix support for skipping Go tracers by @grcevski in #451
- Different handling of traceparent by @grcevski in #455
- OTEL-compliant K8s decoration by @mariomac in #460
- Add utility helper to determine the kernel lockdown mode by @grcevski in #461
- Kubernetes decoration documentation by @mariomac in #462
- Fix container parse from cgroup file by @mariomac in #468
- Fix documentation links by @mariomac in #469
- Fix more cloud documentation links by @mariomac in #473
- Document service discovery section by @mariomac in #476
- Fix concurrent access crash in PIDsFilter by @mariomac in #479
- Reuse BPF programs in multi-process mode by @grcevski in #471
- Fix 'grafana-agent' URL on Kubernetes docs by @myhro in #481
- Automatic update of offsets.json by @github-actions in #488
New Contributors
- @proffalken made their first contribution in #448
- @myhro made their first contribution in #481
Full Changelog: v1.0.0...v1.1.0
Beyla v1.0.1 Bugfix release
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!!
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
- Add workflow to publish release documentation by @jdbaldry in #385
- Improve sql support by @grcevski in #429
- Add stability guide by @grcevski in #430
- Complete documentation for Beyla 1.0 by @mariomac in #432
- Rewritten tutorial for 1.0 by @mariomac in #433
- Remove units suffix from dashboard by @mariomac in #415
Full Changelog: v0.4.2...v1.0.0