✦ For everyone, free.

Practical knowledge for real and everyday life

Home

Kubernetes Observability

Kubernetes Observability ensures visibility into containerized applications by collecting, analyzing, and presenting metrics, logs, and traces across the cluster.

Kubernetes Observability is the practice and tooling ecosystem for understanding the internal state and behavior of a cluster and the workloads running on it, spanning metrics, logs, traces, and the cluster's own event and status data. Because Kubernetes workloads are distributed across many nodes and Pods that are created and destroyed continuously, observability in this environment depends on aggregation systems that can correlate signals across ephemeral, dynamically scheduled units rather than relying on the persistent, fixed-location processes assumed by traditional monitoring approaches.


The Three Pillars

Metrics

Metrics are numeric measurements collected at regular intervals, such as CPU utilization, request latency, or queue depth, well suited to trend analysis, alerting thresholds, and autoscaling decisions.

Logs

Logs are discrete, timestamped records of events emitted by applications and system components, valuable for understanding the specific sequence of actions that led to a particular outcome, especially during incident investigation.

Traces

Traces capture the path of an individual request as it moves through multiple services, recording the timing and relationships between each step, essential for diagnosing latency and failure in distributed, multi-service architectures typical of microservice deployments on Kubernetes.

observability = metrics logs traces

Metrics in Kubernetes

Metrics Server

The Metrics Server is a lightweight, cluster-wide aggregator of resource usage data, collecting CPU and memory metrics from each node's kubelet and exposing them through the Kubernetes Metrics API, which powers commands such as kubectl top and feeds the Horizontal Pod Autoscaler.

kubectl top nodes
kubectl top pods -n codartium-team

Prometheus

Prometheus is the de facto standard metrics collection and storage system in Kubernetes environments, using a pull-based model in which it periodically scrapes metrics endpoints exposed by instrumented applications and cluster components, storing the results in a time-series database queryable via PromQL.

apiVersion: v1
kind: Pod
metadata:
  name: codartium-api
  annotations:
    prometheus.io/scrape: "true"
    prometheus.io/port: "9090"
    prometheus.io/path: "/metrics"
spec:
  containers:
    - name: api
      image: codartium/api:4.1.0

Alerting

Alerting rules, commonly evaluated by Alertmanager alongside Prometheus, translate metric conditions into notifications, allowing operators to be informed automatically when a service breaches a defined threshold, such as elevated error rates or exhausted resource capacity.


Logging in Kubernetes

Container Log Collection

By convention, containers write logs to their standard output and standard error streams, which the container runtime captures and the kubelet exposes through the API server, retrievable with kubectl logs for a running or recently terminated container.

kubectl logs codartium-api-abc123
kubectl logs codartium-api-abc123 --previous
kubectl logs -l app=codartium-api --all-containers --since=1h

Cluster-Wide Log Aggregation

Because Pods are ephemeral and their logs are not retained after termination and garbage collection, production clusters typically deploy a log aggregation pipeline, often a node-level DaemonSet agent that tails container log files and forwards them to a centralized, durable log store, decoupling log retention from any individual Pod's lifetime.

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: codartium-log-forwarder
spec:
  selector:
    matchLabels:
      app: log-forwarder
  template:
    metadata:
      labels:
        app: log-forwarder
    spec:
      containers:
        - name: forwarder
          image: codartium/log-forwarder:1.2.0
          volumeMounts:
            - name: varlog
              mountPath: /var/log
      volumes:
        - name: varlog
          hostPath:
            path: /var/log

Distributed Tracing

Instrumentation

Distributed tracing requires applications to propagate a trace context, typically a set of headers identifying the current trace and span, across service boundaries, so that a request touching multiple Pods and Services can be reconstructed as a single, coherent trace by the collecting backend.

OpenTelemetry

OpenTelemetry provides a vendor-neutral standard for instrumenting applications and exporting traces, metrics, and logs, allowing Kubernetes workloads to emit telemetry in a consistent format regardless of which backend, tracing system, or observability vendor ultimately consumes it.


Cluster-Native Observability Signals

Events

Kubernetes objects generate Events recording significant state transitions, such as a Pod being scheduled, an image pull failing, or a container being killed for exceeding its memory limit, providing a lightweight, built-in audit trail useful for diagnosing recent object-level issues without requiring any external tooling.

kubectl get events --sort-by=.metadata.creationTimestamp -n codartium-team
kubectl describe pod codartium-api-abc123

Object Status and Conditions

Every controller-managed object exposes a status field, and often a set of conditions, reflecting the controller's own assessment of that object's current health, forming a first layer of observability that requires no additional tooling to inspect, only the standard Kubernetes API.


Observability Platform Composition

A typical production observability stack combines Prometheus or a compatible metrics backend for quantitative monitoring and alerting, a centralized logging pipeline for qualitative investigation, a distributed tracing backend for cross-service latency analysis, and a visualization layer, commonly Grafana, that unifies these signals into dashboards correlated by common labels such as namespace, workload, and Pod name.