73 lines
1.9 KiB
Plaintext
73 lines
1.9 KiB
Plaintext
```plaintext
|
|
%% Observability Stack Architecture (ADR-0025)
|
|
%% C4 Component diagram showing telemetry flow
|
|
|
|
flowchart TB
|
|
subgraph apps["📦 Applications"]
|
|
direction LR
|
|
go["Go Apps<br/>(OTEL SDK)"]
|
|
python["Python Apps<br/>(OTEL SDK)"]
|
|
node["Node.js Apps<br/>(OTEL SDK)"]
|
|
java["Java Apps<br/>(OTEL SDK)"]
|
|
end
|
|
|
|
subgraph collection["📡 Telemetry Collection"]
|
|
otel["OpenTelemetry<br/>Collector<br/>━━━━━━━━<br/>OTLP gRPC :4317<br/>OTLP HTTP :4318"]
|
|
end
|
|
|
|
subgraph storage["💾 Storage Layer"]
|
|
direction LR
|
|
|
|
subgraph metrics_store["Metrics"]
|
|
prometheus["📊 Prometheus<br/>14d retention<br/>50GB"]
|
|
end
|
|
|
|
subgraph logs_traces["Logs & Traces"]
|
|
clickstack["📋 ClickStack<br/>(ClickHouse)"]
|
|
end
|
|
end
|
|
|
|
subgraph visualization["📈 Visualization"]
|
|
grafana["🎨 Grafana<br/>Dashboards<br/>& Exploration"]
|
|
end
|
|
|
|
subgraph alerting["🔔 Alerting Pipeline"]
|
|
alertmanager["⚠️ Alertmanager"]
|
|
ntfy["📱 ntfy<br/>(Push)"]
|
|
discord["💬 Discord"]
|
|
end
|
|
|
|
%% App to collector
|
|
go -->|"OTLP"| otel
|
|
python -->|"OTLP"| otel
|
|
node -->|"OTLP"| otel
|
|
java -->|"OTLP"| otel
|
|
|
|
%% Collector to storage
|
|
otel -->|"Metrics"| prometheus
|
|
otel -->|"Logs"| clickstack
|
|
otel -->|"Traces"| clickstack
|
|
|
|
%% Storage to visualization
|
|
prometheus --> grafana
|
|
clickstack --> grafana
|
|
|
|
%% Alerting flow
|
|
prometheus -->|"PrometheusRules"| alertmanager
|
|
alertmanager --> ntfy
|
|
ntfy --> discord
|
|
|
|
classDef app fill:#3498db,color:white
|
|
classDef otel fill:#e74c3c,color:white
|
|
classDef storage fill:#27ae60,color:white
|
|
classDef viz fill:#9b59b6,color:white
|
|
classDef alert fill:#f39c12,color:black
|
|
|
|
class go,python,node,java app
|
|
class otel otel
|
|
class prometheus,clickstack storage
|
|
class grafana viz
|
|
class alertmanager,ntfy,discord alert
|
|
|
|
```
|