diff --git a/default-environment.env b/default-environment.env index b8ef1f5..b411d36 100644 --- a/default-environment.env +++ b/default-environment.env @@ -63,3 +63,10 @@ PORTAINER_GODEBUG=netdns=cgo DOCKER_SOCKET_PROXY_HOST=tcp://docker-socket-proxy:2375 DOCKER_SOCKET_PROXY_LOG_LEVEL=debug NODE_COMPOSE_ROOT=/compose + +# mTLS bridge +MTLS_BRIDGE_LOG_LEVEL=DEBUG +MTLS_BRIDGE_TIMEOUT=5 +MTLS_BRIDGE_CLIENT_KEY=/certs/clients/office-pc/office-pc.key +MTLS_BRIDGE_CLIENT_CERT=/certs/clients/office-pc/office-pc.crt +MTLS_BRIDGE_TARGET_URL=http://node-red:1880/docker-update-lockouts/clear diff --git a/docs/prometheus-inventory.md b/docs/prometheus-inventory.md index 494a93d..8c8a84d 100644 --- a/docs/prometheus-inventory.md +++ b/docs/prometheus-inventory.md @@ -1,38 +1,125 @@ # Prometheus Runtime Inventory -This document is generated by `scripts/export_prometheus_inventory.py` from Prometheus runtime data. Commit the generated update whenever architecture/runtime inventory changes. +## 1. Overview -## Usage +- Generated at: `2026-04-13T06:36:45Z` +- Prometheus URL: `http://prometheus:9090` +- Total active targets: `19` +- Unhealthy targets: `0` +- Source type: Observed runtime telemetry (not sole source of truth). -Required: +## 2. Scrape jobs -- `PROMETHEUS_URL` +| Job | Observed target count | +| --- | --- | +| container-updates | 2 | +| kuma | 2 | +| node | 7 | +| pihole | 1 | +| prometheus | 1 | +| proxmox-storage | 2 | +| telegraf | 2 | +| traefik | 2 | -Optional: +## 3. Active targets -- `PROMETHEUS_TIMEOUT` (default: `10` seconds) -- `PROMETHEUS_BEARER_TOKEN` -- `PROMETHEUS_USERNAME` -- `PROMETHEUS_PASSWORD` -- `PROMETHEUS_VERIFY_TLS` (default: `true`) +| Job | Instance | Health | Scrape URL | +| --- | --- | --- | --- | +| container-updates | docker-update-exporter:9105 | up | http://docker-update-exporter:9105/metrics | +| container-updates | raspberrypi.tail13f623.ts.net:9105 | up | http://raspberrypi.tail13f623.ts.net:9105/metrics | +| kuma | kuma.lan.ddnsgeek.com | up | http://kuma.lan.ddnsgeek.com/metrics | +| kuma | monitor-kuma:3001 | up | http://monitor-kuma:3001/metrics | +| node | nix-cache:9100 | up | http://nix-cache:9100/metrics | +| node | node-exporter:9100 | up | http://node-exporter:9100/metrics | +| node | pbs.sweet.home:9100 | up | http://pbs.sweet.home:9100/metrics | +| node | pihole:9100 | up | http://pihole:9100/metrics | +| node | pve.sweet.home:9100 | up | http://pve.sweet.home:9100/metrics | +| node | raspberrypi.tail13f623.ts.net:9100 | up | http://raspberrypi.tail13f623.ts.net:9100/metrics | +| node | server:9100 | up | http://server:9100/metrics | +| pihole | pihole-exporter:9617 | up | http://pihole-exporter:9617/metrics | +| prometheus | prometheus:9090 | up | http://prometheus:9090/metrics | +| proxmox-storage | pbs.sweet.home:9102 | up | http://pbs.sweet.home:9102/metrics | +| proxmox-storage | pve.sweet.home:9101 | up | http://pve.sweet.home:9101/metrics | +| telegraf | raspberrypi.tail13f623.ts.net:9273 | up | http://raspberrypi.tail13f623.ts.net:9273/metrics | +| telegraf | telegraf:9273 | up | http://telegraf:9273/metrics | +| traefik | raspberrypi.tail13f623.ts.net:8080 | up | http://raspberrypi.tail13f623.ts.net:8080/metrics | +| traefik | traefik.lan.ddnsgeek.com:8080 | up | http://traefik.lan.ddnsgeek.com:8080/metrics | -Run: +## 4. Unhealthy targets + +| Job | Instance | Health | Last error | +| --- | --- | --- | --- | +| None | | | | + +## 5. Hosts / instances observed + +| Job | Instance | Series count | +| --- | --- | --- | +| container-updates | docker-update-exporter:9105 | 1 | +| container-updates | raspberrypi.tail13f623.ts.net:9105 | 1 | +| kuma | kuma.lan.ddnsgeek.com | 1 | +| kuma | monitor-kuma:3001 | 1 | +| node | nix-cache:9100 | 1 | +| node | node-exporter:9100 | 1 | +| node | pbs.sweet.home:9100 | 1 | +| node | pihole:9100 | 1 | +| node | pve.sweet.home:9100 | 1 | +| node | raspberrypi.tail13f623.ts.net:9100 | 1 | +| node | server:9100 | 1 | +| pihole | pihole-exporter:9617 | 1 | +| prometheus | prometheus:9090 | 1 | +| proxmox-storage | pbs.sweet.home:9102 | 1 | +| proxmox-storage | pve.sweet.home:9101 | 1 | +| telegraf | raspberrypi.tail13f623.ts.net:9273 | 1 | +| telegraf | telegraf:9273 | 1 | +| traefik | raspberrypi.tail13f623.ts.net:8080 | 1 | +| traefik | traefik.lan.ddnsgeek.com:8080 | 1 | + +## 6. Services observed + +| Service | Series count | +| --- | --- | +| | 19 | + +## 7. Network / exposure metadata observed + +| Category | Label | Series count | +| --- | --- | --- | +| network | | 19 | +| exposure | | 19 | +| role | backup | 2 | +| role | cache | 1 | +| role | docker | 6 | +| role | pihole | 2 | +| role | prometheus | 1 | +| role | proxmox | 2 | +| role | raspberrypi | 4 | +| role | server | 1 | +| hypervisor | | 19 | + +## 8. Unknowns / missing metadata + +| Missing label | Targets missing | +| --- | --- | +| exposure | 19 | +| hostname | 19 | +| hypervisor | 19 | +| network | 19 | +| service | 19 | + +Notes: + +- Prometheus runtime data is observational and not authoritative for placement/topology. +- Do not infer Proxmox host placement, VM placement, VLAN layout, or public/internal boundaries without explicit labels or additional inventory sources. + +## 9. Regeneration instructions ```bash export PROMETHEUS_URL="https://prometheus.example.com" +# Optional auth: +# export PROMETHEUS_BEARER_TOKEN="..." +# or export PROMETHEUS_USERNAME="..."; export PROMETHEUS_PASSWORD="..." python3 scripts/export_prometheus_inventory.py --output-dir docs/runtime ``` -## Outputs - -- Raw API snapshots: `docs/runtime/prometheus-targets.json`, query result snapshots, and optional label-query snapshots. -- Normalized inventory: `docs/runtime/prometheus-inventory.json` -- Human summary: `docs/prometheus-inventory.md` (this file) - -## Diagram/Docs pipeline note - -Treat Prometheus data as observed runtime telemetry. Do not infer placement/topology/network boundaries unless labels or other repo sources explicitly provide that information. - -## Status - -Inventory has not been generated in this environment because no `PROMETHEUS_URL` was provided for execution. +This inventory feeds documentation and diagram workflows as an observed-runtime input alongside static repo configuration. diff --git a/docs/runtime/prometheus-inventory.json b/docs/runtime/prometheus-inventory.json new file mode 100644 index 0000000..2f7a523 --- /dev/null +++ b/docs/runtime/prometheus-inventory.json @@ -0,0 +1,519 @@ +{ + "exposures": { + "": 19 + }, + "generated_at": "2026-04-13T06:36:45Z", + "hypervisors": { + "": 19 + }, + "instances": { + "container-updates": { + "docker-update-exporter:9105": 1, + "raspberrypi.tail13f623.ts.net:9105": 1 + }, + "kuma": { + "kuma.lan.ddnsgeek.com": 1, + "monitor-kuma:3001": 1 + }, + "node": { + "nix-cache:9100": 1, + "node-exporter:9100": 1, + "pbs.sweet.home:9100": 1, + "pihole:9100": 1, + "pve.sweet.home:9100": 1, + "raspberrypi.tail13f623.ts.net:9100": 1, + "server:9100": 1 + }, + "pihole": { + "pihole-exporter:9617": 1 + }, + "prometheus": { + "prometheus:9090": 1 + }, + "proxmox-storage": { + "pbs.sweet.home:9102": 1, + "pve.sweet.home:9101": 1 + }, + "telegraf": { + "raspberrypi.tail13f623.ts.net:9273": 1, + "telegraf:9273": 1 + }, + "traefik": { + "raspberrypi.tail13f623.ts.net:8080": 1, + "traefik.lan.ddnsgeek.com:8080": 1 + } + }, + "jobs": { + "container-updates": 2, + "kuma": 2, + "node": 7, + "pihole": 1, + "prometheus": 1, + "proxmox-storage": 2, + "telegraf": 2, + "traefik": 2 + }, + "networks": { + "": 19 + }, + "notes": [ + "The `up` query indicates scrape success from Prometheus perspective only.", + "Use static repository architecture docs and deployment configs with this runtime export for complete diagrams." + ], + "prometheus_url": "http://prometheus:9090", + "query_observations": { + "job_count": 8, + "up_series_count": 19 + }, + "roles": { + "backup": 2, + "cache": 1, + "docker": 6, + "pihole": 2, + "prometheus": 1, + "proxmox": 2, + "raspberrypi": 4, + "server": 1 + }, + "services": { + "": 19 + }, + "targets": [ + { + "discovered_labels": { + "__address__": "docker-update-exporter:9105", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "container-updates", + "role": "docker" + }, + "health": "up", + "instance": "docker-update-exporter:9105", + "job": "container-updates", + "labels": { + "instance": "docker-update-exporter:9105", + "job": "container-updates", + "role": "docker" + }, + "last_error": "", + "scrape_pool": "container-updates", + "scrape_url": "http://docker-update-exporter:9105/metrics" + }, + { + "discovered_labels": { + "__address__": "raspberrypi.tail13f623.ts.net:9105", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "container-updates", + "role": "raspberrypi" + }, + "health": "up", + "instance": "raspberrypi.tail13f623.ts.net:9105", + "job": "container-updates", + "labels": { + "instance": "raspberrypi.tail13f623.ts.net:9105", + "job": "container-updates", + "role": "raspberrypi" + }, + "last_error": "", + "scrape_pool": "container-updates", + "scrape_url": "http://raspberrypi.tail13f623.ts.net:9105/metrics" + }, + { + "discovered_labels": { + "__address__": "kuma.lan.ddnsgeek.com", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "30s", + "__scrape_timeout__": "10s", + "job": "kuma", + "role": "raspberrypi" + }, + "health": "up", + "instance": "kuma.lan.ddnsgeek.com", + "job": "kuma", + "labels": { + "instance": "kuma.lan.ddnsgeek.com", + "job": "kuma", + "role": "raspberrypi" + }, + "last_error": "", + "scrape_pool": "kuma", + "scrape_url": "http://kuma.lan.ddnsgeek.com/metrics" + }, + { + "discovered_labels": { + "__address__": "monitor-kuma:3001", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "30s", + "__scrape_timeout__": "10s", + "job": "kuma", + "role": "docker" + }, + "health": "up", + "instance": "monitor-kuma:3001", + "job": "kuma", + "labels": { + "instance": "monitor-kuma:3001", + "job": "kuma", + "role": "docker" + }, + "last_error": "", + "scrape_pool": "kuma", + "scrape_url": "http://monitor-kuma:3001/metrics" + }, + { + "discovered_labels": { + "__address__": "nix-cache:9100", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "node", + "role": "cache" + }, + "health": "up", + "instance": "nix-cache:9100", + "job": "node", + "labels": { + "instance": "nix-cache:9100", + "job": "node", + "role": "cache" + }, + "last_error": "", + "scrape_pool": "node", + "scrape_url": "http://nix-cache:9100/metrics" + }, + { + "discovered_labels": { + "__address__": "node-exporter:9100", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "node", + "role": "docker" + }, + "health": "up", + "instance": "node-exporter:9100", + "job": "node", + "labels": { + "instance": "node-exporter:9100", + "job": "node", + "role": "docker" + }, + "last_error": "", + "scrape_pool": "node", + "scrape_url": "http://node-exporter:9100/metrics" + }, + { + "discovered_labels": { + "__address__": "pbs.sweet.home:9100", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "node", + "role": "backup" + }, + "health": "up", + "instance": "pbs.sweet.home:9100", + "job": "node", + "labels": { + "instance": "pbs.sweet.home:9100", + "job": "node", + "role": "backup" + }, + "last_error": "", + "scrape_pool": "node", + "scrape_url": "http://pbs.sweet.home:9100/metrics" + }, + { + "discovered_labels": { + "__address__": "pihole:9100", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "node", + "role": "pihole" + }, + "health": "up", + "instance": "pihole:9100", + "job": "node", + "labels": { + "instance": "pihole:9100", + "job": "node", + "role": "pihole" + }, + "last_error": "", + "scrape_pool": "node", + "scrape_url": "http://pihole:9100/metrics" + }, + { + "discovered_labels": { + "__address__": "pve.sweet.home:9100", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "node", + "role": "proxmox" + }, + "health": "up", + "instance": "pve.sweet.home:9100", + "job": "node", + "labels": { + "instance": "pve.sweet.home:9100", + "job": "node", + "role": "proxmox" + }, + "last_error": "", + "scrape_pool": "node", + "scrape_url": "http://pve.sweet.home:9100/metrics" + }, + { + "discovered_labels": { + "__address__": "raspberrypi.tail13f623.ts.net:9100", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "node", + "role": "raspberrypi" + }, + "health": "up", + "instance": "raspberrypi.tail13f623.ts.net:9100", + "job": "node", + "labels": { + "instance": "raspberrypi.tail13f623.ts.net:9100", + "job": "node", + "role": "raspberrypi" + }, + "last_error": "", + "scrape_pool": "node", + "scrape_url": "http://raspberrypi.tail13f623.ts.net:9100/metrics" + }, + { + "discovered_labels": { + "__address__": "server:9100", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "node", + "role": "server" + }, + "health": "up", + "instance": "server:9100", + "job": "node", + "labels": { + "instance": "server:9100", + "job": "node", + "role": "server" + }, + "last_error": "", + "scrape_pool": "node", + "scrape_url": "http://server:9100/metrics" + }, + { + "discovered_labels": { + "__address__": "pihole-exporter:9617", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "pihole", + "role": "pihole" + }, + "health": "up", + "instance": "pihole-exporter:9617", + "job": "pihole", + "labels": { + "instance": "pihole-exporter:9617", + "job": "pihole", + "role": "pihole" + }, + "last_error": "", + "scrape_pool": "pihole", + "scrape_url": "http://pihole-exporter:9617/metrics" + }, + { + "discovered_labels": { + "__address__": "prometheus:9090", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "prometheus", + "role": "prometheus" + }, + "health": "up", + "instance": "prometheus:9090", + "job": "prometheus", + "labels": { + "instance": "prometheus:9090", + "job": "prometheus", + "role": "prometheus" + }, + "last_error": "", + "scrape_pool": "prometheus", + "scrape_url": "http://prometheus:9090/metrics" + }, + { + "discovered_labels": { + "__address__": "pbs.sweet.home:9102", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "proxmox-storage", + "role": "backup", + "storage": "datastore" + }, + "health": "up", + "instance": "pbs.sweet.home:9102", + "job": "proxmox-storage", + "labels": { + "instance": "pbs.sweet.home:9102", + "job": "proxmox-storage", + "role": "backup", + "storage": "datastore" + }, + "last_error": "", + "scrape_pool": "proxmox-storage", + "scrape_url": "http://pbs.sweet.home:9102/metrics" + }, + { + "discovered_labels": { + "__address__": "pve.sweet.home:9101", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "proxmox-storage", + "role": "proxmox", + "storage": "lvm" + }, + "health": "up", + "instance": "pve.sweet.home:9101", + "job": "proxmox-storage", + "labels": { + "instance": "pve.sweet.home:9101", + "job": "proxmox-storage", + "role": "proxmox", + "storage": "lvm" + }, + "last_error": "", + "scrape_pool": "proxmox-storage", + "scrape_url": "http://pve.sweet.home:9101/metrics" + }, + { + "discovered_labels": { + "__address__": "raspberrypi.tail13f623.ts.net:9273", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "telegraf", + "role": "docker" + }, + "health": "up", + "instance": "raspberrypi.tail13f623.ts.net:9273", + "job": "telegraf", + "labels": { + "instance": "raspberrypi.tail13f623.ts.net:9273", + "job": "telegraf", + "role": "docker" + }, + "last_error": "", + "scrape_pool": "telegraf", + "scrape_url": "http://raspberrypi.tail13f623.ts.net:9273/metrics" + }, + { + "discovered_labels": { + "__address__": "telegraf:9273", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "telegraf", + "role": "docker" + }, + "health": "up", + "instance": "telegraf:9273", + "job": "telegraf", + "labels": { + "instance": "telegraf:9273", + "job": "telegraf", + "role": "docker" + }, + "last_error": "", + "scrape_pool": "telegraf", + "scrape_url": "http://telegraf:9273/metrics" + }, + { + "discovered_labels": { + "__address__": "raspberrypi.tail13f623.ts.net:8080", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "traefik", + "role": "raspberrypi" + }, + "health": "up", + "instance": "raspberrypi.tail13f623.ts.net:8080", + "job": "traefik", + "labels": { + "instance": "raspberrypi.tail13f623.ts.net:8080", + "job": "traefik", + "role": "raspberrypi" + }, + "last_error": "", + "scrape_pool": "traefik", + "scrape_url": "http://raspberrypi.tail13f623.ts.net:8080/metrics" + }, + { + "discovered_labels": { + "__address__": "traefik.lan.ddnsgeek.com:8080", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "traefik", + "role": "docker" + }, + "health": "up", + "instance": "traefik.lan.ddnsgeek.com:8080", + "job": "traefik", + "labels": { + "instance": "traefik.lan.ddnsgeek.com:8080", + "job": "traefik", + "role": "docker" + }, + "last_error": "", + "scrape_pool": "traefik", + "scrape_url": "http://traefik.lan.ddnsgeek.com:8080/metrics" + } + ], + "unhealthy_targets": [], + "unknowns": { + "missing_label_counts": { + "exposure": 19, + "hostname": 19, + "hypervisor": 19, + "network": 19, + "service": 19 + }, + "notes": [ + "Prometheus runtime data is observational and not authoritative for placement/topology.", + "Do not infer Proxmox host placement, VM placement, VLAN layout, or public/internal boundaries without explicit labels or additional inventory sources." + ] + } +} diff --git a/docs/runtime/prometheus-query-exposure.json b/docs/runtime/prometheus-query-exposure.json new file mode 100644 index 0000000..b5133b2 --- /dev/null +++ b/docs/runtime/prometheus-query-exposure.json @@ -0,0 +1,15 @@ +{ + "data": { + "result": [ + { + "metric": {}, + "value": [ + 1776062205.716, + "19" + ] + } + ], + "resultType": "vector" + }, + "status": "success" +} diff --git a/docs/runtime/prometheus-query-hypervisor.json b/docs/runtime/prometheus-query-hypervisor.json new file mode 100644 index 0000000..5fe744a --- /dev/null +++ b/docs/runtime/prometheus-query-hypervisor.json @@ -0,0 +1,15 @@ +{ + "data": { + "result": [ + { + "metric": {}, + "value": [ + 1776062205.714, + "19" + ] + } + ], + "resultType": "vector" + }, + "status": "success" +} diff --git a/docs/runtime/prometheus-query-job-instance.json b/docs/runtime/prometheus-query-job-instance.json new file mode 100644 index 0000000..613b008 --- /dev/null +++ b/docs/runtime/prometheus-query-job-instance.json @@ -0,0 +1,198 @@ +{ + "data": { + "result": [ + { + "metric": { + "instance": "pbs.sweet.home:9100", + "job": "node" + }, + "value": [ + 1776062205.712, + "1" + ] + }, + { + "metric": { + "instance": "raspberrypi.tail13f623.ts.net:8080", + "job": "traefik" + }, + "value": [ + 1776062205.712, + "1" + ] + }, + { + "metric": { + "instance": "traefik.lan.ddnsgeek.com:8080", + "job": "traefik" + }, + "value": [ + 1776062205.712, + "1" + ] + }, + { + "metric": { + "instance": "pve.sweet.home:9101", + "job": "proxmox-storage" + }, + "value": [ + 1776062205.712, + "1" + ] + }, + { + "metric": { + "instance": "raspberrypi.tail13f623.ts.net:9273", + "job": "telegraf" + }, + "value": [ + 1776062205.712, + "1" + ] + }, + { + "metric": { + "instance": "docker-update-exporter:9105", + "job": "container-updates" + }, + "value": [ + 1776062205.712, + "1" + ] + }, + { + "metric": { + "instance": "pihole:9100", + "job": "node" + }, + "value": [ + 1776062205.712, + "1" + ] + }, + { + "metric": { + "instance": "pihole-exporter:9617", + "job": "pihole" + }, + "value": [ + 1776062205.712, + "1" + ] + }, + { + "metric": { + "instance": "raspberrypi.tail13f623.ts.net:9105", + "job": "container-updates" + }, + "value": [ + 1776062205.712, + "1" + ] + }, + { + "metric": { + "instance": "pve.sweet.home:9100", + "job": "node" + }, + "value": [ + 1776062205.712, + "1" + ] + }, + { + "metric": { + "instance": "prometheus:9090", + "job": "prometheus" + }, + "value": [ + 1776062205.712, + "1" + ] + }, + { + "metric": { + "instance": "telegraf:9273", + "job": "telegraf" + }, + "value": [ + 1776062205.712, + "1" + ] + }, + { + "metric": { + "instance": "raspberrypi.tail13f623.ts.net:9100", + "job": "node" + }, + "value": [ + 1776062205.712, + "1" + ] + }, + { + "metric": { + "instance": "node-exporter:9100", + "job": "node" + }, + "value": [ + 1776062205.712, + "1" + ] + }, + { + "metric": { + "instance": "pbs.sweet.home:9102", + "job": "proxmox-storage" + }, + "value": [ + 1776062205.712, + "1" + ] + }, + { + "metric": { + "instance": "nix-cache:9100", + "job": "node" + }, + "value": [ + 1776062205.712, + "1" + ] + }, + { + "metric": { + "instance": "server:9100", + "job": "node" + }, + "value": [ + 1776062205.712, + "1" + ] + }, + { + "metric": { + "instance": "kuma.lan.ddnsgeek.com", + "job": "kuma" + }, + "value": [ + 1776062205.712, + "1" + ] + }, + { + "metric": { + "instance": "monitor-kuma:3001", + "job": "kuma" + }, + "value": [ + 1776062205.712, + "1" + ] + } + ], + "resultType": "vector" + }, + "status": "success" +} diff --git a/docs/runtime/prometheus-query-jobs.json b/docs/runtime/prometheus-query-jobs.json new file mode 100644 index 0000000..f527c7f --- /dev/null +++ b/docs/runtime/prometheus-query-jobs.json @@ -0,0 +1,80 @@ +{ + "data": { + "result": [ + { + "metric": { + "job": "node" + }, + "value": [ + 1776062205.711, + "7" + ] + }, + { + "metric": { + "job": "traefik" + }, + "value": [ + 1776062205.711, + "2" + ] + }, + { + "metric": { + "job": "proxmox-storage" + }, + "value": [ + 1776062205.711, + "2" + ] + }, + { + "metric": { + "job": "telegraf" + }, + "value": [ + 1776062205.711, + "2" + ] + }, + { + "metric": { + "job": "container-updates" + }, + "value": [ + 1776062205.711, + "2" + ] + }, + { + "metric": { + "job": "pihole" + }, + "value": [ + 1776062205.711, + "1" + ] + }, + { + "metric": { + "job": "prometheus" + }, + "value": [ + 1776062205.711, + "1" + ] + }, + { + "metric": { + "job": "kuma" + }, + "value": [ + 1776062205.711, + "2" + ] + } + ], + "resultType": "vector" + }, + "status": "success" +} diff --git a/docs/runtime/prometheus-query-network.json b/docs/runtime/prometheus-query-network.json new file mode 100644 index 0000000..50d5465 --- /dev/null +++ b/docs/runtime/prometheus-query-network.json @@ -0,0 +1,15 @@ +{ + "data": { + "result": [ + { + "metric": {}, + "value": [ + 1776062205.715, + "19" + ] + } + ], + "resultType": "vector" + }, + "status": "success" +} diff --git a/docs/runtime/prometheus-query-role.json b/docs/runtime/prometheus-query-role.json new file mode 100644 index 0000000..74b919a --- /dev/null +++ b/docs/runtime/prometheus-query-role.json @@ -0,0 +1,80 @@ +{ + "data": { + "result": [ + { + "metric": { + "role": "backup" + }, + "value": [ + 1776062205.714, + "2" + ] + }, + { + "metric": { + "role": "raspberrypi" + }, + "value": [ + 1776062205.714, + "4" + ] + }, + { + "metric": { + "role": "docker" + }, + "value": [ + 1776062205.714, + "6" + ] + }, + { + "metric": { + "role": "proxmox" + }, + "value": [ + 1776062205.714, + "2" + ] + }, + { + "metric": { + "role": "pihole" + }, + "value": [ + 1776062205.714, + "2" + ] + }, + { + "metric": { + "role": "prometheus" + }, + "value": [ + 1776062205.714, + "1" + ] + }, + { + "metric": { + "role": "cache" + }, + "value": [ + 1776062205.714, + "1" + ] + }, + { + "metric": { + "role": "server" + }, + "value": [ + 1776062205.714, + "1" + ] + } + ], + "resultType": "vector" + }, + "status": "success" +} diff --git a/docs/runtime/prometheus-query-service.json b/docs/runtime/prometheus-query-service.json new file mode 100644 index 0000000..337f0ee --- /dev/null +++ b/docs/runtime/prometheus-query-service.json @@ -0,0 +1,15 @@ +{ + "data": { + "result": [ + { + "metric": {}, + "value": [ + 1776062205.713, + "19" + ] + } + ], + "resultType": "vector" + }, + "status": "success" +} diff --git a/docs/runtime/prometheus-query-up.json b/docs/runtime/prometheus-query-up.json new file mode 100644 index 0000000..12e91a5 --- /dev/null +++ b/docs/runtime/prometheus-query-up.json @@ -0,0 +1,238 @@ +{ + "data": { + "result": [ + { + "metric": { + "__name__": "up", + "instance": "pbs.sweet.home:9100", + "job": "node", + "role": "backup" + }, + "value": [ + 1776062205.71, + "1" + ] + }, + { + "metric": { + "__name__": "up", + "instance": "raspberrypi.tail13f623.ts.net:8080", + "job": "traefik", + "role": "raspberrypi" + }, + "value": [ + 1776062205.71, + "1" + ] + }, + { + "metric": { + "__name__": "up", + "instance": "traefik.lan.ddnsgeek.com:8080", + "job": "traefik", + "role": "docker" + }, + "value": [ + 1776062205.71, + "1" + ] + }, + { + "metric": { + "__name__": "up", + "instance": "pve.sweet.home:9101", + "job": "proxmox-storage", + "role": "proxmox", + "storage": "lvm" + }, + "value": [ + 1776062205.71, + "1" + ] + }, + { + "metric": { + "__name__": "up", + "instance": "raspberrypi.tail13f623.ts.net:9273", + "job": "telegraf", + "role": "docker" + }, + "value": [ + 1776062205.71, + "1" + ] + }, + { + "metric": { + "__name__": "up", + "instance": "docker-update-exporter:9105", + "job": "container-updates", + "role": "docker" + }, + "value": [ + 1776062205.71, + "1" + ] + }, + { + "metric": { + "__name__": "up", + "instance": "pihole:9100", + "job": "node", + "role": "pihole" + }, + "value": [ + 1776062205.71, + "1" + ] + }, + { + "metric": { + "__name__": "up", + "instance": "pihole-exporter:9617", + "job": "pihole", + "role": "pihole" + }, + "value": [ + 1776062205.71, + "1" + ] + }, + { + "metric": { + "__name__": "up", + "instance": "raspberrypi.tail13f623.ts.net:9105", + "job": "container-updates", + "role": "raspberrypi" + }, + "value": [ + 1776062205.71, + "1" + ] + }, + { + "metric": { + "__name__": "up", + "instance": "pve.sweet.home:9100", + "job": "node", + "role": "proxmox" + }, + "value": [ + 1776062205.71, + "1" + ] + }, + { + "metric": { + "__name__": "up", + "instance": "prometheus:9090", + "job": "prometheus", + "role": "prometheus" + }, + "value": [ + 1776062205.71, + "1" + ] + }, + { + "metric": { + "__name__": "up", + "instance": "telegraf:9273", + "job": "telegraf", + "role": "docker" + }, + "value": [ + 1776062205.71, + "1" + ] + }, + { + "metric": { + "__name__": "up", + "instance": "raspberrypi.tail13f623.ts.net:9100", + "job": "node", + "role": "raspberrypi" + }, + "value": [ + 1776062205.71, + "1" + ] + }, + { + "metric": { + "__name__": "up", + "instance": "node-exporter:9100", + "job": "node", + "role": "docker" + }, + "value": [ + 1776062205.71, + "1" + ] + }, + { + "metric": { + "__name__": "up", + "instance": "pbs.sweet.home:9102", + "job": "proxmox-storage", + "role": "backup", + "storage": "datastore" + }, + "value": [ + 1776062205.71, + "1" + ] + }, + { + "metric": { + "__name__": "up", + "instance": "nix-cache:9100", + "job": "node", + "role": "cache" + }, + "value": [ + 1776062205.71, + "1" + ] + }, + { + "metric": { + "__name__": "up", + "instance": "server:9100", + "job": "node", + "role": "server" + }, + "value": [ + 1776062205.71, + "1" + ] + }, + { + "metric": { + "__name__": "up", + "instance": "kuma.lan.ddnsgeek.com", + "job": "kuma", + "role": "raspberrypi" + }, + "value": [ + 1776062205.71, + "1" + ] + }, + { + "metric": { + "__name__": "up", + "instance": "monitor-kuma:3001", + "job": "kuma", + "role": "docker" + }, + "value": [ + 1776062205.71, + "1" + ] + } + ], + "resultType": "vector" + }, + "status": "success" +} diff --git a/docs/runtime/prometheus-targets.json b/docs/runtime/prometheus-targets.json new file mode 100644 index 0000000..119b6dd --- /dev/null +++ b/docs/runtime/prometheus-targets.json @@ -0,0 +1,497 @@ +{ + "data": { + "activeTargets": [ + { + "discoveredLabels": { + "__address__": "raspberrypi.tail13f623.ts.net:9105", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "container-updates", + "role": "raspberrypi" + }, + "globalUrl": "http://raspberrypi.tail13f623.ts.net:9105/metrics", + "health": "up", + "labels": { + "instance": "raspberrypi.tail13f623.ts.net:9105", + "job": "container-updates", + "role": "raspberrypi" + }, + "lastError": "", + "lastScrape": "2026-04-13T06:36:38.412018212Z", + "lastScrapeDuration": 0.119818002, + "scrapeInterval": "15s", + "scrapePool": "container-updates", + "scrapeTimeout": "10s", + "scrapeUrl": "http://raspberrypi.tail13f623.ts.net:9105/metrics" + }, + { + "discoveredLabels": { + "__address__": "docker-update-exporter:9105", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "container-updates", + "role": "docker" + }, + "globalUrl": "http://docker-update-exporter:9105/metrics", + "health": "up", + "labels": { + "instance": "docker-update-exporter:9105", + "job": "container-updates", + "role": "docker" + }, + "lastError": "", + "lastScrape": "2026-04-13T06:36:35.654237456Z", + "lastScrapeDuration": 0.002254582, + "scrapeInterval": "15s", + "scrapePool": "container-updates", + "scrapeTimeout": "10s", + "scrapeUrl": "http://docker-update-exporter:9105/metrics" + }, + { + "discoveredLabels": { + "__address__": "monitor-kuma:3001", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "30s", + "__scrape_timeout__": "10s", + "job": "kuma", + "role": "docker" + }, + "globalUrl": "http://monitor-kuma:3001/metrics", + "health": "up", + "labels": { + "instance": "monitor-kuma:3001", + "job": "kuma", + "role": "docker" + }, + "lastError": "", + "lastScrape": "2026-04-13T06:36:27.982541752Z", + "lastScrapeDuration": 0.069706065, + "scrapeInterval": "30s", + "scrapePool": "kuma", + "scrapeTimeout": "10s", + "scrapeUrl": "http://monitor-kuma:3001/metrics" + }, + { + "discoveredLabels": { + "__address__": "kuma.lan.ddnsgeek.com", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "30s", + "__scrape_timeout__": "10s", + "job": "kuma", + "role": "raspberrypi" + }, + "globalUrl": "http://kuma.lan.ddnsgeek.com/metrics", + "health": "up", + "labels": { + "instance": "kuma.lan.ddnsgeek.com", + "job": "kuma", + "role": "raspberrypi" + }, + "lastError": "", + "lastScrape": "2026-04-13T06:36:39.961722007Z", + "lastScrapeDuration": 1.470526665, + "scrapeInterval": "30s", + "scrapePool": "kuma", + "scrapeTimeout": "10s", + "scrapeUrl": "http://kuma.lan.ddnsgeek.com/metrics" + }, + { + "discoveredLabels": { + "__address__": "pve.sweet.home:9100", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "node", + "role": "proxmox" + }, + "globalUrl": "http://pve.sweet.home:9100/metrics", + "health": "up", + "labels": { + "instance": "pve.sweet.home:9100", + "job": "node", + "role": "proxmox" + }, + "lastError": "", + "lastScrape": "2026-04-13T06:36:45.136284048Z", + "lastScrapeDuration": 0.077552327, + "scrapeInterval": "15s", + "scrapePool": "node", + "scrapeTimeout": "10s", + "scrapeUrl": "http://pve.sweet.home:9100/metrics" + }, + { + "discoveredLabels": { + "__address__": "pbs.sweet.home:9100", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "node", + "role": "backup" + }, + "globalUrl": "http://pbs.sweet.home:9100/metrics", + "health": "up", + "labels": { + "instance": "pbs.sweet.home:9100", + "job": "node", + "role": "backup" + }, + "lastError": "", + "lastScrape": "2026-04-13T06:36:43.953992414Z", + "lastScrapeDuration": 0.042913089, + "scrapeInterval": "15s", + "scrapePool": "node", + "scrapeTimeout": "10s", + "scrapeUrl": "http://pbs.sweet.home:9100/metrics" + }, + { + "discoveredLabels": { + "__address__": "pihole:9100", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "node", + "role": "pihole" + }, + "globalUrl": "http://pihole:9100/metrics", + "health": "up", + "labels": { + "instance": "pihole:9100", + "job": "node", + "role": "pihole" + }, + "lastError": "", + "lastScrape": "2026-04-13T06:36:42.158765958Z", + "lastScrapeDuration": 0.027103133, + "scrapeInterval": "15s", + "scrapePool": "node", + "scrapeTimeout": "10s", + "scrapeUrl": "http://pihole:9100/metrics" + }, + { + "discoveredLabels": { + "__address__": "server:9100", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "node", + "role": "server" + }, + "globalUrl": "http://server:9100/metrics", + "health": "up", + "labels": { + "instance": "server:9100", + "job": "node", + "role": "server" + }, + "lastError": "", + "lastScrape": "2026-04-13T06:36:31.985355223Z", + "lastScrapeDuration": 0.010159325, + "scrapeInterval": "15s", + "scrapePool": "node", + "scrapeTimeout": "10s", + "scrapeUrl": "http://server:9100/metrics" + }, + { + "discoveredLabels": { + "__address__": "nix-cache:9100", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "node", + "role": "cache" + }, + "globalUrl": "http://nix-cache:9100/metrics", + "health": "up", + "labels": { + "instance": "nix-cache:9100", + "job": "node", + "role": "cache" + }, + "lastError": "", + "lastScrape": "2026-04-13T06:36:32.054207846Z", + "lastScrapeDuration": 0.011150377, + "scrapeInterval": "15s", + "scrapePool": "node", + "scrapeTimeout": "10s", + "scrapeUrl": "http://nix-cache:9100/metrics" + }, + { + "discoveredLabels": { + "__address__": "node-exporter:9100", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "node", + "role": "docker" + }, + "globalUrl": "http://node-exporter:9100/metrics", + "health": "up", + "labels": { + "instance": "node-exporter:9100", + "job": "node", + "role": "docker" + }, + "lastError": "", + "lastScrape": "2026-04-13T06:36:39.839919677Z", + "lastScrapeDuration": 0.076223114, + "scrapeInterval": "15s", + "scrapePool": "node", + "scrapeTimeout": "10s", + "scrapeUrl": "http://node-exporter:9100/metrics" + }, + { + "discoveredLabels": { + "__address__": "raspberrypi.tail13f623.ts.net:9100", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "node", + "role": "raspberrypi" + }, + "globalUrl": "http://raspberrypi.tail13f623.ts.net:9100/metrics", + "health": "up", + "labels": { + "instance": "raspberrypi.tail13f623.ts.net:9100", + "job": "node", + "role": "raspberrypi" + }, + "lastError": "", + "lastScrape": "2026-04-13T06:36:36.961379652Z", + "lastScrapeDuration": 0.292301106, + "scrapeInterval": "15s", + "scrapePool": "node", + "scrapeTimeout": "10s", + "scrapeUrl": "http://raspberrypi.tail13f623.ts.net:9100/metrics" + }, + { + "discoveredLabels": { + "__address__": "pihole-exporter:9617", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "pihole", + "role": "pihole" + }, + "globalUrl": "http://pihole-exporter:9617/metrics", + "health": "up", + "labels": { + "instance": "pihole-exporter:9617", + "job": "pihole", + "role": "pihole" + }, + "lastError": "", + "lastScrape": "2026-04-13T06:36:43.038435285Z", + "lastScrapeDuration": 0.49729699, + "scrapeInterval": "15s", + "scrapePool": "pihole", + "scrapeTimeout": "10s", + "scrapeUrl": "http://pihole-exporter:9617/metrics" + }, + { + "discoveredLabels": { + "__address__": "prometheus:9090", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "prometheus", + "role": "prometheus" + }, + "globalUrl": "http://prometheus:9090/metrics", + "health": "up", + "labels": { + "instance": "prometheus:9090", + "job": "prometheus", + "role": "prometheus" + }, + "lastError": "", + "lastScrape": "2026-04-13T06:36:39.065876441Z", + "lastScrapeDuration": 0.004656092, + "scrapeInterval": "15s", + "scrapePool": "prometheus", + "scrapeTimeout": "10s", + "scrapeUrl": "http://prometheus:9090/metrics" + }, + { + "discoveredLabels": { + "__address__": "pve.sweet.home:9101", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "proxmox-storage", + "role": "proxmox", + "storage": "lvm" + }, + "globalUrl": "http://pve.sweet.home:9101/metrics", + "health": "up", + "labels": { + "instance": "pve.sweet.home:9101", + "job": "proxmox-storage", + "role": "proxmox", + "storage": "lvm" + }, + "lastError": "", + "lastScrape": "2026-04-13T06:36:44.889795345Z", + "lastScrapeDuration": 0.003225566, + "scrapeInterval": "15s", + "scrapePool": "proxmox-storage", + "scrapeTimeout": "10s", + "scrapeUrl": "http://pve.sweet.home:9101/metrics" + }, + { + "discoveredLabels": { + "__address__": "pbs.sweet.home:9102", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "proxmox-storage", + "role": "backup", + "storage": "datastore" + }, + "globalUrl": "http://pbs.sweet.home:9102/metrics", + "health": "up", + "labels": { + "instance": "pbs.sweet.home:9102", + "job": "proxmox-storage", + "role": "backup", + "storage": "datastore" + }, + "lastError": "", + "lastScrape": "2026-04-13T06:36:32.748484232Z", + "lastScrapeDuration": 0.002049134, + "scrapeInterval": "15s", + "scrapePool": "proxmox-storage", + "scrapeTimeout": "10s", + "scrapeUrl": "http://pbs.sweet.home:9102/metrics" + }, + { + "discoveredLabels": { + "__address__": "raspberrypi.tail13f623.ts.net:9273", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "telegraf", + "role": "docker" + }, + "globalUrl": "http://raspberrypi.tail13f623.ts.net:9273/metrics", + "health": "up", + "labels": { + "instance": "raspberrypi.tail13f623.ts.net:9273", + "job": "telegraf", + "role": "docker" + }, + "lastError": "", + "lastScrape": "2026-04-13T06:36:36.677793239Z", + "lastScrapeDuration": 0.151265608, + "scrapeInterval": "15s", + "scrapePool": "telegraf", + "scrapeTimeout": "10s", + "scrapeUrl": "http://raspberrypi.tail13f623.ts.net:9273/metrics" + }, + { + "discoveredLabels": { + "__address__": "telegraf:9273", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "telegraf", + "role": "docker" + }, + "globalUrl": "http://telegraf:9273/metrics", + "health": "up", + "labels": { + "instance": "telegraf:9273", + "job": "telegraf", + "role": "docker" + }, + "lastError": "", + "lastScrape": "2026-04-13T06:36:44.055413407Z", + "lastScrapeDuration": 0.152691132, + "scrapeInterval": "15s", + "scrapePool": "telegraf", + "scrapeTimeout": "10s", + "scrapeUrl": "http://telegraf:9273/metrics" + }, + { + "discoveredLabels": { + "__address__": "traefik.lan.ddnsgeek.com:8080", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "traefik", + "role": "docker" + }, + "globalUrl": "http://traefik.lan.ddnsgeek.com:8080/metrics", + "health": "up", + "labels": { + "instance": "traefik.lan.ddnsgeek.com:8080", + "job": "traefik", + "role": "docker" + }, + "lastError": "", + "lastScrape": "2026-04-13T06:36:34.549111604Z", + "lastScrapeDuration": 0.004579596, + "scrapeInterval": "15s", + "scrapePool": "traefik", + "scrapeTimeout": "10s", + "scrapeUrl": "http://traefik.lan.ddnsgeek.com:8080/metrics" + }, + { + "discoveredLabels": { + "__address__": "raspberrypi.tail13f623.ts.net:8080", + "__metrics_path__": "/metrics", + "__scheme__": "http", + "__scrape_interval__": "15s", + "__scrape_timeout__": "10s", + "job": "traefik", + "role": "raspberrypi" + }, + "globalUrl": "http://raspberrypi.tail13f623.ts.net:8080/metrics", + "health": "up", + "labels": { + "instance": "raspberrypi.tail13f623.ts.net:8080", + "job": "traefik", + "role": "raspberrypi" + }, + "lastError": "", + "lastScrape": "2026-04-13T06:36:35.550082255Z", + "lastScrapeDuration": 0.062750046, + "scrapeInterval": "15s", + "scrapePool": "traefik", + "scrapeTimeout": "10s", + "scrapeUrl": "http://raspberrypi.tail13f623.ts.net:8080/metrics" + } + ], + "droppedTargetCounts": { + "container-updates": 0, + "kuma": 0, + "node": 0, + "pihole": 0, + "prometheus": 0, + "proxmox-storage": 0, + "telegraf": 0, + "traefik": 0 + }, + "droppedTargets": [] + }, + "status": "success" +} diff --git a/monitoring/docker-socket-proxy/docker-compose.yml b/monitoring/docker-socket-proxy/docker-compose.yml index 5bb4982..2cbc462 100644 --- a/monitoring/docker-socket-proxy/docker-compose.yml +++ b/monitoring/docker-socket-proxy/docker-compose.yml @@ -1,6 +1,6 @@ services: docker-socket-proxy: - profiles: ["monitoring","all","docker-socket-proxy", "core", "traefik", "prometheus"] + profiles: ["monitoring","all","docker-socket-proxy", "core", "traefik", "prometheus", "test"] image: tecnativa/docker-socket-proxy:latest container_name: docker-socket-proxy hostname: docker-socket-proxy diff --git a/monitoring/mtls-bridge/docker-compose.yml b/monitoring/mtls-bridge/docker-compose.yml index 2034e32..c58d309 100644 --- a/monitoring/mtls-bridge/docker-compose.yml +++ b/monitoring/mtls-bridge/docker-compose.yml @@ -6,14 +6,22 @@ services: container_name: mtls-bridge restart: unless-stopped environment: - - TARGET_URL=https://node-red.lan.ddnsgeek.com/docker-update-lockouts/clear - - CLIENT_CERT=/certs/clients/office-pc/office-pc.crt - - CLIENT_KEY=/certs/clients/office-pc/office-pc.key - - TIMEOUT=5 + - TARGET_URL=${MTLS_BRIDGE_TARGET_URL} + - CLIENT_CERT=${MTLS_BRIDGE_CLIENT_CERT} + - CLIENT_KEY=${MTLS_BRIDGE_CLIENT_KEY} + - TIMEOUT=${MTLS_BRIDGE_TIMEOUT} - LOG_LEVEL=${MTLS_BRIDGE_LOG_LEVEL:-INFO} - UPSTREAM_CA_CERT=${MTLS_BRIDGE_UPSTREAM_CA_CERT:-} volumes: - ${PROJECT_ROOT}/core/traefik/certs:/certs:ro + labels: + - "traefik.http.routers.mtls-bridge.rule=Host(`mtls-bridge.lan.ddnsgeek.com`)" + - "traefik.enable=true" + - "traefik.http.routers.mtls-bridge.entrypoints=websecure" + - "traefik.http.routers.mtls-bridge.tls.certresolver=myresolver" + - "io.portainer.accesscontrol.public" +# - "traefik.http.routers.searxng.middlewares=crowdsec@file,secHeaders@file,error-pages-middleware" + - "traefik.http.services.mtls-bridge.loadbalancer.server.port=8080" healthcheck: test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8080/health', timeout=3).read()"] interval: 30s diff --git a/monitoring/node-red/data/context/00b02bbd01c91485/flow.json b/monitoring/node-red/data/context/00b02bbd01c91485/flow.json index 7f876e5..2e883c9 100644 --- a/monitoring/node-red/data/context/00b02bbd01c91485/flow.json +++ b/monitoring/node-red/data/context/00b02bbd01c91485/flow.json @@ -1,10 +1,3 @@ { - "dockerUpdateAttempts": { - "telegraf|telegraf:latest|docker": { - "time": 1776048224012, - "status": "test_failed", - "failedAt": 1776048287524, - "notified": true - } - } + "dockerUpdateAttempts": {} } \ No newline at end of file diff --git a/monitoring/node-red/data/update-events.ndjson b/monitoring/node-red/data/update-events.ndjson index a453dab..f0724bc 100644 --- a/monitoring/node-red/data/update-events.ndjson +++ b/monitoring/node-red/data/update-events.ndjson @@ -109,3 +109,9 @@ {"ts":"2026-04-13T02:44:47.524Z","flow":"docker-updates","event":"completed","container":"telegraf","project":"unknown","host":"docker","status":"locked","success":0,"failed":1,"duration_ms":0,"code":0,"error":""} {"ts":"2026-04-13T02:46:35.255Z","flow":"docker-updates","event":"completed","container":"update-test","project":"unknown","host":"docker","status":"success","success":1,"failed":0,"duration_ms":0,"code":0,"error":""} {"ts":"2026-04-13T02:58:03.503Z","flow":"docker-updates","event":"completed","container":"update-test","project":"unknown","host":"docker","status":"success","success":1,"failed":0,"duration_ms":0,"code":0,"error":""} +{"ts":"2026-04-13T05:16:15.689Z","flow":"docker-updates","event":"completed","container":"update-test","project":"unknown","host":"docker","status":"success","success":1,"failed":0,"duration_ms":0,"code":0,"error":""} +{"ts":"2026-04-13T05:16:51.797Z","flow":"docker-updates","event":"completed","container":"telegraf","project":"unknown","host":"docker","status":"failed","success":0,"failed":1,"duration_ms":0,"code":0,"error":""} +{"ts":"2026-04-13T05:16:51.797Z","flow":"docker-updates","event":"completed","container":"telegraf","project":"unknown","host":"docker","status":"locked","success":0,"failed":1,"duration_ms":0,"code":0,"error":""} +{"ts":"2026-04-13T05:27:32.283Z","flow":"docker-updates","event":"completed","container":"update-test","project":"unknown","host":"docker","status":"success","success":1,"failed":0,"duration_ms":0,"code":0,"error":""} +{"ts":"2026-04-13T05:28:25.458Z","flow":"docker-updates","event":"completed","container":"telegraf","project":"unknown","host":"docker","status":"failed","success":0,"failed":1,"duration_ms":0,"code":0,"error":""} +{"ts":"2026-04-13T05:28:25.458Z","flow":"docker-updates","event":"completed","container":"telegraf","project":"unknown","host":"docker","status":"locked","success":0,"failed":1,"duration_ms":0,"code":0,"error":""}