Your post is a great intro to metrics, logs and traces. But it has nothing to do with -- and says nothing about -- observability.
Has nothing to do with datatypes.
Doesn't mean metrics aren't useful for some things! But mostly monitoring, not observability.
So what *is* observability, applied to the software domain? Glad you asked 😄
(Plane taking off, sec! ✈️)
Observability is about the unknown-unknowns.
Plenty of tools are great at asking the questions you could predict in advance that you would need to ask. This is the easy part.
Logging tools let you define indexes and schemas for questions to ask efficiently. It's easy to gather, store and query the known unknowns. And for a long time that was plenty.
Observability starts with gathering the data at the right level of abstraction, oriented around each request, to let you ask any question about the requests in the system.
EVERYTHING you know about it, did in it, parameters passed in to it, etc.
You especially want to stuff in any kind of IDs. Userids, app id, shopping cart id, etc
(A maturely instrumented service usually has a few HUNDRED dimensions per event, and it will have one event for each service that the request hits.)
Now, you can simply poke and find out that all the errors are, for example..
(Could you have predicted you were going to need that custom metric? 😬😬)
In order to deliver observability, your tool also needs to support *high cardinality and dimensionality*. Cardinality means the number of unique items in a set, and
Metrics cannot support high cardinality dimensions. It's a running joke, people trying to put userid or request id in a metrics tag ... and blowing up the world. 😕
You NEED the ability to chain and filter as many high cardinality dimensions as you want if you're going to be able to ask arbitrary questions about your unknown unknowns.
We are way behind where we ought to be as an industry. We are shipping code we dont understand,
Meanwhile everyone says they waste >40% of their day doing bullshit that doesn't move the biz forward.
If you instrument your code, watch it deploy, then ask "is it doing what I expect? does anything else look weird?" as a habit? It never has to become a shitty hairball!
And you don't. 🥳