Giter VIP home page Giter VIP logo

observability_docker's Introduction

Observability

alt version alt production alt docker alt ARM

Why

This repository contain an observability stack using Observability tools. These one is deploying with Docker Compose to test all the stack's tools.

It is only a testing stack with no security, no production-ready configuration, ... This for testing purpose.

Architecture

The observability stack is composed by Mimir, Loki and Tempo which are deployed in Monolithic mode with 3 instances of each.
It's also include a Grafana vizualisation tool.
The application stack is composed by a FastAPI application with some routes and PostgreSQL database with 1 table.
Logs are written in a log file, scrape by Grafana Promtail and send to Grafana Agent.
Metrics are exposed via Prometheus Client and scraped by Grafana Agent.
Traces are sent via Opentelemetry SDK to Grafana Agent.
Unit tests are performed by k6.io.

Mimir, Loki and Tempo metrics are also exposed througth Grafana Agent.
The metrics of all containers are exposed with cAdvisor.

alt schema

Prerequisite

This repository is run on Mac M1 (ARM architecture). If you want to use another architecture, be sure to modify the Dockerfiles which import arm binary (ex. promtail on the app Dockerfile).

  1. Install Docker.
  2. Create Docker network : docker network create observability-network

How deploy it

  1. Clone this repository : git clone https://github.com/thomasdesplaces/observability_docker.git

  2. Build & deploy observability stack : docker-compose --profile grafana up --build

  3. Access to Grafana for visualization : http://localhost:3000

  4. Build & deploy application stack : docker-compose --profile application up --build

How to send logs/metrics/traces

Deploy an application or database or other on the same docker network with these parameters :

  1. Traces :
  • Protocol : http
  • Host : nginx
  • Port : 3600
  • Path : /v1/traces
  1. Logs :
  • Protocol : http
  • Host : nginx
  • Port : 3500
  • Path : /loki/api/v1/push
  1. Metrics :
  • Expose with Prometheus (or based on Prometheus) on example port : 8000 and modify the targets value in agent.yaml (line 24).

Ports configuration

Observability stack

  1. Get Logs : Promtail --> Nginx : 3500 --> Agent : 3501 --> Nginx : 3502 --> Loki : 3503

  2. Get Traces : oTel SDK --> Nginx : 3600 --> Agent : 3601 --> Nginx : 3602 --> Tempo : 3603

  3. Get Metrics : Prometheus Exporter : 5050 (on path /metrics) <-- Agent --> Nginx : 3702 --> Mimir : 3703

  4. Consult Logs on Grafana : Grafana --> Nginx : 4502 --> Loki : 3503

  5. Consult Traces on Grafana : Grafana --> Nginx : 4602 --> Tempo : 4603

  6. Consult Metrics on Grafana : Grafana --> Nginx : 4702 --> Mimir : 3703

Application stack

  1. Front port : 5055

  2. Backend/API port : 5050

  3. Database port : 5432

Sources

Observability stack

Logo/Link Version Usage
Grafana Agent main-6f9d397 Used to scrape data from applications (front, back, databases, ...) and send to each specific storage (like OpenTelemetry Collector). Based on https://github.com/grafana/agent/blob/main/example/docker-compose/docker-compose.yaml
Grafana Tempo v1.5.0 Used to store Traces (like Jaeger or Zipkin). Based on https://github.com/grafana/tempo/tree/main/example/docker-compose/scalable-single-binary
Grafana Mimir v2.4.0 Used to store Metrics (like Prometheus or Cortex). Based on https://github.com/grafana/mimir/blob/main/docs/sources/mimir/tutorials/play-with-grafana-mimir/docker-compose.yml
Grafana Loki v2.7.0 Used to store Logs (like Elasticsearch). Based on https://github.com/grafana/loki/tree/main/examples/getting-started
Grafana v9.3.1 Used to visualize data (like Kibana). Based on https://github.com/grafana/grafana
Minio Latest Used to load balance traffic between each instance (on Cloud, use S3, Google Cloud Storage or similar). Based on https://github.com/minio/minio
NGinx Latest Used to load balance traffic between each instance. Based on https://github.com/nginx/nginx
cAdvisor Latest Used to expose all containers metrics

Application stack

Thanks to @Blueswen for the FastAPI observability configuration.

Logo/Link Version Usage
Promtail Latest Used to scrape application logs from file.
FastAPI 0.88.0 Used to expose API. Based on https://github.com/Blueswen/fastapi-observability
PostgreSQL 15-Bullseye Used to store application data.
Latest Used to export Postgres metrics. Based on https://hub.docker.com/r/wrouesnel/postgres_exporter
k6.io Latest Used to performed unit tests.
OpenTelemetry 1.15.0 Used to generate traces.

observability_docker's People

Contributors

thomasdesplaces avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

observability_docker's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.