-
Notifications
You must be signed in to change notification settings - Fork 4.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add support for podman metrics in docker module #41889
base: main
Are you sure you want to change the base?
Conversation
This pull request doesn't have a |
This pull request does not have a backport label.
To fixup this pull request, you need to add the backport labels for the needed
|
|
@@ -15,6 +15,9 @@ | |||
# If set to true, replace dots in labels with `_`. | |||
#labels.dedot: false | |||
|
|||
# Docker module supports metrics collection from podman's docker compatible API. In case of podman set to true. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
# Docker module supports metrics collection from podman's docker compatible API. In case of podman set to true. | |
# Docker module supports metrics collection from podman's restful API. In case of podman set to true. |
@@ -62,6 +62,9 @@ metricbeat.modules: | |||
# If set to true, replace dots in labels with `_`. | |||
#labels.dedot: false | |||
|
|||
# Docker module supports metrics collection from podman's docker compatible API. In case of podman set to true. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wondering if we should protect ourselves and verify somewhere the minimum version of podman we support or at least we tested with?
I see https://podman.io/blogs/2020/07/01/rest-versioning.html that api introduced in versions > v2.0
and probably in our tests we used the the v2 API version(inn versions >4.0)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I guess this compatibility section needs to be updated: https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-module-docker.html#_compatibility_16
The relevant docker integration should also be updated with the new variable podman, right? |
Proposed commit message
Details
Podman offers a docker compatible API for metrics collection. So using docker module to collect podman metrics should be working out of the box.
In reality the memory metrics were not published at all and cpu usage percentage calculation was incorrect.
The reason is that the podman api returns zero values for
precpu_stats
. These stats refer to the latest's read cpu statistics, needed for cpu percentage calculation. Also due to these stats being zero, the memory metrics were not populated because of a sanity check in the code.beats/metricbeat/module/docker/memory/helper.go
Line 55 in 3f51793
For docker, the
precpu_stats
are returned every time.The solution in the Podman's case is to stream the api response. By default we had set the stream option to false as there was no need in case of docker.
As part of this PR we introduce a new configuration parameter named
podman
(by default false). If set to true, indicating that podman is used, then the stream parameter is set to true, only for the collection of cpu and memory stats.The reason is that for cpu and memory stats the
precpu_stats
are needed.From the streamed response, we get the second response as it was noticed during testing that the
precpu_stats
of the first response were incorrect and the cpu was miscalculated.Checklist
CHANGELOG.next.asciidoc
orCHANGELOG-developer.next.asciidoc
.Disruptive User Impact
There is no disruptive user impact.
How to test this PR locally
podman run -d -p 8080:80 --name mynginx nginx
a.
podman exec -ti mynginx bash
b.
while true; do :; done &
podman
parameter set to truepodman stats
command results.Related issues
Use cases
Screenshots
Podman Stats command (check for mynginx container)