@startuml skinparam linetype polyline skinparam linetype ortho component "Services" { [user-service] [account-service] [notification-service] [transaction-service] [auth-server] [transaction-service] ---> [user-service] [transaction-service] ---> [account-service] [transaction-service] ---> [notification-service] [notification-service] ---> [user-service] [user-service] <--> [auth-server] [account-service] <--> [auth-server] [notification-service] <--> [auth-server] [transaction-service] <--> [auth-server] } database "PostgreSQL" { frame "user-data schema" { [user data] } [user-service] .. [user data] frame "account-data schema" { [account data] } [account-service] .. [account data] frame "transaction-data schema" { [transaction data] } [transaction-service] .. [transaction data] frame "notification-data schema" { [notification data] } [notification-service] .. [notification data] } component "OpenTelemetry Collector" { component "logs" { [receiver for logs] -> [processor for logs] [processor for logs] -> [exporter for logs] } component "metrics" { [receiver for metrics] -> [processor for metrics] [processor for metrics] -> [exporter for metrics] } component "tracing" { [receiver for tracing] -> [processor for tracing] [processor for tracing] -> [exporter for tracing] } [receiver for logs] -[hidden]-> [receiver for metrics] [receiver for metrics] -[hidden]-> [receiver for tracing] [user-service] --[#e60e20]---> [receiver for logs] [account-service] --[#e60e20]---> [receiver for logs] [notification-service] --[#e60e20]---> [receiver for logs] [transaction-service] --[#e60e20]---> [receiver for logs] [auth-server] --[#e60e20]---> [receiver for logs] [user-service] <--[#0e3473]--- [receiver for metrics] [account-service] <--[#0e3473]--- [receiver for metrics] [notification-service] <--[#0e3473]--- [receiver for metrics] [transaction-service] <--[#0e3473]--- [receiver for metrics] [auth-server] <--[#0e3473]--- [receiver for metrics] [user-service] --[#c366c2]---> [receiver for tracing] [account-service] --[#c366c2]---> [receiver for tracing] [notification-service] --[#c366c2]---> [receiver for tracing] [transaction-service] --[#c366c2]---> [receiver for tracing] [auth-server] --[#c366c2]---> [receiver for tracing] } component "Observability backends" { [Loki] [Mimir] [Tempo] [exporter for logs] --[#082b60]-> [Loki] [exporter for metrics] --[#082b60]-> [Mimir] [exporter for tracing] --[#082b60]-> [Tempo] } component "observability visualization" { [Grafana] } [k6] [k6] <--> [auth-server] [k6] --> [transaction-service] [Loki] <- [Grafana] [Mimir] <- [Grafana] [Tempo] <- [Grafana] @enduml