Cherry-pick #25640 to 7.x: Refactor state_* metricsets to share response from endpoint #25759
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Cherry-pick of PR #25640 to 7.x branch. Original message:
What does this PR do?
This PR changes how
kubernetes
module handle state_* metricsets which share same target endpoint. The idea originates from https://github.com/elastic/beats/blob/master/x-pack/metricbeat/module/cloudfoundry/cloudfoundry.goNote: At this point the PR stands more like a PoC with changes only applied atstate_container
andstate_pod
metricsets.If we agree with this solution (and make sure that it would be applied with Agent too) we can extend it to the rest ofstate_*
metricsets as well as to metricsets fetch from kubelet's endpoint (node
,pod
,container
,volume
,system
)In upcoming PR we will apply similar strategy for metricsets fetching from kubelet's endpoint (
node
,pod
,container
,volume
,system
)Why is it important?
To improve the performance of the module by avoid fetching same content multiple times.
Checklist
CHANGELOG.next.asciidoc
orCHANGELOG-developer.next.asciidoc
.Author's Checklist
Verified with different module's config blocks. See step 4 of testing notes below.
How to test this PR locally
kubectl -n kube-system port-forward svc/kube-state-metrics 8081:8080
tcpdump -i any -s 0 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
Verify with tcpdump's output that only one request takes place no matter how many modules/metricsets are enabled.
Verify with tcpdump's output that only one request takes place no matter how many modules/metricsets are enabled.
Related issues