Skip to content

Demo Apps with Traces,Logs,Metrics included (Grafana, Loki, Tempo, Jaeger, Prometheus, OpenTelemetry, Karma, Pyrra)

Notifications You must be signed in to change notification settings

GRomR1/monitoring-microservices-demo

Repository files navigation

Python Demo Apps with OpenTelemetry Traces, Logs and Metrics

Набор различных способов добавления OpenTelemetry-библиотек (инструментация) в приложения написанные на Python с использованием фреймворков Flask, FastAPI

Набор готовых настроек в виде Docker-контейнеров для быстрого запуска сервисов для работы с метриками, логами и трейсами:

  • Grafana - UI для работы с трейсами, логами и метриками
  • Jaeger UI - UI и хранилище для трейсов
  • Prometheus - хранилище метрик
  • OpenTelemetry Collector - сбор и обработка OpenTelemetry-данных
  • Loki - хранилище логов
  • Tempo - хранилище трейсов
  • Beyla - приложение для автоинструментации приложений с помощью eBPF
  • Pyrra - процессинг и UI для работы с SLO, бюджетом ошибок и другими индикаторами
  • Karma - UI для работы с алертами
  • AlertManager - процессинг и UI для алертов
  • Webhook Tester - UI для просмотра отправляемых от AlertManager событий
  • Pyroscope - просмотр профилировочной информации

Описание архитектуры

Описание архитектуры пользовательских сервисов

TODO

Описание архитектуры инфраструктуры для мониторинга

TODO

Запуск сервисов

Запустить все сервисы

docker-compose up -d

Описание сценариев

1. Запрос сервисам Flask и FastAPI

Пример работы работы распределенных трассировок в Python как с использованием автоинструментации (приложение на Flask), так и без нее, с добавлением opentelemtry-кода (приложение на FastAPI).

Описание цепочки между двумя сервисами: flask-fastapi-arch-scheme.png

Описание сервисов:

  • flask-app - edge-сервис, в котором телеметрия подключена посредством автоинструментации. Сам сервис написан на Python с Flask без подключения opentelemtry-библиотек
  • fastapi-app - сервис, с добавлением в коде вызовов opentelemtry-библиотек. Написан на Python с FastAPI. Имеется подключение к БД и запрос данных из нее.

Выполнить запрос к flask-app:

curl http://127.0.0.1:8001/users

Найти запрос в UI:

  • Открыть Grafana, выбрать Tempo, переключиться в тип запроса Search и нажать Run query: grafana_explore_traces
  • Открыть Jaeger UI, выбрать сервис внутри Services и нажать Find Traces: jaeger_expore_traces

Открыть трейс запроса и получить всю информацию по спанам:

  • Grafana: grafana_show_trace
  • Jaeger UI: jaeger_show_trace

2. Запрос сервисам Flask и Golang

Пример сбора распределенных трассировок с двух взаимодействующих сервисов без каких-либо манипуляций с их кодом. С обоих сервисов собирается телеметрия посредством автоинструментации: через внешние библиотеки (сервис flask-app) и через ebpf (сервис golang)

Описание цепочки между двумя сервисами: TODO

Описание сервисов:

  • flask-app - сервис, из предыдущего примера, без подключения opentelemtry-библиотек
  • golang-app - простой сервис на Golang, без подключения opentelemtry-библиотек

Выполнить запрос к flask-app:

curl http://127.0.0.1:8001/albums

Найти запрос в UI:

  • Открыть Grafana, выбрать Tempo, переключиться в тип запроса Search и нажать Run query.
  • Открыть Jaeger UI, выбрать сервис внутри Services и нажать Find Traces.
  • Открыть трейс запроса и получить всю информацию по спанам.

3. Запуск нагрузочного сценария

Запуск множества запросов на /users через k6:

k6 run k6-script.js

Просмотр индикатров SLO в Pyrra: pyrra_slo_indicators

Просмотр изменения значения индикатров SLO в Pyrra (например Latency - 95% успешных запросов должны быть обработаны быстрее, чем за 1с): pyrra_latency_indicator

Просмотр графиков изменения показателей используемых в расчете SLO в Pyrra: pyrra_latency_graphics

Просмотр графиков изменения показателей используемых в расчете SLO в Pyrra: pyrra_latency_graphics pyrra_availability_graphics

Остановка сервисов

Остановить все сервисы

docker-compose down -v

Полезные ссылки

About

Demo Apps with Traces,Logs,Metrics included (Grafana, Loki, Tempo, Jaeger, Prometheus, OpenTelemetry, Karma, Pyrra)

Resources

Stars

Watchers

Forks