fix(observability): finish Jaeger→Tempo migration across satellite files
The Jaeger→Tempo swap landed in the authoritative places (compose.yml,
stack.toml, infra/grafana) but several satellites still referenced the
removed `jaeger` service:
- deploy.sh Tier-4 ran `up jaeger loki prometheus` — `jaeger` no longer
exists, so `docker compose up` errored ("no such service") and aborted
the observability tier, taking loki/prometheus on that line with it.
- bootstrap_certs.py provisioned a cert for the dead jaeger.fhirworx.io
and never provisioned tempo.fhirworx.io.
- README (template + generated), the nginx dashboard tile, and the Gitea
home tile all advertised a Jaeger URL that no longer resolves.
- dev/seeds/grafana/ was a stale, unmounted, unreferenced duplicate of
infra/grafana still carrying a jaeger datasource — removed as dead.
All now point at tempo. README regenerated from the template.
This commit is contained in:
11
README.md
11
README.md
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
Healthcare analytics platform on self-hosted infrastructure. Replaces dbt SQL models with narwhals DataFrame-agnostic expression functions, backed by DuckDB locally and Iceberg/Trino in the lakehouse. 29 services, 14 data pipelines, 13,844 tests at 99% coverage.
|
Healthcare analytics platform on self-hosted infrastructure. Replaces dbt SQL models with narwhals DataFrame-agnostic expression functions, backed by DuckDB locally and Iceberg/Trino in the lakehouse. 29 services, 14 data pipelines, 13,847 tests at 99% coverage.
|
||||||
|
|
||||||
## Quick start
|
## Quick start
|
||||||
|
|
||||||
@@ -57,7 +57,7 @@ All services route through Traefik at `*.fhirworx.io`.
|
|||||||
| Trino | `trino.fhirworx.io` | Distributed SQL engine |
|
| Trino | `trino.fhirworx.io` | Distributed SQL engine |
|
||||||
| Grafana | `grafana.fhirworx.io` | Dashboards |
|
| Grafana | `grafana.fhirworx.io` | Dashboards |
|
||||||
| Prometheus | `prometheus.fhirworx.io` | Metrics |
|
| Prometheus | `prometheus.fhirworx.io` | Metrics |
|
||||||
| Jaeger | `jaeger.fhirworx.io` | Distributed tracing |
|
| Tempo | `tempo.fhirworx.io` | Distributed tracing |
|
||||||
| Loki | `loki.fhirworx.io` | Log aggregation |
|
| Loki | `loki.fhirworx.io` | Log aggregation |
|
||||||
|
|
||||||
## Analytics platform
|
## Analytics platform
|
||||||
@@ -165,6 +165,7 @@ The generator reads image definitions from `stack.toml [images]`, dispatches to
|
|||||||
| `infra-ci.yml` | Path-filtered push | Hadolint Dockerfiles, dry-run builds |
|
| `infra-ci.yml` | Path-filtered push | Hadolint Dockerfiles, dry-run builds |
|
||||||
| `release.yml` | Tag (`v*`) | `uv build` + release |
|
| `release.yml` | Tag (`v*`) | `uv build` + release |
|
||||||
| `pkg-supply-chain.yml` | Daily / push | Package inventory, mirror sync, drift detection, vuln scan |
|
| `pkg-supply-chain.yml` | Daily / push | Package inventory, mirror sync, drift detection, vuln scan |
|
||||||
|
| `renovate.yml` | Cron / manual | Renovate dependency-update PRs |
|
||||||
|
|
||||||
### Secret mapping
|
### Secret mapping
|
||||||
|
|
||||||
@@ -222,7 +223,7 @@ ROOT_KEY=$KEY uv run python -m api.auth derive $COMMIT_SHA --redact
|
|||||||
| `gateway` | external | Traefik, all public-facing |
|
| `gateway` | external | Traefik, all public-facing |
|
||||||
| `storage` | internal | PostgreSQL, RustFS |
|
| `storage` | internal | PostgreSQL, RustFS |
|
||||||
| `data` | internal | Nessie, Trino, Polaris |
|
| `data` | internal | Nessie, Trino, Polaris |
|
||||||
| `observability` | internal | Grafana, Prometheus, Jaeger, Loki |
|
| `observability` | internal | Grafana, Prometheus, Tempo, Loki |
|
||||||
| `ci` | external | Gitea, Act Runner, RustFS |
|
| `ci` | external | Gitea, Act Runner, RustFS |
|
||||||
|
|
||||||
## Design system
|
## Design system
|
||||||
@@ -417,7 +418,7 @@ The hook classifies staged files and runs only what is relevant:
|
|||||||
| `src/sem/*.py` | `tests/sem/` + `test_ast_coverage.py` | Module tests + structural invariants |
|
| `src/sem/*.py` | `tests/sem/` + `test_ast_coverage.py` | Module tests + structural invariants |
|
||||||
| `src/aco/*.py` + `src/sem/*.py` | `tests/aco/` + `tests/sem/` + structural | Both module test dirs |
|
| `src/aco/*.py` + `src/sem/*.py` | `tests/aco/` + `tests/sem/` + structural | Both module test dirs |
|
||||||
| `tests/bib/test_sync.py` | `tests/bib/` | Changed test dir |
|
| `tests/bib/test_sync.py` | `tests/bib/` | Changed test dir |
|
||||||
| `pyproject.toml` or `conftest.py` | Full suite (13,844+ tests) | Infrastructure change |
|
| `pyproject.toml` or `conftest.py` | Full suite (13,847+ tests) | Infrastructure change |
|
||||||
| `notebooks/pfs_calcs.py` | `marimo check` + notebook execution | Notebook validation only |
|
| `notebooks/pfs_calcs.py` | `marimo check` + notebook execution | Notebook validation only |
|
||||||
| `README.md` only | Nothing | No testable changes |
|
| `README.md` only | Nothing | No testable changes |
|
||||||
|
|
||||||
@@ -512,7 +513,7 @@ stack/
|
|||||||
│ ├── hooks/ Git hooks (tracked, core.hooksPath = dev/hooks)
|
│ ├── hooks/ Git hooks (tracked, core.hooksPath = dev/hooks)
|
||||||
│ ├── seeds/ Reference data (BCDA samples, CMS docs)
|
│ ├── seeds/ Reference data (BCDA samples, CMS docs)
|
||||||
│ └── pipelines/ CI-agnostic pipeline specs
|
│ └── pipelines/ CI-agnostic pipeline specs
|
||||||
├── tests/ 13,844 tests at 99% coverage
|
├── tests/ 13,847 tests at 99% coverage
|
||||||
├── notebooks/ Marimo notebooks
|
├── notebooks/ Marimo notebooks
|
||||||
├── docs/ Docusaurus site
|
├── docs/ Docusaurus site
|
||||||
├── data/ DuckDB, bib.sqlite, BCDA/CMS data, zotero (gitignored)
|
├── data/ DuckDB, bib.sqlite, BCDA/CMS data, zotero (gitignored)
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ All services route through Traefik at `*.fhirworx.io`.
|
|||||||
| Trino | `trino.fhirworx.io` | Distributed SQL engine |
|
| Trino | `trino.fhirworx.io` | Distributed SQL engine |
|
||||||
| Grafana | `grafana.fhirworx.io` | Dashboards |
|
| Grafana | `grafana.fhirworx.io` | Dashboards |
|
||||||
| Prometheus | `prometheus.fhirworx.io` | Metrics |
|
| Prometheus | `prometheus.fhirworx.io` | Metrics |
|
||||||
| Jaeger | `jaeger.fhirworx.io` | Distributed tracing |
|
| Tempo | `tempo.fhirworx.io` | Distributed tracing |
|
||||||
| Loki | `loki.fhirworx.io` | Log aggregation |
|
| Loki | `loki.fhirworx.io` | Log aggregation |
|
||||||
|
|
||||||
## Analytics platform
|
## Analytics platform
|
||||||
@@ -158,6 +158,7 @@ The generator reads image definitions from `stack.toml [images]`, dispatches to
|
|||||||
| `infra-ci.yml` | Path-filtered push | Hadolint Dockerfiles, dry-run builds |
|
| `infra-ci.yml` | Path-filtered push | Hadolint Dockerfiles, dry-run builds |
|
||||||
| `release.yml` | Tag (`v*`) | `uv build` + release |
|
| `release.yml` | Tag (`v*`) | `uv build` + release |
|
||||||
| `pkg-supply-chain.yml` | Daily / push | Package inventory, mirror sync, drift detection, vuln scan |
|
| `pkg-supply-chain.yml` | Daily / push | Package inventory, mirror sync, drift detection, vuln scan |
|
||||||
|
| `renovate.yml` | Cron / manual | Renovate dependency-update PRs |
|
||||||
|
|
||||||
### Secret mapping
|
### Secret mapping
|
||||||
|
|
||||||
@@ -215,7 +216,7 @@ ROOT_KEY=$KEY uv run python -m api.auth derive $COMMIT_SHA --redact
|
|||||||
| `gateway` | external | Traefik, all public-facing |
|
| `gateway` | external | Traefik, all public-facing |
|
||||||
| `storage` | internal | PostgreSQL, RustFS |
|
| `storage` | internal | PostgreSQL, RustFS |
|
||||||
| `data` | internal | Nessie, Trino, Polaris |
|
| `data` | internal | Nessie, Trino, Polaris |
|
||||||
| `observability` | internal | Grafana, Prometheus, Jaeger, Loki |
|
| `observability` | internal | Grafana, Prometheus, Tempo, Loki |
|
||||||
| `ci` | external | Gitea, Act Runner, RustFS |
|
| `ci` | external | Gitea, Act Runner, RustFS |
|
||||||
|
|
||||||
## Design system
|
## Design system
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ up act-runner
|
|||||||
|
|
||||||
# ── Tier 4: Observability ──────────────────────────────────────────
|
# ── Tier 4: Observability ──────────────────────────────────────────
|
||||||
log "Tier 4: Observability"
|
log "Tier 4: Observability"
|
||||||
up jaeger loki prometheus
|
up tempo loki prometheus
|
||||||
up promtail otel-collector grafana
|
up promtail otel-collector grafana
|
||||||
|
|
||||||
# ── Tier 5: Remaining services ─────────────────────────────────────
|
# ── Tier 5: Remaining services ─────────────────────────────────────
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ HOSTS_SUBDOMAINS = [
|
|||||||
"zotero",
|
"zotero",
|
||||||
"webdav",
|
"webdav",
|
||||||
"prometheus",
|
"prometheus",
|
||||||
"jaeger",
|
"tempo",
|
||||||
"loki",
|
"loki",
|
||||||
"nessie",
|
"nessie",
|
||||||
"trino",
|
"trino",
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
[server]
|
|
||||||
root_url = http://localhost:3001
|
|
||||||
|
|
||||||
[security]
|
|
||||||
admin_user = admin
|
|
||||||
admin_password = admin
|
|
||||||
|
|
||||||
[users]
|
|
||||||
allow_sign_up = false
|
|
||||||
|
|
||||||
[auth.anonymous]
|
|
||||||
enabled = true
|
|
||||||
org_role = Viewer
|
|
||||||
|
|
||||||
[dashboards]
|
|
||||||
default_home_dashboard_path = /var/lib/grafana/dashboards/homelab-overview.json
|
|
||||||
|
|
||||||
[unified_alerting]
|
|
||||||
enabled = true
|
|
||||||
|
|
||||||
[feature_toggles]
|
|
||||||
enable = traceqlEditor tempoServiceGraph traceQLStreaming
|
|
||||||
@@ -1,356 +0,0 @@
|
|||||||
{
|
|
||||||
"annotations": {
|
|
||||||
"list": []
|
|
||||||
},
|
|
||||||
"editable": true,
|
|
||||||
"fiscalYearStartMonth": 0,
|
|
||||||
"graphTooltip": 0,
|
|
||||||
"id": null,
|
|
||||||
"links": [],
|
|
||||||
"panels": [
|
|
||||||
{
|
|
||||||
"datasource": {
|
|
||||||
"type": "loki",
|
|
||||||
"uid": "loki"
|
|
||||||
},
|
|
||||||
"gridPos": {
|
|
||||||
"h": 4,
|
|
||||||
"w": 24,
|
|
||||||
"x": 0,
|
|
||||||
"y": 0
|
|
||||||
},
|
|
||||||
"id": 1,
|
|
||||||
"options": {
|
|
||||||
"dedupStrategy": "none",
|
|
||||||
"enableLogDetails": true,
|
|
||||||
"prettifyLogMessage": false,
|
|
||||||
"showCommonLabels": false,
|
|
||||||
"showLabels": false,
|
|
||||||
"showTime": true,
|
|
||||||
"sortOrder": "Descending",
|
|
||||||
"wrapLogMessage": false
|
|
||||||
},
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"datasource": {
|
|
||||||
"type": "loki",
|
|
||||||
"uid": "loki"
|
|
||||||
},
|
|
||||||
"editorMode": "builder",
|
|
||||||
"expr": "{job=\"containerlogs\"} |= ``",
|
|
||||||
"queryType": "range",
|
|
||||||
"refId": "A"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "All Container Logs",
|
|
||||||
"type": "logs"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"datasource": {
|
|
||||||
"type": "loki",
|
|
||||||
"uid": "loki"
|
|
||||||
},
|
|
||||||
"gridPos": {
|
|
||||||
"h": 6,
|
|
||||||
"w": 12,
|
|
||||||
"x": 0,
|
|
||||||
"y": 4
|
|
||||||
},
|
|
||||||
"id": 2,
|
|
||||||
"options": {
|
|
||||||
"dedupStrategy": "none",
|
|
||||||
"enableLogDetails": true,
|
|
||||||
"prettifyLogMessage": false,
|
|
||||||
"showCommonLabels": false,
|
|
||||||
"showLabels": true,
|
|
||||||
"showTime": true,
|
|
||||||
"sortOrder": "Descending",
|
|
||||||
"wrapLogMessage": false
|
|
||||||
},
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"datasource": {
|
|
||||||
"type": "loki",
|
|
||||||
"uid": "loki"
|
|
||||||
},
|
|
||||||
"editorMode": "code",
|
|
||||||
"expr": "{container_name=~\"gitea.*\"} |= ``",
|
|
||||||
"queryType": "range",
|
|
||||||
"refId": "A"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Git & CI Logs",
|
|
||||||
"type": "logs"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"datasource": {
|
|
||||||
"type": "loki",
|
|
||||||
"uid": "loki"
|
|
||||||
},
|
|
||||||
"gridPos": {
|
|
||||||
"h": 6,
|
|
||||||
"w": 12,
|
|
||||||
"x": 12,
|
|
||||||
"y": 4
|
|
||||||
},
|
|
||||||
"id": 3,
|
|
||||||
"options": {
|
|
||||||
"dedupStrategy": "none",
|
|
||||||
"enableLogDetails": true,
|
|
||||||
"prettifyLogMessage": false,
|
|
||||||
"showCommonLabels": false,
|
|
||||||
"showLabels": true,
|
|
||||||
"showTime": true,
|
|
||||||
"sortOrder": "Descending",
|
|
||||||
"wrapLogMessage": false
|
|
||||||
},
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"datasource": {
|
|
||||||
"type": "loki",
|
|
||||||
"uid": "loki"
|
|
||||||
},
|
|
||||||
"editorMode": "code",
|
|
||||||
"expr": "{container_name=~\"nessie|trino\"} |= ``",
|
|
||||||
"queryType": "range",
|
|
||||||
"refId": "A"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Data Lake Logs",
|
|
||||||
"type": "logs"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"datasource": {
|
|
||||||
"type": "loki",
|
|
||||||
"uid": "loki"
|
|
||||||
},
|
|
||||||
"gridPos": {
|
|
||||||
"h": 6,
|
|
||||||
"w": 12,
|
|
||||||
"x": 0,
|
|
||||||
"y": 10
|
|
||||||
},
|
|
||||||
"id": 4,
|
|
||||||
"options": {
|
|
||||||
"dedupStrategy": "none",
|
|
||||||
"enableLogDetails": true,
|
|
||||||
"prettifyLogMessage": false,
|
|
||||||
"showCommonLabels": false,
|
|
||||||
"showLabels": true,
|
|
||||||
"showTime": true,
|
|
||||||
"sortOrder": "Descending",
|
|
||||||
"wrapLogMessage": false
|
|
||||||
},
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"datasource": {
|
|
||||||
"type": "loki",
|
|
||||||
"uid": "loki"
|
|
||||||
},
|
|
||||||
"editorMode": "code",
|
|
||||||
"expr": "{container_name=~\"postgres|rustfs\"} |= ``",
|
|
||||||
"queryType": "range",
|
|
||||||
"refId": "A"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Storage Logs",
|
|
||||||
"type": "logs"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"datasource": {
|
|
||||||
"type": "loki",
|
|
||||||
"uid": "loki"
|
|
||||||
},
|
|
||||||
"gridPos": {
|
|
||||||
"h": 6,
|
|
||||||
"w": 12,
|
|
||||||
"x": 12,
|
|
||||||
"y": 10
|
|
||||||
},
|
|
||||||
"id": 5,
|
|
||||||
"options": {
|
|
||||||
"dedupStrategy": "none",
|
|
||||||
"enableLogDetails": true,
|
|
||||||
"prettifyLogMessage": false,
|
|
||||||
"showCommonLabels": false,
|
|
||||||
"showLabels": true,
|
|
||||||
"showTime": true,
|
|
||||||
"sortOrder": "Descending",
|
|
||||||
"wrapLogMessage": false
|
|
||||||
},
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"datasource": {
|
|
||||||
"type": "loki",
|
|
||||||
"uid": "loki"
|
|
||||||
},
|
|
||||||
"editorMode": "code",
|
|
||||||
"expr": "{job=\"containerlogs\"} |~ \"error|Error|ERROR|exception|Exception|EXCEPTION|failed|Failed|FAILED\"",
|
|
||||||
"queryType": "range",
|
|
||||||
"refId": "A"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Errors Across All Services",
|
|
||||||
"type": "logs"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"datasource": {
|
|
||||||
"type": "loki",
|
|
||||||
"uid": "loki"
|
|
||||||
},
|
|
||||||
"fieldConfig": {
|
|
||||||
"defaults": {
|
|
||||||
"color": {
|
|
||||||
"mode": "palette-classic"
|
|
||||||
},
|
|
||||||
"custom": {
|
|
||||||
"axisBorderShow": false,
|
|
||||||
"axisCenteredZero": false,
|
|
||||||
"axisColorMode": "text",
|
|
||||||
"axisLabel": "",
|
|
||||||
"axisPlacement": "auto",
|
|
||||||
"barAlignment": 0,
|
|
||||||
"drawStyle": "bars",
|
|
||||||
"fillOpacity": 50,
|
|
||||||
"gradientMode": "none",
|
|
||||||
"hideFrom": {
|
|
||||||
"legend": false,
|
|
||||||
"tooltip": false,
|
|
||||||
"viz": false
|
|
||||||
},
|
|
||||||
"insertNulls": false,
|
|
||||||
"lineInterpolation": "linear",
|
|
||||||
"lineWidth": 1,
|
|
||||||
"pointSize": 5,
|
|
||||||
"scaleDistribution": {
|
|
||||||
"type": "linear"
|
|
||||||
},
|
|
||||||
"showPoints": "auto",
|
|
||||||
"spanNulls": false,
|
|
||||||
"stacking": {
|
|
||||||
"group": "A",
|
|
||||||
"mode": "normal"
|
|
||||||
},
|
|
||||||
"thresholdsStyle": {
|
|
||||||
"mode": "off"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"mappings": [],
|
|
||||||
"thresholds": {
|
|
||||||
"mode": "absolute",
|
|
||||||
"steps": [
|
|
||||||
{
|
|
||||||
"color": "green",
|
|
||||||
"value": null
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"unit": "short"
|
|
||||||
},
|
|
||||||
"overrides": []
|
|
||||||
},
|
|
||||||
"gridPos": {
|
|
||||||
"h": 6,
|
|
||||||
"w": 24,
|
|
||||||
"x": 0,
|
|
||||||
"y": 16
|
|
||||||
},
|
|
||||||
"id": 6,
|
|
||||||
"options": {
|
|
||||||
"legend": {
|
|
||||||
"calcs": [],
|
|
||||||
"displayMode": "list",
|
|
||||||
"placement": "bottom",
|
|
||||||
"showLegend": true
|
|
||||||
},
|
|
||||||
"tooltip": {
|
|
||||||
"mode": "single",
|
|
||||||
"sort": "none"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"datasource": {
|
|
||||||
"type": "loki",
|
|
||||||
"uid": "loki"
|
|
||||||
},
|
|
||||||
"editorMode": "code",
|
|
||||||
"expr": "sum by (container_name) (count_over_time({job=\"containerlogs\"} [1m]))",
|
|
||||||
"queryType": "range",
|
|
||||||
"refId": "A"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Log Volume by Container",
|
|
||||||
"type": "timeseries"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"datasource": {
|
|
||||||
"type": "jaeger",
|
|
||||||
"uid": "jaeger"
|
|
||||||
},
|
|
||||||
"gridPos": {
|
|
||||||
"h": 8,
|
|
||||||
"w": 24,
|
|
||||||
"x": 0,
|
|
||||||
"y": 22
|
|
||||||
},
|
|
||||||
"id": 7,
|
|
||||||
"options": {},
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"datasource": {
|
|
||||||
"type": "jaeger",
|
|
||||||
"uid": "jaeger"
|
|
||||||
},
|
|
||||||
"queryType": "search",
|
|
||||||
"refId": "A",
|
|
||||||
"service": "$service",
|
|
||||||
"limit": 20
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Recent Traces",
|
|
||||||
"type": "traces"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"refresh": "5s",
|
|
||||||
"schemaVersion": 39,
|
|
||||||
"tags": ["homelab", "observability"],
|
|
||||||
"templating": {
|
|
||||||
"list": [
|
|
||||||
{
|
|
||||||
"current": {
|
|
||||||
"selected": true,
|
|
||||||
"text": "nessie",
|
|
||||||
"value": "nessie"
|
|
||||||
},
|
|
||||||
"datasource": {
|
|
||||||
"type": "jaeger",
|
|
||||||
"uid": "jaeger"
|
|
||||||
},
|
|
||||||
"definition": "services",
|
|
||||||
"hide": 0,
|
|
||||||
"includeAll": false,
|
|
||||||
"label": "Service",
|
|
||||||
"multi": false,
|
|
||||||
"name": "service",
|
|
||||||
"options": [],
|
|
||||||
"query": "services",
|
|
||||||
"refresh": 1,
|
|
||||||
"regex": "",
|
|
||||||
"skipUrlSync": false,
|
|
||||||
"sort": 1,
|
|
||||||
"type": "query"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"time": {
|
|
||||||
"from": "now-1h",
|
|
||||||
"to": "now"
|
|
||||||
},
|
|
||||||
"timepicker": {},
|
|
||||||
"timezone": "browser",
|
|
||||||
"title": "Homelab Overview",
|
|
||||||
"uid": "homelab-overview",
|
|
||||||
"version": 1,
|
|
||||||
"weekStart": ""
|
|
||||||
}
|
|
||||||
@@ -1,652 +0,0 @@
|
|||||||
{
|
|
||||||
"annotations": {
|
|
||||||
"list": []
|
|
||||||
},
|
|
||||||
"editable": true,
|
|
||||||
"fiscalYearStartMonth": 0,
|
|
||||||
"graphTooltip": 1,
|
|
||||||
"links": [],
|
|
||||||
"panels": [
|
|
||||||
{
|
|
||||||
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 },
|
|
||||||
"id": 100,
|
|
||||||
"title": "Overview",
|
|
||||||
"type": "row"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"fieldConfig": {
|
|
||||||
"defaults": {
|
|
||||||
"color": { "mode": "palette-classic" },
|
|
||||||
"mappings": [],
|
|
||||||
"thresholds": {
|
|
||||||
"mode": "absolute",
|
|
||||||
"steps": [
|
|
||||||
{ "color": "green", "value": null }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"unit": "reqps"
|
|
||||||
},
|
|
||||||
"overrides": []
|
|
||||||
},
|
|
||||||
"gridPos": { "h": 4, "w": 6, "x": 0, "y": 1 },
|
|
||||||
"id": 1,
|
|
||||||
"options": {
|
|
||||||
"colorMode": "value",
|
|
||||||
"graphMode": "area",
|
|
||||||
"justifyMode": "auto",
|
|
||||||
"orientation": "auto",
|
|
||||||
"reduceOptions": {
|
|
||||||
"calcs": ["lastNotNull"],
|
|
||||||
"fields": "",
|
|
||||||
"values": false
|
|
||||||
},
|
|
||||||
"textMode": "auto"
|
|
||||||
},
|
|
||||||
"pluginVersion": "10.0.0",
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"expr": "sum(rate(traefik_entrypoint_requests_total[5m]))",
|
|
||||||
"refId": "A"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Requests / sec",
|
|
||||||
"type": "stat"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"fieldConfig": {
|
|
||||||
"defaults": {
|
|
||||||
"color": { "mode": "palette-classic" },
|
|
||||||
"mappings": [],
|
|
||||||
"thresholds": {
|
|
||||||
"mode": "absolute",
|
|
||||||
"steps": [
|
|
||||||
{ "color": "green", "value": null }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"unit": "short"
|
|
||||||
},
|
|
||||||
"overrides": []
|
|
||||||
},
|
|
||||||
"gridPos": { "h": 4, "w": 6, "x": 6, "y": 1 },
|
|
||||||
"id": 2,
|
|
||||||
"options": {
|
|
||||||
"colorMode": "value",
|
|
||||||
"graphMode": "area",
|
|
||||||
"justifyMode": "auto",
|
|
||||||
"orientation": "auto",
|
|
||||||
"reduceOptions": {
|
|
||||||
"calcs": ["lastNotNull"],
|
|
||||||
"fields": "",
|
|
||||||
"values": false
|
|
||||||
},
|
|
||||||
"textMode": "auto"
|
|
||||||
},
|
|
||||||
"pluginVersion": "10.0.0",
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"expr": "sum(traefik_open_connections)",
|
|
||||||
"refId": "A"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Open Connections",
|
|
||||||
"type": "stat"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"fieldConfig": {
|
|
||||||
"defaults": {
|
|
||||||
"color": { "mode": "thresholds" },
|
|
||||||
"mappings": [],
|
|
||||||
"thresholds": {
|
|
||||||
"mode": "absolute",
|
|
||||||
"steps": [
|
|
||||||
{ "color": "green", "value": null },
|
|
||||||
{ "color": "yellow", "value": 0.01 },
|
|
||||||
{ "color": "red", "value": 0.05 }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"unit": "percentunit"
|
|
||||||
},
|
|
||||||
"overrides": []
|
|
||||||
},
|
|
||||||
"gridPos": { "h": 4, "w": 6, "x": 12, "y": 1 },
|
|
||||||
"id": 3,
|
|
||||||
"options": {
|
|
||||||
"colorMode": "value",
|
|
||||||
"graphMode": "area",
|
|
||||||
"justifyMode": "auto",
|
|
||||||
"orientation": "auto",
|
|
||||||
"reduceOptions": {
|
|
||||||
"calcs": ["lastNotNull"],
|
|
||||||
"fields": "",
|
|
||||||
"values": false
|
|
||||||
},
|
|
||||||
"textMode": "auto"
|
|
||||||
},
|
|
||||||
"pluginVersion": "10.0.0",
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"expr": "sum(rate(traefik_entrypoint_requests_total{code=~\"5..\"}[5m])) / sum(rate(traefik_entrypoint_requests_total[5m])) or vector(0)",
|
|
||||||
"refId": "A"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Error Rate (5xx)",
|
|
||||||
"type": "stat"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"fieldConfig": {
|
|
||||||
"defaults": {
|
|
||||||
"color": { "mode": "palette-classic" },
|
|
||||||
"mappings": [],
|
|
||||||
"thresholds": {
|
|
||||||
"mode": "absolute",
|
|
||||||
"steps": [
|
|
||||||
{ "color": "green", "value": null }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"unit": "s"
|
|
||||||
},
|
|
||||||
"overrides": []
|
|
||||||
},
|
|
||||||
"gridPos": { "h": 4, "w": 6, "x": 18, "y": 1 },
|
|
||||||
"id": 4,
|
|
||||||
"options": {
|
|
||||||
"colorMode": "value",
|
|
||||||
"graphMode": "area",
|
|
||||||
"justifyMode": "auto",
|
|
||||||
"orientation": "auto",
|
|
||||||
"reduceOptions": {
|
|
||||||
"calcs": ["lastNotNull"],
|
|
||||||
"fields": "",
|
|
||||||
"values": false
|
|
||||||
},
|
|
||||||
"textMode": "auto"
|
|
||||||
},
|
|
||||||
"pluginVersion": "10.0.0",
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"expr": "histogram_quantile(0.95, sum(rate(traefik_entrypoint_request_duration_seconds_bucket[5m])) by (le))",
|
|
||||||
"refId": "A"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "P95 Latency",
|
|
||||||
"type": "stat"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 5 },
|
|
||||||
"id": 101,
|
|
||||||
"title": "Requests",
|
|
||||||
"type": "row"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"fieldConfig": {
|
|
||||||
"defaults": {
|
|
||||||
"color": { "mode": "palette-classic" },
|
|
||||||
"custom": {
|
|
||||||
"axisBorderShow": false,
|
|
||||||
"axisCenteredZero": false,
|
|
||||||
"axisColorMode": "text",
|
|
||||||
"axisLabel": "",
|
|
||||||
"axisPlacement": "auto",
|
|
||||||
"barAlignment": 0,
|
|
||||||
"drawStyle": "line",
|
|
||||||
"fillOpacity": 20,
|
|
||||||
"gradientMode": "none",
|
|
||||||
"hideFrom": { "legend": false, "tooltip": false, "viz": false },
|
|
||||||
"insertNulls": false,
|
|
||||||
"lineInterpolation": "smooth",
|
|
||||||
"lineWidth": 2,
|
|
||||||
"pointSize": 5,
|
|
||||||
"scaleDistribution": { "type": "linear" },
|
|
||||||
"showPoints": "never",
|
|
||||||
"spanNulls": false,
|
|
||||||
"stacking": { "group": "A", "mode": "none" },
|
|
||||||
"thresholdsStyle": { "mode": "off" }
|
|
||||||
},
|
|
||||||
"mappings": [],
|
|
||||||
"thresholds": {
|
|
||||||
"mode": "absolute",
|
|
||||||
"steps": [{ "color": "green", "value": null }]
|
|
||||||
},
|
|
||||||
"unit": "reqps"
|
|
||||||
},
|
|
||||||
"overrides": []
|
|
||||||
},
|
|
||||||
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 6 },
|
|
||||||
"id": 5,
|
|
||||||
"options": {
|
|
||||||
"legend": { "calcs": ["mean", "max"], "displayMode": "table", "placement": "bottom", "showLegend": true },
|
|
||||||
"tooltip": { "mode": "multi", "sort": "desc" }
|
|
||||||
},
|
|
||||||
"pluginVersion": "10.0.0",
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"expr": "sum(rate(traefik_entrypoint_requests_total[5m])) by (entrypoint)",
|
|
||||||
"legendFormat": "{{entrypoint}}",
|
|
||||||
"refId": "A"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Requests by Entrypoint",
|
|
||||||
"type": "timeseries"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"fieldConfig": {
|
|
||||||
"defaults": {
|
|
||||||
"color": { "mode": "palette-classic" },
|
|
||||||
"custom": {
|
|
||||||
"axisBorderShow": false,
|
|
||||||
"axisCenteredZero": false,
|
|
||||||
"axisColorMode": "text",
|
|
||||||
"axisLabel": "",
|
|
||||||
"axisPlacement": "auto",
|
|
||||||
"barAlignment": 0,
|
|
||||||
"drawStyle": "line",
|
|
||||||
"fillOpacity": 20,
|
|
||||||
"gradientMode": "none",
|
|
||||||
"hideFrom": { "legend": false, "tooltip": false, "viz": false },
|
|
||||||
"insertNulls": false,
|
|
||||||
"lineInterpolation": "smooth",
|
|
||||||
"lineWidth": 2,
|
|
||||||
"pointSize": 5,
|
|
||||||
"scaleDistribution": { "type": "linear" },
|
|
||||||
"showPoints": "never",
|
|
||||||
"spanNulls": false,
|
|
||||||
"stacking": { "group": "A", "mode": "normal" },
|
|
||||||
"thresholdsStyle": { "mode": "off" }
|
|
||||||
},
|
|
||||||
"mappings": [],
|
|
||||||
"thresholds": {
|
|
||||||
"mode": "absolute",
|
|
||||||
"steps": [{ "color": "green", "value": null }]
|
|
||||||
},
|
|
||||||
"unit": "reqps"
|
|
||||||
},
|
|
||||||
"overrides": [
|
|
||||||
{ "matcher": { "id": "byRegexp", "options": "2.." }, "properties": [{ "id": "color", "value": { "fixedColor": "green", "mode": "fixed" } }] },
|
|
||||||
{ "matcher": { "id": "byRegexp", "options": "3.." }, "properties": [{ "id": "color", "value": { "fixedColor": "blue", "mode": "fixed" } }] },
|
|
||||||
{ "matcher": { "id": "byRegexp", "options": "4.." }, "properties": [{ "id": "color", "value": { "fixedColor": "yellow", "mode": "fixed" } }] },
|
|
||||||
{ "matcher": { "id": "byRegexp", "options": "5.." }, "properties": [{ "id": "color", "value": { "fixedColor": "red", "mode": "fixed" } }] }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 6 },
|
|
||||||
"id": 6,
|
|
||||||
"options": {
|
|
||||||
"legend": { "calcs": ["mean", "max"], "displayMode": "table", "placement": "bottom", "showLegend": true },
|
|
||||||
"tooltip": { "mode": "multi", "sort": "desc" }
|
|
||||||
},
|
|
||||||
"pluginVersion": "10.0.0",
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"expr": "sum(rate(traefik_entrypoint_requests_total[5m])) by (code)",
|
|
||||||
"legendFormat": "{{code}}",
|
|
||||||
"refId": "A"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Requests by Status Code",
|
|
||||||
"type": "timeseries"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 14 },
|
|
||||||
"id": 102,
|
|
||||||
"title": "Services",
|
|
||||||
"type": "row"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"fieldConfig": {
|
|
||||||
"defaults": {
|
|
||||||
"color": { "mode": "palette-classic" },
|
|
||||||
"custom": {
|
|
||||||
"axisBorderShow": false,
|
|
||||||
"axisCenteredZero": false,
|
|
||||||
"axisColorMode": "text",
|
|
||||||
"axisLabel": "",
|
|
||||||
"axisPlacement": "auto",
|
|
||||||
"barAlignment": 0,
|
|
||||||
"drawStyle": "line",
|
|
||||||
"fillOpacity": 20,
|
|
||||||
"gradientMode": "none",
|
|
||||||
"hideFrom": { "legend": false, "tooltip": false, "viz": false },
|
|
||||||
"insertNulls": false,
|
|
||||||
"lineInterpolation": "smooth",
|
|
||||||
"lineWidth": 2,
|
|
||||||
"pointSize": 5,
|
|
||||||
"scaleDistribution": { "type": "linear" },
|
|
||||||
"showPoints": "never",
|
|
||||||
"spanNulls": false,
|
|
||||||
"stacking": { "group": "A", "mode": "none" },
|
|
||||||
"thresholdsStyle": { "mode": "off" }
|
|
||||||
},
|
|
||||||
"mappings": [],
|
|
||||||
"thresholds": {
|
|
||||||
"mode": "absolute",
|
|
||||||
"steps": [{ "color": "green", "value": null }]
|
|
||||||
},
|
|
||||||
"unit": "reqps"
|
|
||||||
},
|
|
||||||
"overrides": []
|
|
||||||
},
|
|
||||||
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 15 },
|
|
||||||
"id": 7,
|
|
||||||
"options": {
|
|
||||||
"legend": { "calcs": ["mean", "max"], "displayMode": "table", "placement": "right", "showLegend": true },
|
|
||||||
"tooltip": { "mode": "multi", "sort": "desc" }
|
|
||||||
},
|
|
||||||
"pluginVersion": "10.0.0",
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"expr": "sum(rate(traefik_service_requests_total[5m])) by (service)",
|
|
||||||
"legendFormat": "{{service}}",
|
|
||||||
"refId": "A"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Requests by Service",
|
|
||||||
"type": "timeseries"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"fieldConfig": {
|
|
||||||
"defaults": {
|
|
||||||
"color": { "mode": "palette-classic" },
|
|
||||||
"custom": {
|
|
||||||
"axisBorderShow": false,
|
|
||||||
"axisCenteredZero": false,
|
|
||||||
"axisColorMode": "text",
|
|
||||||
"axisLabel": "",
|
|
||||||
"axisPlacement": "auto",
|
|
||||||
"barAlignment": 0,
|
|
||||||
"drawStyle": "line",
|
|
||||||
"fillOpacity": 20,
|
|
||||||
"gradientMode": "none",
|
|
||||||
"hideFrom": { "legend": false, "tooltip": false, "viz": false },
|
|
||||||
"insertNulls": false,
|
|
||||||
"lineInterpolation": "smooth",
|
|
||||||
"lineWidth": 2,
|
|
||||||
"pointSize": 5,
|
|
||||||
"scaleDistribution": { "type": "linear" },
|
|
||||||
"showPoints": "never",
|
|
||||||
"spanNulls": false,
|
|
||||||
"stacking": { "group": "A", "mode": "none" },
|
|
||||||
"thresholdsStyle": { "mode": "off" }
|
|
||||||
},
|
|
||||||
"mappings": [],
|
|
||||||
"thresholds": {
|
|
||||||
"mode": "absolute",
|
|
||||||
"steps": [{ "color": "green", "value": null }]
|
|
||||||
},
|
|
||||||
"unit": "s"
|
|
||||||
},
|
|
||||||
"overrides": []
|
|
||||||
},
|
|
||||||
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 15 },
|
|
||||||
"id": 8,
|
|
||||||
"options": {
|
|
||||||
"legend": { "calcs": ["mean", "max"], "displayMode": "table", "placement": "right", "showLegend": true },
|
|
||||||
"tooltip": { "mode": "multi", "sort": "desc" }
|
|
||||||
},
|
|
||||||
"pluginVersion": "10.0.0",
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"expr": "histogram_quantile(0.95, sum(rate(traefik_service_request_duration_seconds_bucket[5m])) by (le, service))",
|
|
||||||
"legendFormat": "{{service}}",
|
|
||||||
"refId": "A"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "P95 Latency by Service",
|
|
||||||
"type": "timeseries"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 23 },
|
|
||||||
"id": 103,
|
|
||||||
"title": "Routers",
|
|
||||||
"type": "row"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"fieldConfig": {
|
|
||||||
"defaults": {
|
|
||||||
"color": { "mode": "palette-classic" },
|
|
||||||
"custom": {
|
|
||||||
"axisBorderShow": false,
|
|
||||||
"axisCenteredZero": false,
|
|
||||||
"axisColorMode": "text",
|
|
||||||
"axisLabel": "",
|
|
||||||
"axisPlacement": "auto",
|
|
||||||
"barAlignment": 0,
|
|
||||||
"drawStyle": "line",
|
|
||||||
"fillOpacity": 20,
|
|
||||||
"gradientMode": "none",
|
|
||||||
"hideFrom": { "legend": false, "tooltip": false, "viz": false },
|
|
||||||
"insertNulls": false,
|
|
||||||
"lineInterpolation": "smooth",
|
|
||||||
"lineWidth": 2,
|
|
||||||
"pointSize": 5,
|
|
||||||
"scaleDistribution": { "type": "linear" },
|
|
||||||
"showPoints": "never",
|
|
||||||
"spanNulls": false,
|
|
||||||
"stacking": { "group": "A", "mode": "none" },
|
|
||||||
"thresholdsStyle": { "mode": "off" }
|
|
||||||
},
|
|
||||||
"mappings": [],
|
|
||||||
"thresholds": {
|
|
||||||
"mode": "absolute",
|
|
||||||
"steps": [{ "color": "green", "value": null }]
|
|
||||||
},
|
|
||||||
"unit": "reqps"
|
|
||||||
},
|
|
||||||
"overrides": []
|
|
||||||
},
|
|
||||||
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 24 },
|
|
||||||
"id": 9,
|
|
||||||
"options": {
|
|
||||||
"legend": { "calcs": ["mean", "max"], "displayMode": "table", "placement": "right", "showLegend": true },
|
|
||||||
"tooltip": { "mode": "multi", "sort": "desc" }
|
|
||||||
},
|
|
||||||
"pluginVersion": "10.0.0",
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"expr": "sum(rate(traefik_router_requests_total[5m])) by (router)",
|
|
||||||
"legendFormat": "{{router}}",
|
|
||||||
"refId": "A"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Requests by Router",
|
|
||||||
"type": "timeseries"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"fieldConfig": {
|
|
||||||
"defaults": {
|
|
||||||
"color": { "mode": "palette-classic" },
|
|
||||||
"custom": {
|
|
||||||
"axisBorderShow": false,
|
|
||||||
"axisCenteredZero": false,
|
|
||||||
"axisColorMode": "text",
|
|
||||||
"axisLabel": "",
|
|
||||||
"axisPlacement": "auto",
|
|
||||||
"barAlignment": 0,
|
|
||||||
"drawStyle": "line",
|
|
||||||
"fillOpacity": 20,
|
|
||||||
"gradientMode": "none",
|
|
||||||
"hideFrom": { "legend": false, "tooltip": false, "viz": false },
|
|
||||||
"insertNulls": false,
|
|
||||||
"lineInterpolation": "smooth",
|
|
||||||
"lineWidth": 2,
|
|
||||||
"pointSize": 5,
|
|
||||||
"scaleDistribution": { "type": "linear" },
|
|
||||||
"showPoints": "never",
|
|
||||||
"spanNulls": false,
|
|
||||||
"stacking": { "group": "A", "mode": "none" },
|
|
||||||
"thresholdsStyle": { "mode": "off" }
|
|
||||||
},
|
|
||||||
"mappings": [],
|
|
||||||
"thresholds": {
|
|
||||||
"mode": "absolute",
|
|
||||||
"steps": [{ "color": "green", "value": null }]
|
|
||||||
},
|
|
||||||
"unit": "s"
|
|
||||||
},
|
|
||||||
"overrides": []
|
|
||||||
},
|
|
||||||
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 24 },
|
|
||||||
"id": 10,
|
|
||||||
"options": {
|
|
||||||
"legend": { "calcs": ["mean", "max"], "displayMode": "table", "placement": "right", "showLegend": true },
|
|
||||||
"tooltip": { "mode": "multi", "sort": "desc" }
|
|
||||||
},
|
|
||||||
"pluginVersion": "10.0.0",
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"expr": "histogram_quantile(0.95, sum(rate(traefik_router_request_duration_seconds_bucket[5m])) by (le, router))",
|
|
||||||
"legendFormat": "{{router}}",
|
|
||||||
"refId": "A"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "P95 Latency by Router",
|
|
||||||
"type": "timeseries"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 32 },
|
|
||||||
"id": 104,
|
|
||||||
"title": "Bandwidth",
|
|
||||||
"type": "row"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"fieldConfig": {
|
|
||||||
"defaults": {
|
|
||||||
"color": { "mode": "palette-classic" },
|
|
||||||
"custom": {
|
|
||||||
"axisBorderShow": false,
|
|
||||||
"axisCenteredZero": false,
|
|
||||||
"axisColorMode": "text",
|
|
||||||
"axisLabel": "",
|
|
||||||
"axisPlacement": "auto",
|
|
||||||
"barAlignment": 0,
|
|
||||||
"drawStyle": "line",
|
|
||||||
"fillOpacity": 20,
|
|
||||||
"gradientMode": "none",
|
|
||||||
"hideFrom": { "legend": false, "tooltip": false, "viz": false },
|
|
||||||
"insertNulls": false,
|
|
||||||
"lineInterpolation": "smooth",
|
|
||||||
"lineWidth": 2,
|
|
||||||
"pointSize": 5,
|
|
||||||
"scaleDistribution": { "type": "linear" },
|
|
||||||
"showPoints": "never",
|
|
||||||
"spanNulls": false,
|
|
||||||
"stacking": { "group": "A", "mode": "none" },
|
|
||||||
"thresholdsStyle": { "mode": "off" }
|
|
||||||
},
|
|
||||||
"mappings": [],
|
|
||||||
"thresholds": {
|
|
||||||
"mode": "absolute",
|
|
||||||
"steps": [{ "color": "green", "value": null }]
|
|
||||||
},
|
|
||||||
"unit": "Bps"
|
|
||||||
},
|
|
||||||
"overrides": []
|
|
||||||
},
|
|
||||||
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 33 },
|
|
||||||
"id": 11,
|
|
||||||
"options": {
|
|
||||||
"legend": { "calcs": ["mean", "max"], "displayMode": "table", "placement": "bottom", "showLegend": true },
|
|
||||||
"tooltip": { "mode": "multi", "sort": "desc" }
|
|
||||||
},
|
|
||||||
"pluginVersion": "10.0.0",
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"expr": "sum(rate(traefik_entrypoint_requests_bytes_total[5m])) by (entrypoint)",
|
|
||||||
"legendFormat": "{{entrypoint}} in",
|
|
||||||
"refId": "A"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"expr": "sum(rate(traefik_entrypoint_responses_bytes_total[5m])) by (entrypoint)",
|
|
||||||
"legendFormat": "{{entrypoint}} out",
|
|
||||||
"refId": "B"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Bandwidth by Entrypoint",
|
|
||||||
"type": "timeseries"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"fieldConfig": {
|
|
||||||
"defaults": {
|
|
||||||
"color": { "mode": "palette-classic" },
|
|
||||||
"custom": {
|
|
||||||
"axisBorderShow": false,
|
|
||||||
"axisCenteredZero": false,
|
|
||||||
"axisColorMode": "text",
|
|
||||||
"axisLabel": "",
|
|
||||||
"axisPlacement": "auto",
|
|
||||||
"barAlignment": 0,
|
|
||||||
"drawStyle": "line",
|
|
||||||
"fillOpacity": 20,
|
|
||||||
"gradientMode": "none",
|
|
||||||
"hideFrom": { "legend": false, "tooltip": false, "viz": false },
|
|
||||||
"insertNulls": false,
|
|
||||||
"lineInterpolation": "smooth",
|
|
||||||
"lineWidth": 2,
|
|
||||||
"pointSize": 5,
|
|
||||||
"scaleDistribution": { "type": "linear" },
|
|
||||||
"showPoints": "never",
|
|
||||||
"spanNulls": false,
|
|
||||||
"stacking": { "group": "A", "mode": "none" },
|
|
||||||
"thresholdsStyle": { "mode": "off" }
|
|
||||||
},
|
|
||||||
"mappings": [],
|
|
||||||
"thresholds": {
|
|
||||||
"mode": "absolute",
|
|
||||||
"steps": [{ "color": "green", "value": null }]
|
|
||||||
},
|
|
||||||
"unit": "short"
|
|
||||||
},
|
|
||||||
"overrides": []
|
|
||||||
},
|
|
||||||
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 33 },
|
|
||||||
"id": 12,
|
|
||||||
"options": {
|
|
||||||
"legend": { "calcs": ["mean", "max"], "displayMode": "table", "placement": "bottom", "showLegend": true },
|
|
||||||
"tooltip": { "mode": "multi", "sort": "desc" }
|
|
||||||
},
|
|
||||||
"pluginVersion": "10.0.0",
|
|
||||||
"targets": [
|
|
||||||
{
|
|
||||||
"datasource": { "type": "prometheus", "uid": "prometheus" },
|
|
||||||
"expr": "sum(traefik_open_connections) by (entrypoint, protocol)",
|
|
||||||
"legendFormat": "{{entrypoint}} ({{protocol}})",
|
|
||||||
"refId": "A"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"title": "Open Connections",
|
|
||||||
"type": "timeseries"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"refresh": "30s",
|
|
||||||
"schemaVersion": 38,
|
|
||||||
"tags": ["traefik", "proxy"],
|
|
||||||
"templating": { "list": [] },
|
|
||||||
"time": { "from": "now-1h", "to": "now" },
|
|
||||||
"timepicker": {},
|
|
||||||
"timezone": "browser",
|
|
||||||
"title": "Traefik",
|
|
||||||
"uid": "traefik",
|
|
||||||
"version": 1
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
apiVersion: 1
|
|
||||||
|
|
||||||
providers:
|
|
||||||
- name: 'Homelab Dashboards'
|
|
||||||
orgId: 1
|
|
||||||
folder: 'Homelab'
|
|
||||||
folderUid: 'homelab'
|
|
||||||
type: file
|
|
||||||
disableDeletion: false
|
|
||||||
updateIntervalSeconds: 30
|
|
||||||
allowUiUpdates: true
|
|
||||||
options:
|
|
||||||
path: /var/lib/grafana/dashboards
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
apiVersion: 1
|
|
||||||
|
|
||||||
deleteDatasources:
|
|
||||||
- name: Loki
|
|
||||||
orgId: 1
|
|
||||||
- name: Prometheus
|
|
||||||
orgId: 1
|
|
||||||
- name: Jaeger
|
|
||||||
orgId: 1
|
|
||||||
|
|
||||||
datasources:
|
|
||||||
- name: Loki
|
|
||||||
type: loki
|
|
||||||
uid: loki
|
|
||||||
access: proxy
|
|
||||||
url: http://loki:3100
|
|
||||||
isDefault: true
|
|
||||||
editable: true
|
|
||||||
|
|
||||||
- name: Prometheus
|
|
||||||
type: prometheus
|
|
||||||
uid: prometheus
|
|
||||||
access: proxy
|
|
||||||
url: http://prometheus:9090
|
|
||||||
editable: true
|
|
||||||
|
|
||||||
- name: Jaeger
|
|
||||||
type: jaeger
|
|
||||||
uid: jaeger
|
|
||||||
access: proxy
|
|
||||||
url: http://jaeger:16686
|
|
||||||
editable: true
|
|
||||||
@@ -370,11 +370,11 @@
|
|||||||
<div class="stripe"></div>
|
<div class="stripe"></div>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a data-subdomain="jaeger" target="_blank" class="tile metrics">
|
<a data-subdomain="tempo" target="_blank" class="tile metrics">
|
||||||
<span class="status-dot"></span>
|
<span class="status-dot"></span>
|
||||||
<span class="icon">👁</span>
|
<span class="icon">👁</span>
|
||||||
<div class="tile-eyebrow">Tracing</div>
|
<div class="tile-eyebrow">Tracing</div>
|
||||||
<div class="tile-title">Jaeger</div>
|
<div class="tile-title">Tempo</div>
|
||||||
<p class="tile-desc">Distributed tracing for microservices</p>
|
<p class="tile-desc">Distributed tracing for microservices</p>
|
||||||
<span class="tile-port"></span>
|
<span class="tile-port"></span>
|
||||||
<div class="stripe"></div>
|
<div class="stripe"></div>
|
||||||
|
|||||||
@@ -135,11 +135,11 @@
|
|||||||
<div class="stripe"></div>
|
<div class="stripe"></div>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a data-subdomain="jaeger" target="_blank" class="tile metrics">
|
<a data-subdomain="tempo" target="_blank" class="tile metrics">
|
||||||
<span class="status"></span>
|
<span class="status"></span>
|
||||||
<span class="icon">👁</span>
|
<span class="icon">👁</span>
|
||||||
<div class="tile-eyebrow">Tracing</div>
|
<div class="tile-eyebrow">Tracing</div>
|
||||||
<div class="tile-title">Jaeger</div>
|
<div class="tile-title">Tempo</div>
|
||||||
<p class="tile-desc">Distributed tracing for microservices</p>
|
<p class="tile-desc">Distributed tracing for microservices</p>
|
||||||
<span class="tile-port"></span>
|
<span class="tile-port"></span>
|
||||||
<div class="stripe"></div>
|
<div class="stripe"></div>
|
||||||
|
|||||||
Reference in New Issue
Block a user