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

Add telemetry blog post #395

Open
wants to merge 2 commits into
base: gh-pages
Choose a base branch
from

Conversation

alexanderkyte
Copy link
Contributor

No description provided.

address this problem have completely lost the trust of the customer base. As soon as a
brand is associated with “tracking,” people stop affording the company the benefit of the
doubt. Telemetry mistakes seeming sinister (and sometimes correctly so) has lead to the
passing of the GDPR in Europe.
Copy link
Member

Choose a reason for hiding this comment

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

define the acronym as General Data Protection Regulation (GDPR).

### Implementation ###

Being privacy-preserving is more than just having our policies in open-source code; we must have
good policies. To abide by the GDPR we cannot collect any Personally Identifying Information.
Copy link
Member

Choose a reason for hiding this comment

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

use Personally Identifying Information (PII).


To make this concrete, this is an example of what we send for a managed frame:

```
Copy link
Member

Choose a reason for hiding this comment

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

add json after the backticks to get nice code formatting.

"guid" : "0845998F-6B70-4AA8-9214-6731378926A0",
"token" : "0x6003817",
"native_offset" : "0x1fd",
"il_offset" : "0x00071"
Copy link
Member

Choose a reason for hiding this comment

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

indent these so they're not on the same column as the curly braces

Copy link
Member

Choose a reason for hiding this comment

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

would be nice to add some comments about what each field means, e.g.

{
  "is_managed" : "true",                             // whether the crash occurred in .NET code or the runtime
  "guid" : "0845998F-6B70-4AA8-9214-6731378926A0",   // unique identifier of the assembly that contained the crashing code
  "token" : "0x6003817",                             // ...
  "native_offset" : "0x1fd",                         // ...
  "il_offset" : "0x00071",                           // ...
}

It is a much harder problem for a runtime than for a web server because we expose a lot of the
details of the underlying platform to a developer who chooses to poke and prod. The CPU model isn’t
likely to cause problems with a web server, but leads to
[impossible bugs](https://www.mono-project.com/news/2016/09/12/arm64-icache/) with mono.
Copy link
Member

Choose a reason for hiding this comment

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

change the link to /news/2016/09/12/arm64-icache/

likely to cause problems with a web server, but leads to
[impossible bugs](https://www.mono-project.com/news/2016/09/12/arm64-icache/) with mono.
We expose these abstract state machines in the API that only roughly correlate to the bits in the machine registers.
This train of thought with respect to state machines and logging lead to the flight recorders, which will be mentioned in a subsequent blog post.
Copy link
Member

Choose a reason for hiding this comment

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

should we do the flight recorder post before this one?

We expose these abstract state machines in the API that only roughly correlate to the bits in the machine registers.
This train of thought with respect to state machines and logging lead to the flight recorders, which will be mentioned in a subsequent blog post.

The best part of all of this is that it is all open source. Because mono is an embedded runtime, when you embed our telemetry engine you gain the ability to collect telemetry on your own code. Someone today can build mono in a way that allows them to get a beautiful runtime state dump on each crash. If they don’t change too much, it’ll even be GDPR-compliant. It can be hard to get really excited about logging, but it’s easy to get excited about spending less time teaching customers to debug.
Copy link
Member

Choose a reason for hiding this comment

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

we should probably expand a bit on how this is explicitly opt-in for embedders and how we're only using it in VSMac today and not on any random user binaries that are executed with mono-project.com packages.

Copy link
Contributor

Choose a reason for hiding this comment

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

Yes, we must make it clear that this is completely opt-in and the place we enabled has user consent.

@alexanderkyte
Copy link
Contributor Author

I'm going to make this into an informational how-to article under advice from Miguel, and make a shorter blog post. I'm going to include information on the flight recorders there as well.

Copy link
Contributor

@kumpera kumpera left a comment

Choose a reason for hiding this comment

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

This blog post looks really promising :)


Software engineers often like to think of exceptional paths as being rarely taken.
While this is hopefully the case on a customer’s machine, the engineer will see a
program fail far more often than they will watch it succeed. Every engineer who has
Copy link
Contributor

Choose a reason for hiding this comment

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

Every one engineer who has to suffer from...

had to suffer bad tooling of one form or another becomes aware of this fact like a
person with a broken foot becomes aware of how far away things are.

The modern software lifecycle does not end when you ship a piece of code. Defects in
Copy link
Contributor

Choose a reason for hiding this comment

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

The Modern software lifecycle...

portion of the time it takes to fix a bug can be spent in discovering that it exists.
Often this discovery includes finding the ways that the customer’s environment differs
from the developer’s testing environment. A back-and-forth conversation can give a
developer a lot of information, but it’s not the case that every bug filer is
Copy link
Contributor

Choose a reason for hiding this comment

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

...conversation can give a developer a lot of information

to a lot of innovations in software engineering tooling. Unfortunately, many attempts to
address this problem have completely lost the trust of the customer base. As soon as a
brand is associated with “tracking,” people stop affording the company the benefit of the
doubt. Telemetry mistakes seeming sinister (and sometimes correctly so) has lead to the
Copy link
Contributor

Choose a reason for hiding this comment

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

I'd stay away from such politically charged tone here.
You can make the point that some user can be averse to tracking and can find telemetry to be such one of those.
Plus, you can say that the EU passed GDPR as a response to such concerns.

sweaty palms. The addition of integrated telemetry support to the Mono runtime is something
that would have to balance a number of concerns.

I believe that we did pretty well. Any constructive criticism through official channels is
Copy link
Contributor

Choose a reason for hiding this comment

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

Avoid the self congratulatory tone. You can say the same without using it.


We needed to balance that desire against the desire for a crash from two different versions of mono
to look very similar or identical to the backend (Part 3). Mono already has unique hashing functions
for metadata objects; we use it inside of the AOT compiler and runtime. We can then generate a
Copy link
Contributor

Choose a reason for hiding this comment

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

Mono already has unique hashing functions for metadata objects; we use it inside of the AOT compiler and runtime.
This fits better as part of answering that the solution is hashing. IE:

The solution to this is to generate a hash that is identical for two ...., while uploading ... - Mono already has such hash functions for metadata objects as our AOT compiler uses them
```

