Blog backend in Java Quarkus für das HFTM Modul IN306 Verteilte Systeme. In einer nachfolgenden Refaktorierung wurde das Projekt mit open telemetry ergänzt.
Siehe Kapitel Quickstart für einen einfachen Aufbau eines Testfalles mit Open Telemetry Tracing.
Siehe file telemetry.md für den Aufbau des generell nutzbaren Telemetrie-Umsystems.
Siehe file quarkus-otel.md für die Dokumentation zur Nachrüstung eines bestehenden Quarkusprojektes mit open telemetry.
Siehe file dev.md für Hinweise zur Entwicklung an diesem Projekt.
Erstellen sie das Netzwerk und starten sie die benötigten Container der Applikation (MariaDB, Keycloak, Quarkus Backend) und der OpenTelemetry All-in-one-Container mit folgenden Befehlen.
Docker-Befehle:
docker network create blog-nw
docker run -d --name=backend-mariadb -p 9001:3306 --network blog-nw -v ./mariadb/init.sql:/data/application/init.sql -e MARIADB_USER=backend -e MARIADB_PASSWORD=YourPassHere -e MARIADB_ROOT_PASSWORD=YourPassHere docker.io/mariadb:10.11 --init-file /data/application/init.sql
docker run -d --name blog-keycloak -p 8080:8080 --network blog-nw -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=super$ecret1! quay.io/keycloak/keycloak:latest start-dev
docker run -d --name otel-aio -p 3000:3000 -p 4317:4317 -p 4318:4318 -v ./otel/d_aio_config.yaml:/otel-lgtm/otelcol-config.yaml --network blog-nw docker.io/grafana/otel-lgtm
docker run -d --name blog-backend -p 8085:8085 -e quarkus.datasource.jdbc.url=jdbc:mariadb://host.docker.internal:9001/blog_backend -e quarkus.otel.exporter.otlp.traces.endpoint=http://host.docker.internal:4317 --network blog-nw ghcr.io/stafel/blog-backend:latest
Podman-Befehle:
podman network create blog-nw
podman run -d --name=backend-mariadb -p 9001:3306 --network blog-nw -v ./mariadb/init.sql:/data/application/init.sql -e MARIADB_USER=backend -e MARIADB_PASSWORD=YourPassHere -e MARIADB_ROOT_PASSWORD=YourPassHere docker.io/mariadb:10.11 --init-file /data/application/init.sql
podman run -d --name blog-keycloak -p 8080:8080 --network blog-nw -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=super$ecret1! quay.io/keycloak/keycloak:latest start-dev
podman run -d --name otel-aio -p 3000:3000 -p 4317:4317 -p 4318:4318 -v ./otel/p_aio_config.yaml:/otel-lgtm/otelcol-config.yaml --network blog-nw docker.io/grafana/otel-lgtm
podman run -d --name blog-backend -p 8085:8085 -e quarkus.datasource.jdbc.url=jdbc:mariadb://host.containers.internal:9001/blog_backend -e quarkus.otel.exporter.otlp.traces.endpoint=http://host.containers.internal:4317 --network blog-nw ghcr.io/stafel/blog-backend:latest
Warten sie eine Minute bis der OpenTelemetry stack aufgesetzt ist im Container "otel-aio" und die Logmessage "The OpenTelemetry collector and the Grafana LGTM stack are up and running." erscheint.
Es ist nun die Quarkus-Konsole auf http://localhost:8085/ und das Grafana-Dashboard unter http://localhost:3000/login sichtbar.
Loggen sie sich in Grafana mit Username "admin" und Passwort "admin" ein.
Wenn sie nun einen blog-endpoint ansprechen (z.B. http://localhost:8085/blog) erhalten sie einen Trace in der Tempo-Datasource in Grafana, ebenfalls werden die Metriken in der Prometheus-Datasource in Grafana dargestellt.
Unsere Custom-Metrik "blog_requests_connections_total" ist ebenfalls in Prometheus
- Admin: Kann alle Blogposts und Kommentare löschen. Kann die Blog-Metadaten editieren. Kann User erstellen und löschen.
- Author: Kann Blogposts verfassen. Kann eigene Blogposts editieren und löschen.
- User: Kann Kommentare zu einem Blogpost erfassen. Kann eigene Kommentare editieren und löschen. Kann eigene Userdaten editieren und sich selbst löschen.
- /blog
- GET: Offen
- POST: Admin-Rolle
- /blog/posts
- GET: Offen
- POST: Author-Rolle
- /blog/posts/{id}
- GET: Offen
- PUT: Author-Rolle und Author stimmen überrein
- DELETE: Author-Rolle und Author stimmen überrein oder Admin-Rolle
- /blog/posts/{id}/comments
- GET: Offen
- POST: User-Rolle
- /blog/posts/{id}/comments/{id}
- GET: Offen
- PUT: User-Rolle und User stimmen überrein
- DELETE: User-Rolle und User stimmen überrein oder Admin-Rolle
- /blog/users
- GET: Offen
- POST: Admin-Rolle
- /blog/users/{id}
- GET: Offen
- PUT: User-Rolle und User stimmt überein
- DELETE: User-Rolle und User stimmt überein oder Admin-Rolle