-
Notifications
You must be signed in to change notification settings - Fork 8.3k
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
[APM] Profiling #91818
[APM] Profiling #91818
Conversation
Pinging @elastic/apm-ui (Team:apm) |
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.
So hot
} | ||
)} | ||
tooltipContent={i18n.translate( | ||
'xpack.apm.serviceDetails.profilingTabExperimentalDedcription', |
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.
'xpack.apm.serviceDetails.profilingTabExperimentalDedcription', | |
'xpack.apm.serviceDetails.profilingTabExperimentalDescription', |
filter: ESFilter[]; | ||
valueTypeField: string; | ||
}) { | ||
return withApmSpan('get_profile_stats', async () => { |
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.
Why don't we name these the same as the function that's calling them?
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've changed the name slightly. In general that's a good approach, but we have to keep in mind that these span names should be unique and preferably recognisable across all custom spans, so it's easier for us to understand them at a glance.
query: t.intersection([ | ||
rangeRt, | ||
uiFiltersRt, | ||
t.partial({ |
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.
There's an environmentRt
that does the same thing.
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.
nice 👍
Doesn't need to be in this PR, if at all, but for filtering I think it might be better to highlight the whole stack for each stack that involves matching frames. Otherwise if there's a matching frame that is towards the end of a stack, and has a very small value, it may be difficult or impossible to see.
|
@axw I've added a comment as it's not a super easy fix (it's doable though): https://github.com/elastic/kibana/pull/91818/files#diff-52c51863858e4d9874706ef7ff7e775baec68dc9c67ecba0ad1b5a76c6a178d7R272. |
💚 Build SucceededMetrics [docs]Module Count
Async chunks
History
To update your PR or re-run it, just comment with: |
Co-authored-by: Dario Gieselaar <[email protected]>
Adds a (very experimental) profiling tab to a service. This won't ship to the bigger public any time soon, and we should consider it as experimental/internal only.
Currently only the go agent supports profiling. Enabling self-instrumentation for APM Server and setting profiling.cpu.enabled to
true
should work.For more background, see:
elastic/apm-server#2839
elastic/apm-server#4017
This PR builds on the work by @axw and uses the new flamegraph layout from Kibana (thank you @monfera!)
To enable it in Kibana, add the following flag to kibana.yml:
This will display a "Profiling" tab when the user navigates to a service.
The following value types are supported:
Currently, the Profiling feature has the following capabilities:
@elastic/charts
) of the currently selected value typeSome things to keep in mind:
@elastic/charts
that enables label clipping and fixes some text alignment issues. Work is ongoing to merge that back into the upstream repo: feat(partition): clip text in partition chart fill label elastic-charts#1033Default view:
Filtered: