-
-
Notifications
You must be signed in to change notification settings - Fork 4.5k
feat(explorer): rpcs for getting log/metric attrs for a trace id + substring #103875
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
Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #103875 +/- ##
===========================================
+ Coverage 80.40% 80.61% +0.21%
===========================================
Files 9316 9318 +2
Lines 397607 397563 -44
Branches 25398 25365 -33
===========================================
+ Hits 319677 320486 +809
+ Misses 77478 76625 -853
Partials 452 452 |
roaga
left a comment
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.
approving to unblock
| for field in self.default_fields: | ||
| assert field in log, field | ||
|
|
||
| def test_get_log_attributes_for_trace(self) -> None: |
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.
should probably test with some custom attribute as well, not just the build in ones
also should add a test for metrics
|
You mentioned in the other PR: "The trace waterfall tables can also be updated to call these, for faster performance" How could we extend these to do so? don't think they'd work as is. I'm also interested if we can get those tables without a trace time range because that would enable us to show metrics/logs in a trace even if there are no spans (see https://linear.app/getsentry/issue/AIML-1697/allow-viewing-traces-without-spans) |
Smart yeah this can be done, if there's no spans we can just try the whole 90d range, should still be performant |
Adds specialized rpcs for getting a list of log/metric attribute dicts filtered by trace_id and optional substring. This is done with a single snuba rpc (not counting short id lookup) and is a lot more performant than the table queries we were doing earlier.
Return format is list of attr key-value dicts. This is different from the current tool output format which includes
type, tbd if we still need to include thatGetTrace experiment:
Using https://snuba-admin.getsentry.net/#rpc-endpoints, I made requests to EndpointGetTrace and EndpointTraceItemTable for the same purpose - filter logs by a trace (2h old) in Seer project. Time range is last 30d, and I selected the same columns. The table query has an additional LIKE filter on
sentry.body(message) - this isn't supported for GetTrace so we'd have to post-process in sentry or seerEndpointGetTrace - 1318904 progressBytes (bytes processed by clickhouse)
EndpointTraceItemTable - 52792914551 progressBytes. 40k times more, prob scanning from the start of the time range. This is evidence the GetTrace endpoint is way better optimized for trace_id filters.
The requests:
GetTrace:
TraceItemTable