Introduction #
System observability #
To observe a system, you need to collect and analyze the data it emits. Modern systems emit this data automatically (or once enabled in their configuration). Other systems must be made observable. Depending on the system, you add SDKs or plugins, query their APIs... Whatever the method, this data falls into three categories, known as the pillars of observability:
Logs #
Logs are the mechanism a system uses to report on its operating state. In most cases, they are stored in files called log files.A log file is therefore made of several lines, each representing a change of state, called events:- application start/stop
- user login/logout
- image added/deleted
- ...
- timestamp every event.
- have a log format: the schema that describes the structure of an event.
- have a log format

Metrics #
Metrics are quantifiable measurements that give visibility into how systems are used. Metrics vary from one system to another. Thresholds are usually associated with each metric to trigger corrective actions before reaching the breaking point.For example, for a system such as a:- server: you monitor CPU, RAM, disk usage...
- web server: you monitor the number of hits, requests per second, worker status
Test and acceptance servers are often undersized compared to their PRODUCTION counterparts. This makes thresholds hard to define because the value may change from one environment to another. To solve this, whenever possible you work with percentages, which makes the threshold uniform across environments. For example, the CPU usage threshold is set to 80%.

Traces #

Profiles #
Continuous profiling is often considered the 4th pillar of observability. Unlike traces, which follow a request end to end, profiles show how code executes on the processor (CPU) and in memory (RAM), line by line. They answer the question: 'Which function or line of code consumes the most resources in production?'Tools such as Grafana Pyroscope collect these profiles with a very low performance overhead, making it easier to optimize code, reduce infrastructure costs and improve response times.
Data observability #
Data freshness #
- Data age: time elapsed since the last update.
- Processing latency: delay between new data appearing in the source and its availability in the target system.
Data distribution #
- Mean: average value of the data in a column.
- Standard deviation: measure of how data is spread around the mean.
- Outliers: percentage of values outside an expected range.
Data volume #
- Number of records: total records in a table or dataset.
- Size in bytes: total size of the data in storage (MB, GB, etc.).
Data schema #
- Schema validation: check that the current schema matches expectations in terms of column types, names and relationships.
- Schema evolution: track changes in table schemas (columns added/removed).
Data lineage #
- Data source: identify where the data comes from.
- Transformation: record all transformations applied to the data.
- Final destination: check that the data reaches its intended destination.