details of the underlying platform to a developer who chooses to poke and prod. The CPU model isn’t
likely to cause problems with a web server, but leads to
[impossible bugs](https://www.mono-project.com/news/2016/09/12/arm64-icache/) with mono.
We expose these abstract state machines in the API that only roughly correlate to the bits in the machine registers.
Copy link
Contributor

Choose a reason for hiding this comment

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

Why do we expose these abstract state machines? It's not clear what's the connection with the previous paragraph.

likely to cause problems with a web server, but leads to
[impossible bugs](https://www.mono-project.com/news/2016/09/12/arm64-icache/) with mono.
We expose these abstract state machines in the API that only roughly correlate to the bits in the machine registers.
This train of thought with respect to state machines and logging lead to the flight recorders, which will be mentioned in a subsequent blog post.
Copy link
Contributor

Choose a reason for hiding this comment

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

It's hard to make the connection of state machines, logging and flight recorders.
Maybe explain that the concrete way we realize those state machines is through logging and flight recorders. Plus give some high level overview (a few words) of what a flight recorder is. IE:

Flight recorder is the name we give to lightweight logging doing using a circular buffer - or what you feel it's appropriate to mention here.

We expose these abstract state machines in the API that only roughly correlate to the bits in the machine registers.
This train of thought with respect to state machines and logging lead to the flight recorders, which will be mentioned in a subsequent blog post.

The best part of all of this is that it is all open source. Because mono is an embedded runtime, when you embed our telemetry engine you gain the ability to collect telemetry on your own code. Someone today can build mono in a way that allows them to get a beautiful runtime state dump on each crash. If they don’t change too much, it’ll even be GDPR-compliant. It can be hard to get really excited about logging, but it’s easy to get excited about spending less time teaching customers to debug.
Copy link
Contributor

Choose a reason for hiding this comment

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

Yes, we must make it clear that this is completely opt-in and the place we enabled has user consent.

We expose these abstract state machines in the API that only roughly correlate to the bits in the machine registers.
This train of thought with respect to state machines and logging lead to the flight recorders, which will be mentioned in a subsequent blog post.

The best part of all of this is that it is all open source. Because mono is an embedded runtime, when you embed our telemetry engine you gain the ability to collect telemetry on your own code. Someone today can build mono in a way that allows them to get a beautiful runtime state dump on each crash. If they don’t change too much, it’ll even be GDPR-compliant. It can be hard to get really excited about logging, but it’s easy to get excited about spending less time teaching customers to debug.
Copy link
Contributor

Choose a reason for hiding this comment

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

Not sure about the dismissive tone of spending less time teaching customers to debug.

@kumpera
Copy link
Contributor

kumpera commented Aug 28, 2018

Is it worth mentioning what one would do once they have a crash dump?

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.

None yet

3 participants