Skip to content
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

[WIP] Visualize uninstrumented services in the dependency diagrams #3805

Closed
wants to merge 8 commits into from

Conversation

paule96
Copy link

@paule96 paule96 commented Jul 10, 2022

Which problem is this PR solving?

This PR resolves the feature #3804 for the memory storage.

Short description of the changes

  • Add some development setup changes to make it easy for new developers on this project to just check out hit F5 and be up and running
    • The developer now needs just to clone the repository in container volumne with the help of the remote containers development extension of vscode.
    • To start debugging he just needs to hit F5
    • It's not required for the developer to install any tools on his PC -> only docker is required
    • It also configures the recommended settings from the contribution guide
  • add the peer detection in the memory storage provider

It looks nice so far:

image

cc @yurishkuro

@paule96 paule96 requested a review from a team as a code owner July 10, 2022 12:47
@paule96 paule96 requested a review from pavolloffay July 10, 2022 12:47
@@ -71,6 +71,20 @@ func (m *Store) GetDependencies(ctx context.Context, endTs time.Time, lookback t
trace, _ := m.deduper.Adjust(orig)
if m.traceIsBetweenStartAndEnd(startTs, endTs, trace) {
for _, s := range trace.Spans {
// this finds unmanged peers of the service. So this are all external dependcies
peer := m.findPeer(s)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will not address the issue in the ticket. While peer.service is a recommended tag, it's often impossible for the instrumentation to know.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How you mean? What is the case this tag doesn't catch? And shouldn't this be more an issue for the collector? Shouldn't the observability layer trust the open telemetry spec?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Or did you referring too the other informations that the open telemetry gives for peers?
Something like

  • peer.port
  • peer.ipv6
  • peer.ipv4
  • peer.hostname
  • peer.address

So we should combine all these information for the key?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are two issues.

  1. You're force-adding a dependency based on the presence of peer.service tag regardless of whether the current node is the leaf in the call graph or an inner node that would produce a dependency anyway from its child span.
  2. None of the tags you listed are actually required to be present in the span. In a typical HTTP client instrumentation, the instrumentation layer does not know the name of the downstream service, only its URL, so peer.service tag is likely to be missing, while other peer.* tags might be present. We would need some heuristic function that would decide how to name the downstream service in this case.

@yurishkuro
Copy link
Member

closing stale PR

@yurishkuro yurishkuro closed this Jan 15, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants