From d22c9cb9fb2c573255540aea10220807f0f39d63 Mon Sep 17 00:00:00 2001 From: Akshay Date: Sun, 5 Apr 2026 18:17:55 +0530 Subject: [PATCH 1/2] docs: Standardize API endpoint documentation style across multiple files --- DECISIONS.md | 2 +- DEPLOYMENT_CHECKLIST.md | 15 +++-- QUICKREF.md | 30 +++++---- README.md | 25 ++++--- README_GHOSTLINK.md | 132 ++++++++++--------------------------- docs/API_REFERENCE.md | 75 +++++++++++++-------- docs/FAILURE_EDGE_CASES.md | 26 ++++---- docs/README.md | 1 + 8 files changed, 143 insertions(+), 163 deletions(-) diff --git a/DECISIONS.md b/DECISIONS.md index fbdce40..fce34c8 100644 --- a/DECISIONS.md +++ b/DECISIONS.md @@ -58,7 +58,7 @@ Trade-offs: Decision: Support both canonical and compatibility endpoints. Implemented compatibility includes: -- URLs: `POST /shorten`, `POST /urls`, `GET /urls`, `GET /urls/`, `PUT/PATCH /urls/`, `DELETE /urls/`, `GET /`, `GET /r/`. +- URLs: `POST /shorten`, `POST /urls`, `GET /urls`, `GET /urls/{id}`, `PUT/PATCH /urls/{id}`, `DELETE /urls/{id}`, `GET /{short_code}`, `GET /r/{short_code}`. - Users: CRUD endpoints plus `POST /users/bulk`. - Events: `GET /events`, `POST /events` with filtering support. diff --git a/DEPLOYMENT_CHECKLIST.md b/DEPLOYMENT_CHECKLIST.md index 9c12eca..2cd016f 100644 --- a/DEPLOYMENT_CHECKLIST.md +++ b/DEPLOYMENT_CHECKLIST.md @@ -15,7 +15,7 @@ - [x] Link Health: APScheduler worker, 5min interval, HEAD checks ### Phase 4: API Routes ✅ -- [x] URLs: POST /shorten, GET /, PATCH/DELETE /urls/, GET /urls +- [x] URLs: POST /shorten, GET /{short_code}, PATCH/DELETE /urls/{id}, GET /urls - [x] Health: GET /health (DB+Redis status), GET /metrics (Prometheus) ### Phase 5: Testing ✅ @@ -72,9 +72,9 @@ ### ✅ API Contracts (Akshay's Dependencies) - [x] POST /shorten → 201 {"id":1, "short_code":"aB3xYz"} -- [x] GET / → 302 redirect (or 404/410) -- [x] PATCH /urls/ → 200 {"message":"updated"} -- [x] DELETE /urls/ → 200 {"message":"deleted"} +- [x] GET /{short_code} → 302 redirect (or 404/410) +- [x] PATCH /urls/{id} → 200 {"message":"updated"} +- [x] DELETE /urls/{id} → 200 {"message":"deleted"} - [x] GET /urls → 200 [array] - [x] GET /health → 200/503 with component status - [x] GET /metrics → Prometheus text format @@ -115,12 +115,15 @@ curl -X POST http://localhost:5000/shorten \ -H "Content-Type: application/json" \ -d '{"original_url":"https://example.com"}' +# Set SHORT_CODE from step 7 response (example: abc123) +SHORT_CODE="abc123" + # 8. Test redirect (use short_code from step 7) -curl -I http://localhost:5000/ +curl -I "http://localhost:5000/${SHORT_CODE}" # 9. Test 410 edge case (delete URL first) curl -X DELETE http://localhost:5000/urls/1 -curl http://localhost:5000/ # Should return 410 +curl "http://localhost:5000/${SHORT_CODE}" # Should return 410 # 10. Test 409 edge case (duplicate short_code) curl -X POST http://localhost:5000/shorten \ diff --git a/QUICKREF.md b/QUICKREF.md index bb99a2a..8030fed 100644 --- a/QUICKREF.md +++ b/QUICKREF.md @@ -31,48 +31,56 @@ curl -s http://localhost/metrics | grep -E "ghostlink_rollbacks_total|ghostlink_ ## 📡 API Quick Reference +Template style is consistent with `docs/API_REFERENCE.md`: + +- Request Example +- Success Response +- Error Responses + ```bash # Create short URL -curl -X POST http://localhost:5000/shorten \ +curl -X POST http://localhost/shorten \ -H "Content-Type: application/json" \ -d '{"original_url":"https://example.com"}' # → {"id":1, "short_code":"abc123"} # Redirect -curl -I http://localhost:5000/abc123 +curl -I http://localhost/abc123 # → 302 Location: https://example.com # List URLs -curl http://localhost:5000/urls +curl http://localhost/urls # Update URL -curl -X PATCH http://localhost:5000/urls/1 \ +curl -X PATCH http://localhost/urls/1 \ -H "Content-Type: application/json" \ -d '{"title":"New Title"}' # Delete URL (soft delete) -curl -X DELETE http://localhost:5000/urls/1 +curl -X DELETE http://localhost/urls/1 # Health Check -curl http://localhost:5000/health -# → {"status":"ok","db":"ok","redis":"ok"} +curl http://localhost/health +# → {"status":"ok","version":"v1",...,"db":"ok","redis":"ok"} # Metrics -curl http://localhost:5000/metrics +curl http://localhost/metrics ``` ## 🎯 Status Codes | Code | Meaning | When | |------|---------|------| -| 200 | OK | Successful GET/PATCH/DELETE | +| 200 | OK | Successful read/update/delete and health/metrics routes | | 201 | Created | URL shortened successfully | | 302 | Redirect | Short code found, redirecting | -| 400 | Bad Request | Missing body or required fields | +| 400 | Bad Request | Missing body, malformed JSON, or invalid request fields | +| 403 | Forbidden | Ownership mismatch on protected update/delete operations | | 404 | Not Found | Short code doesn't exist | | 409 | Conflict | Short code already taken | -| 410 | Gone | Link is inactive (soft deleted) | +| 410 | Gone | Link is inactive or quarantined | | 422 | Unprocessable | Invalid URL format | +| 500 | Server Error | Short code generation failure | | 503 | Degraded | Database connection error | ## 🛡️ Risk Scoring diff --git a/README.md b/README.md index bb56ec7..a68c71c 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ GhostLink shortens URLs, tracks redirect events, scores link risk, and monitors ## What it does - Shorten URLs with auto-generated or custom short codes -- Redirect users via `GET /` +- Redirect users via `GET /{short_code}` - Track click events with referrer and user attribution - Score link risk based on five signals (dead destination, ghost probes, suspicious clients, canary failures, threat patterns) - Quarantine high-risk short codes via Nginx without taking the app down @@ -115,30 +115,37 @@ Truthy values accepted for all flags: `true`, `1`, `yes`, `on` (case-insensitive ## API Endpoints +Endpoint request and response templates use the same style in [docs/API_REFERENCE.md](docs/API_REFERENCE.md): Request Example, Success Response, and Error Responses. + ### Health | Method | Path | Description | |---|---|---| -| `GET` | `/health` | Returns DB and Redis status | +| `GET` | `/health` | Returns DB/Redis status plus release metadata and feature flags | | `GET` | `/metrics` | Prometheus metrics | +| `GET` | `/health-demo`, `/promo-demo`, `/checkout-demo`, `/dashboard-demo`, `/support-demo` | Synthetic canary health routes | ### URLs | Method | Path | Description | |---|---|---| +| `POST` | `/shorten` | Create short URL with compact response payload | | `POST` | `/urls` | Create a short URL | | `GET` | `/urls` | List all URLs (supports `?user_id=1&is_active=true`) | -| `GET` | `/urls/` | Get a URL by ID | -| `PUT` | `/urls/` | Update title or is_active | -| `DELETE` | `/urls/` | Soft delete a URL | -| `GET` | `/` | Redirect to original URL | +| `GET` | `/urls/{id}` | Get a URL by ID | +| `PATCH`, `PUT` | `/urls/{id}` | Update mutable URL fields | +| `DELETE` | `/urls/{id}` | Soft delete a URL | +| `GET` | `/urls/{id}/risk` | Get risk score details for URL | +| `GET` | `/{short_code}` | Redirect to original URL | +| `GET` | `/r/{short_code}` | Redirect alias | +| `GET` | `/urls/{short_code}` | Redirect alias | ### Users | Method | Path | Description | |---|---|---| | `POST` | `/users` | Create a user | | `GET` | `/users` | List all users (supports `?page=1&per_page=10`) | -| `GET` | `/users/` | Get a user by ID | -| `PUT` | `/users/` | Update a user | -| `DELETE` | `/users/` | Delete a user | +| `GET` | `/users/{id}` | Get a user by ID | +| `PATCH`, `PUT` | `/users/{id}` | Update a user | +| `DELETE` | `/users/{id}` | Delete a user | | `POST` | `/users/bulk` | Bulk import from CSV | ### Events diff --git a/README_GHOSTLINK.md b/README_GHOSTLINK.md index 6122a96..c51d3f3 100644 --- a/README_GHOSTLINK.md +++ b/README_GHOSTLINK.md @@ -49,122 +49,60 @@ Exposes at `GET /metrics` for Prometheus scraping: ## API Endpoints -For a concise endpoint matrix with curl examples and status-code behavior, see `docs/API_REFERENCE.md`. +Endpoint wording style is standardized across docs: -### POST /shorten -Create a shortened URL. +- `Request Example` +- `Success Response` +- `Error Responses` -**Request:** -```json -{ - "original_url": "https://example.com", - "short_code": "custom1", // optional - "title": "Example Site", // optional - "user_id": 1 // optional -} -``` +Canonical request/response templates and complete error details live in `docs/API_REFERENCE.md`. -**Response (201):** -```json -{ - "id": 1, - "short_code": "abc123" -} -``` - -**Errors:** -- 400: Missing request body / Missing original_url -- 409: Short code already exists -- 422: Invalid URL format - -### GET / -Redirect to the original URL. +### Endpoint Matrix -**Response:** -- 302: Redirect to original URL -- 404: Short code not found -- 410: Link inactive (soft deleted) +| Method | Path | Success | Common Errors | Notes | +|---|---|---:|---|---| +| `POST` | `/shorten` | `201` | `400`, `409`, `422`, `500` | Create short URL with compact response | +| `POST` | `/urls` | `201` | `400`, `409`, `422`, `500` | Create short URL with full URL record (`user_id` required) | +| `GET` | `/{short_code}` | `302` | `404`, `410` | Primary redirect route | +| `GET` | `/r/{short_code}` | `302` | `404`, `410` | Redirect alias | +| `GET` | `/urls/{short_code}` | `302` | `404`, `410` | Redirect alias | +| `GET` | `/urls` | `200` | - | Supports `user_id` and `is_active` filtering | +| `GET` | `/urls/{id}` | `200` | `404` | Fetch URL by ID | +| `PATCH`, `PUT` | `/urls/{id}` | `200` | `400`, `403`, `404`, `422` | Update mutable URL fields | +| `DELETE` | `/urls/{id}` | `200` | `400`, `403`, `404` | Soft delete URL | +| `GET` | `/urls/{id}/risk` | `200` | `404` | Risk score and signal details | +| `GET` | `/health` | `200` | `503` | Includes release metadata and feature flags | +| `GET` | `/metrics` | `200` | - | Prometheus exposition format | +| `GET` | `/health-demo`, `/promo-demo`, `/checkout-demo`, `/dashboard-demo`, `/support-demo` | `200` | - | Synthetic canary routes | -### GET /urls -List all URLs (optionally filter by user_id). - -**Query params:** -- `user_id` (optional): Filter by user - -**Response (200):** -```json -[ - { - "id": 1, - "short_code": "abc123", - "original_url": "https://example.com", - "title": "Example", - "is_active": true, - "created_at": "2026-04-04T12:00:00", - "updated_at": "2026-04-04T12:00:00" - } -] -``` +### Response Template Example (POST /shorten) -### PATCH /urls/ -Update a URL. +Request Example: -**Request:** ```json { - "title": "New Title", // optional - "original_url": "https://...", // optional - "is_active": false // optional + "original_url": "https://example.com", + "short_code": "custom1", + "title": "Example Site", + "user_id": 1 } ``` -**Response (200):** -```json -{"message": "updated"} -``` - -**Errors:** -- 400: Missing request body -- 404: URL not found -- 422: Invalid URL format - -### DELETE /urls/ -Soft delete a URL (sets is_active=False). +Success Response (`201`): -**Response (200):** -```json -{"message": "deleted"} -``` - -**Errors:** -- 404: URL not found - -### GET /health -Health check with dependency status. - -**Response (200):** -```json -{ - "status": "ok", - "db": "ok", - "redis": "ok" -} -``` - -**Response (503 - Degraded):** ```json { - "status": "degraded", - "db": "error", - "redis": "ok" + "id": 1, + "short_code": "abc123" } ``` -### GET /metrics -Prometheus metrics in text format. +Error Responses: -### GET /urls//risk -Return computed risk score, tier, and active signals for a URL. +- `400` missing body, malformed JSON, or invalid field type +- `409` short code already exists +- `422` invalid URL format +- `500` short code generation failure ## Tech Stack diff --git a/docs/API_REFERENCE.md b/docs/API_REFERENCE.md index 122a4f3..d6ca26b 100644 --- a/docs/API_REFERENCE.md +++ b/docs/API_REFERENCE.md @@ -22,13 +22,21 @@ No authentication is required in the current hackathon implementation. - `X-GhostLink-Version`: release version served by the responding app instance +## Endpoint Template Style + +Endpoint sections in this document follow one wording pattern: + +- `Request Example` +- `Success Response` +- `Error Responses` + ## Endpoints ### POST /shorten Create a short URL. -Example: +Request Example: ```bash curl -X POST http://localhost/shorten \ @@ -40,7 +48,7 @@ curl -X POST http://localhost/shorten \ }' ``` -Successful response (`201`): +Success Response (`201`): ```json { @@ -49,7 +57,7 @@ Successful response (`201`): } ``` -Error responses: +Error Responses: - `400` missing body, malformed JSON, or invalid request field type - `409` short code already exists @@ -60,7 +68,7 @@ Error responses: Create a short URL with full URL record response. `user_id` is required on this route. -Example: +Request Example: ```bash curl -X POST http://localhost/urls \ @@ -72,9 +80,9 @@ curl -X POST http://localhost/urls \ }' ``` -Successful response (`201`): JSON URL object including `id`, `short_code`, `original_url`, and metadata fields. +Success Response (`201`): JSON URL object including `id`, `short_code`, `original_url`, and metadata fields. -Error responses: +Error Responses: - `400` missing body, malformed JSON, missing `original_url`, missing `user_id`, or invalid request field type - `409` short code already exists @@ -85,15 +93,18 @@ Error responses: Resolve a short code. -Example: +Request Example: ```bash curl -i http://localhost/abc123 ``` -Response behavior: +Success Response: - `302` redirect to destination URL + +Error Responses: + - `404` unknown short code - `410` inactive short code - `410` quarantined short code @@ -107,20 +118,24 @@ Alias redirect routes: List URLs. Optional filter by `user_id`. -Examples: +Request Example: ```bash curl http://localhost/urls curl "http://localhost/urls?user_id=1" ``` -Successful response (`200`): JSON array of URL records. +Success Response (`200`): JSON array of URL records. + +Error Responses: + +- None expected for valid query parameters ### PATCH or PUT /urls/{id} Update URL fields. -Example: +Request Example: ```bash curl -X PATCH http://localhost/urls/123 \ @@ -132,13 +147,13 @@ curl -X PATCH http://localhost/urls/123 \ }' ``` -Successful response (`200`): +Success Response (`200`): ```json {"message": "updated"} ``` -Error responses: +Error Responses: - `400` missing body, malformed JSON, unknown fields, or no mutable fields provided - `403` user mismatch when `user_id` does not match URL ownership @@ -149,19 +164,19 @@ Error responses: Soft delete URL (sets `is_active=false`). -Example: +Request Example: ```bash curl -X DELETE http://localhost/urls/123 ``` -Successful response (`200`): +Success Response (`200`): ```json {"message": "deleted"} ``` -Error responses: +Error Responses: - `400` malformed JSON body - `403` user mismatch when `user_id` does not match URL ownership @@ -171,13 +186,13 @@ Error responses: Get risk score for a URL. -Example: +Request Example: ```bash curl http://localhost/urls/123/risk ``` -Typical response (`200`): +Success Response (`200`): ```json { @@ -190,7 +205,7 @@ Typical response (`200`): } ``` -Error responses: +Error Responses: - `404` URL not found - `404` risk score unavailable @@ -199,13 +214,13 @@ Error responses: Service health (DB + Redis view). -Example: +Request Example: ```bash curl http://localhost/health ``` -Response (`200`): +Success Response (`200`): ```json { @@ -228,7 +243,7 @@ Response (`200`): } ``` -Response (`503`) when DB probe fails: +Error Response (`503`) when DB probe fails: ```json { @@ -242,13 +257,17 @@ Response (`503`) when DB probe fails: Prometheus metrics. -Example: +Request Example: ```bash curl http://localhost/metrics ``` -Response (`200`): Prometheus exposition text. +Success Response (`200`): Prometheus exposition text. + +Error Responses: + +- None documented (internal dependency failures surface via monitoring) Notable metric families: @@ -266,18 +285,22 @@ Synthetic canary routes exposed for monitoring: - `GET /dashboard-demo` - `GET /support-demo` -Example: +Request Example: ```bash curl http://localhost/health-demo ``` -Response (`200`): +Success Response (`200`): ```json {"status": "ok", "canary": "health-demo"} ``` +Error Responses: + +- None documented for canary route handlers + ## Linked References - Operational docs: `docs/README.md` diff --git a/docs/FAILURE_EDGE_CASES.md b/docs/FAILURE_EDGE_CASES.md index c522cb5..56c9d7a 100644 --- a/docs/FAILURE_EDGE_CASES.md +++ b/docs/FAILURE_EDGE_CASES.md @@ -19,19 +19,19 @@ This note explains how GhostLink handles API failures, degraded dependencies, an | `POST /shorten` | Custom code already exists | `409` | Returns `{"error": "Short code exists", "code": 409}` | | `POST /shorten` | Generator cannot allocate code | `500` | Returns `{"error": "Failed to generate short code", "code": 500}` | | `POST /urls` | Missing `user_id` | `400` | Returns `{"error": "Missing user_id", "code": 400}` | -| `GET /` | Code quarantined | `410` | Returns quarantine JSON and records blocked fingerprint | -| `GET /` | Code unknown | `404` | Returns `{"error": "Not found", "code": 404}` and records invalid hit | -| `GET /` | Code inactive (soft deleted) | `410` | Returns `{"error": "Link inactive", "code": 410}` and emits ghost probe event | -| `GET /` | Code valid and active | `302` | Redirects to destination URL | -| `PATCH /urls/` | Missing JSON body | `400` | Returns `{"error": "Missing request body", "code": 400}` | -| `PATCH /urls/` | Unknown fields or no mutable fields | `400` | Returns `{"error": "Invalid request body", "code": 400}` or `{"error": "Missing update fields", "code": 400}` | -| `PATCH /urls/` | Ownership mismatch (`user_id`) | `403` | Returns `{"error": "Forbidden", "code": 403}` | -| `PATCH /urls/` | URL id not found | `404` | Returns `{"error": "Not found", "code": 404}` | -| `PATCH /urls/` | Invalid `original_url` | `422` | Returns `{"error": "Invalid URL", "code": 422}` | -| `DELETE /urls/` | Ownership mismatch (`user_id`) | `403` | Returns `{"error": "Forbidden", "code": 403}` | -| `DELETE /urls/` | URL id not found | `404` | Returns `{"error": "Not found", "code": 404}` | -| `GET /urls//risk` | URL id not found | `404` | Returns `{"error": "Not found", "code": 404}` | -| `GET /urls//risk` | Risk record unavailable | `404` | Returns `{"error": "Risk score unavailable", "code": 404}` | +| `GET /{short_code}` | Code quarantined | `410` | Returns quarantine JSON and records blocked fingerprint | +| `GET /{short_code}` | Code unknown | `404` | Returns `{"error": "Not found", "code": 404}` and records invalid hit | +| `GET /{short_code}` | Code inactive (soft deleted) | `410` | Returns `{"error": "Link inactive", "code": 410}` and emits ghost probe event | +| `GET /{short_code}` | Code valid and active | `302` | Redirects to destination URL | +| `PATCH /urls/{id}` | Missing JSON body | `400` | Returns `{"error": "Missing request body", "code": 400}` | +| `PATCH /urls/{id}` | Unknown fields or no mutable fields | `400` | Returns `{"error": "Invalid request body", "code": 400}` or `{"error": "Missing update fields", "code": 400}` | +| `PATCH /urls/{id}` | Ownership mismatch (`user_id`) | `403` | Returns `{"error": "Forbidden", "code": 403}` | +| `PATCH /urls/{id}` | URL id not found | `404` | Returns `{"error": "Not found", "code": 404}` | +| `PATCH /urls/{id}` | Invalid `original_url` | `422` | Returns `{"error": "Invalid URL", "code": 422}` | +| `DELETE /urls/{id}` | Ownership mismatch (`user_id`) | `403` | Returns `{"error": "Forbidden", "code": 403}` | +| `DELETE /urls/{id}` | URL id not found | `404` | Returns `{"error": "Not found", "code": 404}` | +| `GET /urls/{id}/risk` | URL id not found | `404` | Returns `{"error": "Not found", "code": 404}` | +| `GET /urls/{id}/risk` | Risk record unavailable | `404` | Returns `{"error": "Risk score unavailable", "code": 404}` | | `GET /health` | Database probe fails | `503` | Returns degraded health payload | ## Dependency Degradation Behavior diff --git a/docs/README.md b/docs/README.md index 0dc82ae..fbb8d71 100644 --- a/docs/README.md +++ b/docs/README.md @@ -229,3 +229,4 @@ Capacity bottleneck findings and mitigation priorities are documented in `docs/B ## API Endpoint Reference Concrete endpoint docs and curl examples are documented in `docs/API_REFERENCE.md`. +Endpoint sections there follow a single wording template: `Request Example`, `Success Response`, and `Error Responses`. From 21c85aba0dd2c3df7839419403ce2b459fbe13da Mon Sep 17 00:00:00 2001 From: Akshay Date: Sun, 5 Apr 2026 20:07:42 +0530 Subject: [PATCH 2/2] Update canary failure logs and state environment variables - Added new failure entries for various canary services in canary_failures.log. - Updated success and failure totals in canary_state.env to reflect recent runs. - Adjusted latency values for health, promo, checkout, dashboard, and support demos in canary_state.env. --- docker-compose.yml | 17 +- grafana/dashboards/ghostlink.json | 1565 ++++------------- grafana/provisioning/dashboards/dashboard.yml | 6 +- .../provisioning/datasources/prometheus.yml | 4 +- logs/nginx/access.log | 362 ++++ logs/nginx/error.log | 134 ++ security/canary_failures.log | 29 + security/canary_state.env | 16 +- 8 files changed, 896 insertions(+), 1237 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 15499de..ddab6aa 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,3 @@ -version: "3.9" - services: nginx: image: nginx:1.27-alpine @@ -288,20 +286,21 @@ services: - ghostlink_net grafana: - image: grafana/grafana:11.1.4 + image: grafana/grafana:latest container_name: ghostlink-grafana environment: + GF_SECURITY_ADMIN_USER: admin GF_SECURITY_ADMIN_PASSWORD: ghostlink GF_USERS_ALLOW_SIGN_UP: "false" ports: - "3000:3000" volumes: - - grafana_data:/var/lib/grafana - - ./grafana/provisioning:/etc/grafana/provisioning:ro - - ./grafana/dashboards:/var/lib/grafana/dashboards:ro + - grafana-data:/var/lib/grafana + - ./grafana/provisioning/datasources:/etc/grafana/provisioning/datasources + - ./grafana/provisioning/dashboards:/etc/grafana/provisioning/dashboards + - ./grafana/dashboards:/var/lib/grafana/dashboards depends_on: - prometheus: - condition: service_healthy + - prometheus restart: always networks: - ghostlink_net @@ -312,4 +311,4 @@ networks: volumes: postgres_data: - grafana_data: + grafana-data: diff --git a/grafana/dashboards/ghostlink.json b/grafana/dashboards/ghostlink.json index 1bdfa1f..36f6333 100644 --- a/grafana/dashboards/ghostlink.json +++ b/grafana/dashboards/ghostlink.json @@ -1,425 +1,132 @@ { - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "grafana", - "uid": "-- Grafana --" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 0, "id": null, - "links": [], - "liveNow": true, + "uid": "ghostlink-overview", + "title": "GhostLink Command Center", + "timezone": "browser", + "schemaVersion": 39, + "version": 1, + "refresh": "10s", + "time": { + "from": "now-1h", + "to": "now" + }, "panels": [ { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 100, - "panels": [], - "title": "Executive Summary", - "type": "row" - }, - { + "id": 1, + "title": "Canary checks per second", + "type": "timeseries", "datasource": { "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "decimals": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "yellow", - "value": 250 - }, - { - "color": "green", - "value": 600 - } - ] - } - }, - "overrides": [] + "uid": "ghostlink-prometheus" }, "gridPos": { - "h": 6, - "w": 5, + "h": 8, + "w": 8, "x": 0, - "y": 1 - }, - "id": 101, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value_and_name" - }, - "targets": [ - { - "expr": "sum(ghostlink_safe_links_total)", - "legendFormat": "Healthy Links", - "refId": "A" - } - ], - "title": "Healthy Links", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" + "y": 0 }, "fieldConfig": { "defaults": { - "color": { - "mode": "thresholds" - }, - "decimals": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 10 - }, - { - "color": "red", - "value": 25 - } - ] - } + "unit": "reqps" }, "overrides": [] }, - "gridPos": { - "h": 6, - "w": 5, - "x": 5, - "y": 1 - }, - "id": 102, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value_and_name" - }, "targets": [ { - "expr": "sum(ghostlink_threat_links_total)", - "legendFormat": "Threat Links", - "refId": "A" + "refId": "A", + "expr": "sum(rate(ghostlink_canary_success_total{job=\"ghostlink-security\"}[5m])) or vector(0)", + "legendFormat": "canary checks/s" } ], - "title": "Threat Links", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "decimals": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 5 - }, - { - "color": "red", - "value": 20 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 6, - "w": 4, - "x": 10, - "y": 1 - }, - "id": 103, "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false + "legend": { + "displayMode": "table", + "placement": "bottom", + "showLegend": true }, - "textMode": "value_and_name" - }, - "targets": [ - { - "expr": "sum(destination_dead_total)", - "legendFormat": "Dead Links", - "refId": "A" + "tooltip": { + "mode": "multi", + "sort": "desc" } - ], - "title": "Dead Links", - "type": "stat" + } }, { + "id": 2, + "title": "Canary latency (avg/max)", + "type": "timeseries", "datasource": { "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "decimals": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 1 - }, - { - "color": "red", - "value": 3 - } - ] - } - }, - "overrides": [] + "uid": "ghostlink-prometheus" }, "gridPos": { - "h": 6, - "w": 5, - "x": 14, - "y": 1 - }, - "id": 104, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value_and_name" - }, - "targets": [ - { - "expr": "sum(ghostlink_active_alerts)", - "legendFormat": "Active Alerts", - "refId": "A" - } - ], - "title": "Active Alerts", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" + "h": 8, + "w": 8, + "x": 8, + "y": 0 }, "fieldConfig": { "defaults": { - "color": { - "mode": "thresholds" - }, - "decimals": 2, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 5 - }, - { - "color": "red", - "value": 15 - } - ] - } + "unit": "s" }, "overrides": [] }, - "gridPos": { - "h": 6, - "w": 5, - "x": 19, - "y": 1 - }, - "id": 105, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value_and_name" - }, "targets": [ { - "expr": "sum(ghostlink_estimated_user_impact)", - "legendFormat": "Estimated User Impact", - "refId": "A" + "refId": "A", + "expr": "avg(ghostlink_canary_latency_seconds{job=\"ghostlink-security\"})", + "legendFormat": "avg latency" + }, + { + "refId": "B", + "expr": "max(ghostlink_canary_latency_seconds{job=\"ghostlink-security\"})", + "legendFormat": "max latency" } ], - "title": "Estimated User Impact", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "unit": "reqps" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 7 - }, - "id": 1, "options": { "legend": { - "calcs": [ - "lastNotNull", - "mean", - "max" - ], - "displayMode": "table", + "displayMode": "list", "placement": "bottom", "showLegend": true }, "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "expr": "rate(url_redirects_total[1m])", - "legendFormat": "redirects/s", - "refId": "A" + "mode": "single" } - ], - "title": "Redirects per second", - "type": "timeseries" + } }, { + "id": 3, + "title": "Error rate", + "type": "timeseries", "datasource": { "type": "prometheus", - "uid": "prometheus" + "uid": "ghostlink-prometheus" + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 16, + "y": 0 }, "fieldConfig": { "defaults": { - "color": { - "mode": "palette-classic" - }, - "unit": "s" + "unit": "reqps" }, "overrides": [] }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 7 - }, - "id": 2, + "targets": [ + { + "refId": "A", + "expr": "sum(rate(ghostlink_canary_failures_total{job=\"ghostlink-security\"}[5m])) or vector(0)", + "legendFormat": "canary failures/s" + }, + { + "refId": "B", + "expr": "sum(rate(ghostlink_blocked_requests_total{job=\"ghostlink-security\"}[5m])) or vector(0)", + "legendFormat": "blocked requests/s" + } + ], "options": { "legend": { - "calcs": [ - "lastNotNull", - "mean", - "max" - ], "displayMode": "table", "placement": "bottom", "showLegend": true @@ -428,734 +135,131 @@ "mode": "multi", "sort": "desc" } - }, - "targets": [ - { - "expr": "histogram_quantile(0.50, sum(rate(redirect_latency_seconds_bucket[5m])) by (le))", - "legendFormat": "p50", - "refId": "A" - }, - { - "expr": "histogram_quantile(0.95, sum(rate(redirect_latency_seconds_bucket[5m])) by (le))", - "legendFormat": "p95", - "refId": "B" - }, - { - "expr": "histogram_quantile(0.99, sum(rate(redirect_latency_seconds_bucket[5m])) by (le))", - "legendFormat": "p99", - "refId": "C" - } - ], - "title": "Redirect Latency (p50 / p95 / p99)", - "type": "timeseries" + } }, { + "id": 4, + "title": "Ghost traffic", + "type": "timeseries", "datasource": { "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "decimals": 2, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 0.01 - }, - { - "color": "red", - "value": 0.05 - } - ] - }, - "unit": "percentunit" - }, - "overrides": [] + "uid": "ghostlink-prometheus" }, "gridPos": { "h": 8, "w": 8, "x": 0, - "y": 15 + "y": 8 }, - "id": 3, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false + "fieldConfig": { + "defaults": { + "unit": "reqps" }, - "textMode": "auto" + "overrides": [] }, "targets": [ { - "expr": "sum(rate(destination_dead_total[5m])) / clamp_min(sum(rate(url_redirects_total[5m])), 0.001)", - "legendFormat": "error rate", - "refId": "A" + "refId": "A", + "expr": "sum(rate(ghost_probes_total[1m])) or vector(0)", + "legendFormat": "inactive URL probes/s" + }, + { + "refId": "B", + "expr": "sum(rate(ghostlink_invalid_short_code_hits_total{job=\"ghostlink-security\"}[5m])) or vector(0)", + "legendFormat": "invalid short-code hits/s" + }, + { + "refId": "C", + "expr": "sum(rate(ghostlink_repeated_user_agent_hits_total{job=\"ghostlink-security\"}[5m])) or vector(0)", + "legendFormat": "repeat UA hits/s" } ], - "title": "Error Rate", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "orange", - "value": 5 - }, - { - "color": "red", - "value": 10 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 8, - "y": 15 - }, - "id": 4, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": true - }, - "textMode": "value_and_name" - }, - "targets": [ - { - "expr": "rate(ghost_probes_total[1m]) * 60", - "legendFormat": "ghost probes/min", - "refId": "A" - }, - { - "expr": "urls_inactive_total", - "legendFormat": "inactive URLs", - "refId": "B" - } - ], - "title": "Ghost Traffic Monitor", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "SAFE" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "green", - "mode": "fixed" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "WATCHLIST" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "yellow", - "mode": "fixed" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "THREAT" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "red", - "mode": "fixed" - } - } - ] - } - ] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 16, - "y": 15 - }, - "id": 5, - "options": { - "displayLabels": [ - "name", - "percent", - "value" - ], - "legend": { - "displayMode": "table", - "placement": "right", - "showLegend": true, - "values": [ - "value", - "percent" - ] - }, - "pieType": "pie", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": true - }, - "tooltip": { - "mode": "single" - } - }, - "targets": [ - { - "expr": "sum(ghostlink_safe_links_total)", - "legendFormat": "SAFE", - "refId": "A" - }, - { - "expr": "sum(ghostlink_watchlist_links_total)", - "legendFormat": "WATCHLIST", - "refId": "B" - }, - { - "expr": "sum(ghostlink_threat_links_total)", - "legendFormat": "THREAT", - "refId": "C" - } - ], - "title": "Risk Score Distribution", - "type": "piechart" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 16, - "x": 0, - "y": 23 - }, - "id": 6, - "options": { - "legend": { - "calcs": [ - "lastNotNull", - "max" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "expr": "rate(ghost_probes_total[1m]) * 60", - "legendFormat": "ghost probes/min", - "refId": "A" - }, - { - "expr": "ghostlink_quarantined_urls_total", - "legendFormat": "quarantined URLs", - "refId": "B" - }, - { - "expr": "rate(ghostlink_blocked_requests_total[1m]) * 60", - "legendFormat": "blocked requests/min", - "refId": "C" - }, - { - "expr": "ghostlink_suspicious_clients_total", - "legendFormat": "suspicious clients", - "refId": "D" - } - ], - "title": "Threat Timeline", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "decimals": 0 - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 8, - "x": 16, - "y": 23 - }, - "id": 7, - "options": { - "cellHeight": "sm", - "footer": { - "countRows": false, - "fields": "", - "reducer": [ - "sum" - ], - "show": false - }, - "showHeader": true - }, - "targets": [ - { - "expr": "topk(10, ghostlink_suspicious_ip_score)", - "format": "table", - "instant": true, - "legendFormat": "Top suspicious IPs", - "refId": "A" - }, - { - "expr": "topk(10, ghostlink_suspicious_user_agent_hits)", - "format": "table", - "instant": true, - "legendFormat": "Top suspicious user agents", - "refId": "B" - }, - { - "expr": "topk(10, ghostlink_probed_short_code_hits)", - "format": "table", - "instant": true, - "legendFormat": "Most probed short codes", - "refId": "C" - } - ], - "title": "Suspicious Client Fingerprints", - "type": "table" - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 31 - }, - "id": 201, - "panels": [], - "title": "Release and Canary", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "unit": "reqps" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 32 - }, - "id": 202, "options": { "legend": { - "calcs": [ - "lastNotNull", - "mean", - "max" - ], - "displayMode": "table", + "displayMode": "list", "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "expr": "sum by (app_version) (rate(url_redirects_total[5m]))", - "legendFormat": "{{app_version}}", - "refId": "A" - } - ], - "title": "Canary Traffic Split by Version", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 6, - "x": 12, - "y": 32 - }, - "id": 203, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value_and_name" - }, - "targets": [ - { - "expr": "sum by (version, git_sha) (ghostlink_release_info)", - "legendFormat": "{{version}} · {{git_sha}}", - "refId": "A" - } - ], - "title": "Release Metadata (Stat)", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "decimals": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "yellow", - "value": 2 - }, - { - "color": "green", - "value": 4 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 6, - "x": 18, - "y": 32 - }, - "id": 204, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "sum" - ], - "fields": "", - "values": false - }, - "textMode": "value_and_name" - }, - "targets": [ - { - "expr": "sum(ghostlink_feature_flag_enabled)", - "legendFormat": "Enabled Flags", - "refId": "A" - } - ], - "title": "Feature Flags Enabled", - "type": "stat" - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 40 - }, - "id": 210, - "panels": [], - "title": "Recovery Scorecard", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "decimals": 2, - "unit": "m" - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 4, - "x": 0, - "y": 41 - }, - "id": 211, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value_and_name" - }, - "targets": [ - { - "expr": "mean_time_to_detect_minutes", - "legendFormat": "MTTD", - "refId": "A" - } - ], - "title": "Mean Time To Detect", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "decimals": 2, - "unit": "m" - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 4, - "x": 4, - "y": 41 - }, - "id": 212, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value_and_name" - }, - "targets": [ - { - "expr": "mean_time_to_recover_minutes", - "legendFormat": "MTTR", - "refId": "A" - } - ], - "title": "Mean Time To Recover", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "decimals": 0 - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 4, - "x": 8, - "y": 41 - }, - "id": 213, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value_and_name" - }, - "targets": [ - { - "expr": "active_alerts_total", - "legendFormat": "Active Alerts", - "refId": "A" + "showLegend": true + }, + "tooltip": { + "mode": "single" } - ], - "title": "Active Alerts", - "type": "stat" + } }, { + "id": 5, + "title": "Link health distribution", + "type": "timeseries", "datasource": { "type": "prometheus", - "uid": "prometheus" + "uid": "ghostlink-prometheus" + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 8, + "y": 8 }, "fieldConfig": { "defaults": { - "decimals": 0 + "custom": { + "drawStyle": "bars", + "lineInterpolation": "linear", + "barAlignment": 0, + "lineWidth": 1, + "fillOpacity": 60, + "gradientMode": "none", + "spanNulls": false, + "showPoints": "never", + "stacking": { + "mode": "normal", + "group": "A" + } + } }, "overrides": [] }, - "gridPos": { - "h": 5, - "w": 4, - "x": 12, - "y": 41 - }, - "id": 214, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value_and_name" - }, "targets": [ { - "expr": "sum(ghostlink_rollbacks_total)", - "legendFormat": "Rollbacks", - "refId": "A" + "refId": "A", + "expr": "ghostlink_safe_links_total{job=\"ghostlink-security\"}", + "legendFormat": "SAFE" + }, + { + "refId": "B", + "expr": "ghostlink_watchlist_links_total{job=\"ghostlink-security\"}", + "legendFormat": "WATCHLIST" + }, + { + "refId": "C", + "expr": "ghostlink_threat_links_total{job=\"ghostlink-security\"}", + "legendFormat": "THREAT" } ], - "title": "Rollbacks Triggered", - "type": "stat" + "options": { + "legend": { + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + } }, { + "id": 6, + "title": "Suspicious clients", + "type": "stat", "datasource": { "type": "prometheus", - "uid": "prometheus" + "uid": "ghostlink-prometheus" + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 16, + "y": 8 }, "fieldConfig": { "defaults": { @@ -1163,16 +267,16 @@ }, "overrides": [] }, - "gridPos": { - "h": 5, - "w": 4, - "x": 16, - "y": 41 - }, - "id": 215, + "targets": [ + { + "refId": "A", + "expr": "ghostlink_suspicious_clients_total{job=\"ghostlink-security\"}", + "legendFormat": "suspicious clients" + } + ], "options": { "colorMode": "value", - "graphMode": "none", + "graphMode": "area", "justifyMode": "auto", "orientation": "auto", "reduceOptions": { @@ -1183,122 +287,158 @@ "values": false }, "textMode": "value_and_name" + } + }, + { + "id": 7, + "title": "Feature flags status", + "type": "table", + "datasource": { + "type": "prometheus", + "uid": "ghostlink-prometheus" + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 0, + "y": 16 + }, + "fieldConfig": { + "defaults": {}, + "overrides": [] }, "targets": [ { - "expr": "sum(ghostlink_canary_failures_total)", - "legendFormat": "Canary Failures", - "refId": "A" + "refId": "A", + "expr": "max by(flag) (ghostlink_feature_flag_enabled)", + "format": "table", + "instant": true, + "legendFormat": "feature flags" } ], - "title": "Canary Failures", - "type": "stat" + "options": { + "showHeader": true, + "footer": { + "show": false, + "reducer": [ + "sum" + ], + "countRows": false, + "fields": "" + } + } }, { + "id": 8, + "title": "Release footprint by version", + "type": "timeseries", "datasource": { "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "decimals": 2, - "unit": "percentunit" - }, - "overrides": [] + "uid": "ghostlink-prometheus" }, "gridPos": { - "h": 5, - "w": 4, - "x": 20, - "y": 41 + "h": 8, + "w": 8, + "x": 8, + "y": 16 }, - "id": 216, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value_and_name" + "fieldConfig": { + "defaults": {}, + "overrides": [] }, "targets": [ { - "expr": "recovery_success_rate", - "legendFormat": "Recovery Success Rate", - "refId": "A" + "refId": "A", + "expr": "sum by(version) (ghostlink_release_info)", + "legendFormat": "{{version}}" } ], - "title": "Recovery Success Rate", - "type": "stat" + "options": { + "legend": { + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + } }, { + "id": 9, + "title": "App instance health", + "type": "table", "datasource": { "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": { - "decimals": 2, - "unit": "percentunit" - }, - "overrides": [] + "uid": "ghostlink-prometheus" }, "gridPos": { - "h": 6, - "w": 6, - "x": 0, - "y": 46 + "h": 8, + "w": 8, + "x": 16, + "y": 16 }, - "id": 217, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "value_and_name" + "fieldConfig": { + "defaults": {}, + "overrides": [] }, "targets": [ { - "expr": "clamp_max(sum(rate(url_redirects_total[5m])) / clamp_min(sum(rate(url_redirects_total[5m])) + sum(rate(destination_dead_total[5m])), 0.001), 1)", - "legendFormat": "Cache Hit Rate", - "refId": "A" + "refId": "A", + "expr": "up{job=\"ghostlink-backends\",instance=\"app1:5000\"}", + "format": "table", + "instant": true, + "legendFormat": "app1" + }, + { + "refId": "B", + "expr": "up{job=\"ghostlink-backends\",instance=\"app2:5000\"}", + "format": "table", + "instant": true, + "legendFormat": "app2" } ], - "title": "Cache Hit Rate", - "type": "stat" + "options": { + "showHeader": true, + "footer": { + "show": false, + "reducer": [ + "sum" + ], + "countRows": false, + "fields": "" + } + } }, { + "id": 10, + "title": "Canary success ratio", + "type": "stat", "datasource": { "type": "prometheus", - "uid": "prometheus" + "uid": "ghostlink-prometheus" + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 0, + "y": 24 }, "fieldConfig": { "defaults": { - "decimals": 3, - "unit": "reqps" + "unit": "percentunit", + "decimals": 2 }, "overrides": [] }, - "gridPos": { - "h": 6, - "w": 6, - "x": 6, - "y": 46 - }, - "id": 218, + "targets": [ + { + "refId": "A", + "expr": "clamp_max(sum(increase(ghostlink_canary_success_total{job=\"ghostlink-security\"}[5m])) / clamp_min(sum(increase(ghostlink_canary_success_total{job=\"ghostlink-security\"}[5m])) + sum(increase(ghostlink_canary_failures_total{job=\"ghostlink-security\"}[5m])), 1), 1)", + "legendFormat": "success ratio (5m)" + } + ], "options": { "colorMode": "value", "graphMode": "none", @@ -1312,36 +452,36 @@ "values": false }, "textMode": "value_and_name" - }, - "targets": [ - { - "expr": "sum(rate(ghostlink_blocked_requests_total[5m]))", - "legendFormat": "Quarantine Rate", - "refId": "A" - } - ], - "title": "Quarantine Rate", - "type": "stat" + } }, { + "id": 11, + "title": "Quarantine rate", + "type": "stat", "datasource": { "type": "prometheus", - "uid": "prometheus" + "uid": "ghostlink-prometheus" + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 8, + "y": 24 }, "fieldConfig": { "defaults": { - "decimals": 3, - "unit": "reqps" + "unit": "percentunit", + "decimals": 3 }, "overrides": [] }, - "gridPos": { - "h": 6, - "w": 6, - "x": 12, - "y": 46 - }, - "id": 219, + "targets": [ + { + "refId": "A", + "expr": "max(ghostlink_quarantined_urls_total{job=\"ghostlink-security\"}) / clamp_min(max(urls_active_total), 1)", + "legendFormat": "quarantine ratio" + } + ], "options": { "colorMode": "value", "graphMode": "none", @@ -1355,77 +495,72 @@ "values": false }, "textMode": "value_and_name" - }, - "targets": [ - { - "expr": "sum(rate(ghost_probes_total[5m]))", - "legendFormat": "Ghost Probe Rate", - "refId": "A" - } - ], - "title": "Ghost Probe Rate", - "type": "stat" + } }, { + "id": 12, + "title": "Blocked requests", + "type": "timeseries", "datasource": { "type": "prometheus", - "uid": "prometheus" - }, - "fieldConfig": { - "defaults": {}, - "overrides": [] + "uid": "ghostlink-prometheus" }, "gridPos": { - "h": 6, - "w": 6, - "x": 18, - "y": 46 + "h": 8, + "w": 8, + "x": 16, + "y": 24 }, - "id": 220, - "options": { - "cellHeight": "sm", - "footer": { - "countRows": false, - "fields": "", - "reducer": [ - "sum" - ], - "show": false + "fieldConfig": { + "defaults": { + "unit": "reqps" }, - "showHeader": true + "overrides": [] }, "targets": [ { - "expr": "up{job=\"ghostlink-backends\"}", - "format": "table", - "instant": true, - "legendFormat": "App Health", - "refId": "A" + "refId": "A", + "expr": "sum(rate(ghostlink_blocked_requests_total{job=\"ghostlink-security\"}[1m])) or vector(0)", + "legendFormat": "blocked requests/s" } ], - "title": "App1/App2 Health Status", - "type": "table" + "options": { + "legend": { + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + } } ], - "refresh": "15s", - "schemaVersion": 39, - "style": "dark", - "tags": [ - "ghostlink", - "sre", - "security", - "cyber-defense" - ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, "templating": { "list": [] }, - "time": { - "from": "now-30m", - "to": "now" - }, - "timezone": "browser", - "title": "GhostLink Platform Overview", - "uid": "ghostlink-overview", - "version": 3, - "weekStart": "" + "tags": [ + "ghostlink", + "command-center" + ], + "editable": true, + "graphTooltip": 0, + "links": [] } diff --git a/grafana/provisioning/dashboards/dashboard.yml b/grafana/provisioning/dashboards/dashboard.yml index d798796..8368891 100644 --- a/grafana/provisioning/dashboards/dashboard.yml +++ b/grafana/provisioning/dashboards/dashboard.yml @@ -1,12 +1,12 @@ apiVersion: 1 providers: - - name: GhostLink Dashboards + - name: "GhostLink Dashboards" orgId: 1 - folder: GhostLink + folder: "GhostLink" type: file disableDeletion: false editable: true - updateIntervalSeconds: 15 + updateIntervalSeconds: 10 options: path: /var/lib/grafana/dashboards diff --git a/grafana/provisioning/datasources/prometheus.yml b/grafana/provisioning/datasources/prometheus.yml index 00f9915..39833cf 100644 --- a/grafana/provisioning/datasources/prometheus.yml +++ b/grafana/provisioning/datasources/prometheus.yml @@ -2,9 +2,9 @@ apiVersion: 1 datasources: - name: Prometheus - uid: prometheus type: prometheus + uid: ghostlink-prometheus access: proxy url: http://prometheus:9090 isDefault: true - editable: false + editable: true diff --git a/logs/nginx/access.log b/logs/nginx/access.log index 116f809..e2751dc 100644 --- a/logs/nginx/access.log +++ b/logs/nginx/access.log @@ -83172,3 +83172,365 @@ {"time":"2026-04-05T07:00:56+00:00","timestamp":"2026-04-05T07:00:56+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"be173728b147b95e6ac367684099ee2b","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":39,"request_time":0.009,"upstream_addr":"172.18.0.5:5000","upstream_response_time":"0.009","http_referer":"","http_user_agent":"Wget"} {"time":"2026-04-05T07:01:11+00:00","timestamp":"2026-04-05T07:01:11+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"f6d068a1b49e8dc314799ac537fdf5bd","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":39,"request_time":0.008,"upstream_addr":"172.18.0.4:5000","upstream_response_time":"0.007","http_referer":"","http_user_agent":"Wget"} {"time":"2026-04-05T07:01:26+00:00","timestamp":"2026-04-05T07:01:26+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"4e3284300465fc9f45f1b5e11fa2f6d8","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":39,"request_time":0.009,"upstream_addr":"172.18.0.5:5000","upstream_response_time":"0.009","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:41:07+00:00","timestamp":"2026-04-05T13:41:07+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"8224bda72ecaafd08de2b9cfbd3d38d8","request":"GET /health-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.003,"upstream_addr":"172.18.0.3:5000, 172.18.0.5:5000","upstream_response_time":"0.002, 0.001","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:41:07+00:00","timestamp":"2026-04-05T13:41:07+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"f4cb271e65e9891cc57162f7b61cdae4","request":"GET /promo-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.001,"upstream_addr":"172.18.0.3:5000, 172.18.0.5:5000","upstream_response_time":"0.000, 0.001","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:41:07+00:00","timestamp":"2026-04-05T13:41:07+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"ba15a1215b7606becde585c686130390","request":"GET /checkout-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.002,"upstream_addr":"172.18.0.3:5000, 172.18.0.5:5000","upstream_response_time":"0.000, 0.002","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:41:07+00:00","timestamp":"2026-04-05T13:41:07+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"7665567d9d1f73a989b3ec4de0f2ab81","request":"GET /dashboard-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.001,"upstream_addr":"172.18.0.3:5000, 172.18.0.5:5000","upstream_response_time":"0.000, 0.001","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:41:10+00:00","timestamp":"2026-04-05T13:41:10+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"41cef0849e6b0e4627df8d4145160899","request":"GET /support-demo HTTP/1.1","status":200,"body_bytes_sent":39,"request_time":2.578,"upstream_addr":"172.18.0.3:5000","upstream_response_time":"2.578","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:41:12+00:00","timestamp":"2026-04-05T13:41:12+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"c038a910f69c9672289f21c3ae7bb273","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":39,"request_time":0.090,"upstream_addr":"172.18.0.3:5000","upstream_response_time":"0.090","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:41:27+00:00","timestamp":"2026-04-05T13:41:27+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"05279f3806a98c81e387b7a53ea56d86","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":39,"request_time":0.018,"upstream_addr":"172.18.0.3:5000","upstream_response_time":"0.018","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:41:42+00:00","timestamp":"2026-04-05T13:41:42+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"c53fc9b7b34f00e22e8069c123571dd9","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":39,"request_time":0.010,"upstream_addr":"172.18.0.3:5000","upstream_response_time":"0.010","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:41:57+00:00","timestamp":"2026-04-05T13:41:57+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"8ee050b231edd6159ab44dc464ab3ee8","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":39,"request_time":0.009,"upstream_addr":"172.18.0.3:5000","upstream_response_time":"0.009","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:42:10+00:00","timestamp":"2026-04-05T13:42:10+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"38faf14ed149fcc3c6db889d7ed533e3","request":"GET /health-demo HTTP/1.1","status":200,"body_bytes_sent":39,"request_time":0.010,"upstream_addr":"172.18.0.3:5000","upstream_response_time":"0.009","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:42:10+00:00","timestamp":"2026-04-05T13:42:10+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"c35ec3a5ab41bac45b0be897320b8573","request":"GET /promo-demo HTTP/1.1","status":200,"body_bytes_sent":39,"request_time":0.014,"upstream_addr":"172.18.0.3:5000","upstream_response_time":"0.014","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:42:10+00:00","timestamp":"2026-04-05T13:42:10+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"c7a17ea2a53c01d8c31b6f91939ae7e1","request":"GET /checkout-demo HTTP/1.1","status":200,"body_bytes_sent":39,"request_time":0.009,"upstream_addr":"172.18.0.3:5000","upstream_response_time":"0.009","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:42:10+00:00","timestamp":"2026-04-05T13:42:10+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"22c6c24a381f0b52030c13d464a6accd","request":"GET /dashboard-demo HTTP/1.1","status":200,"body_bytes_sent":39,"request_time":0.009,"upstream_addr":"172.18.0.3:5000","upstream_response_time":"0.009","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:42:10+00:00","timestamp":"2026-04-05T13:42:10+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"9e7c2a1e13ee8eb1aece483d1c3a5bda","request":"GET /support-demo HTTP/1.1","status":200,"body_bytes_sent":39,"request_time":0.009,"upstream_addr":"172.18.0.3:5000","upstream_response_time":"0.008","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:42:12+00:00","timestamp":"2026-04-05T13:42:12+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"9b7436b3474aecc17030bafe732a1f49","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":39,"request_time":0.015,"upstream_addr":"172.18.0.3:5000","upstream_response_time":"0.016","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:42:27+00:00","timestamp":"2026-04-05T13:42:27+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"afd949bef6eef664266f8235afdc8bb2","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":39,"request_time":0.008,"upstream_addr":"172.18.0.3:5000","upstream_response_time":"0.008","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:42:42+00:00","timestamp":"2026-04-05T13:42:42+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"4d9eb50f040cf96106e784df283420a8","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":39,"request_time":0.014,"upstream_addr":"172.18.0.5:5000","upstream_response_time":"0.013","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:43:07+00:00","timestamp":"2026-04-05T13:43:07+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"8636040afd134a3a4bff70a648699d7a","request":"GET /health HTTP/1.1","status":504,"body_bytes_sent":167,"request_time":10.011,"upstream_addr":"172.18.0.5:5000, 172.18.0.3:5000","upstream_response_time":"5.006, 5.007","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:43:10+00:00","timestamp":"2026-04-05T13:43:10+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"e5f292d1a467bdaf019b9c59ee91784d","request":"GET /health-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:43:11+00:00","timestamp":"2026-04-05T13:43:11+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"4ec8948b5c6b91920c5eb3a7bf000f08","request":"GET /promo-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:43:11+00:00","timestamp":"2026-04-05T13:43:11+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"d17b7f17c5866792d7235e1853f7120e","request":"GET /checkout-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:43:11+00:00","timestamp":"2026-04-05T13:43:11+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"f60627095a5ffcad980c3a50dbc94da4","request":"GET /dashboard-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:43:11+00:00","timestamp":"2026-04-05T13:43:11+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"2afc4f6287757351dfa04e409f382cf1","request":"GET /support-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:43:17+00:00","timestamp":"2026-04-05T13:43:17+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"e5366ece6b24b1767ef9d32f10a71c24","request":"GET /health HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.001,"upstream_addr":"172.18.0.5:5000, ghostlink_app","upstream_response_time":"0.001, 0.000","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:43:40+00:00","timestamp":"2026-04-05T13:43:40+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"36912378d27255d6ce332eb00b9e1614","request":"GET /health HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":8.083,"upstream_addr":"172.18.0.3:5000, 172.18.0.5:5000","upstream_response_time":"5.005, 3.078","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:44:02+00:00","timestamp":"2026-04-05T13:44:02+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"a528061f54295a3334c3a0bdf7db261f","request":"GET /health HTTP/1.1","status":504,"body_bytes_sent":167,"request_time":10.006,"upstream_addr":"172.18.0.3:5000, 172.18.0.5:5000","upstream_response_time":"5.005, 5.004","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:44:12+00:00","timestamp":"2026-04-05T13:44:12+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"f7430d555cf78688b3aeca698ee77bb9","request":"GET /health HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:44:17+00:00","timestamp":"2026-04-05T13:44:17+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"1f9d235903ba2f9efc840e9e935fa27a","request":"GET /health-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":6.128,"upstream_addr":"172.18.0.3:5000, 172.18.0.5:5000","upstream_response_time":"3.056, 3.072","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:44:17+00:00","timestamp":"2026-04-05T13:44:17+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"967984b7cc32a69e1c91a2251269f23b","request":"GET /promo-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:44:17+00:00","timestamp":"2026-04-05T13:44:17+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"27fe3e2d4945ffb1fa5a2a87fd156554","request":"GET /checkout-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:44:17+00:00","timestamp":"2026-04-05T13:44:17+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"3834063a89ad067c682776bcff50c899","request":"GET /dashboard-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:44:17+00:00","timestamp":"2026-04-05T13:44:17+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"94dc583783d83eff4a56a6ad1b98faad","request":"GET /support-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:44:34+00:00","timestamp":"2026-04-05T13:44:34+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"5aa57027521cf8e3efbe5c023d1d33aa","request":"GET /health HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":6.137,"upstream_addr":"172.18.0.5:5000, 172.18.0.3:5000","upstream_response_time":"3.067, 3.072","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:44:58+00:00","timestamp":"2026-04-05T13:44:58+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"b40f20e39aef8ec5d2cd939bd33b699d","request":"GET /health HTTP/1.1","status":504,"body_bytes_sent":167,"request_time":10.009,"upstream_addr":"172.18.0.5:5000, 172.18.0.3:5000","upstream_response_time":"5.003, 5.006","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:45:14+00:00","timestamp":"2026-04-05T13:45:14+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"666c60fde9a31098bd4fdcfb90ddc0c5","request":"GET /health HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":6.147,"upstream_addr":"172.18.0.5:5000, 172.18.0.3:5000","upstream_response_time":"3.076, 3.072","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:45:18+00:00","timestamp":"2026-04-05T13:45:18+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"43032749ae13100dc21bf0099fcdd6b5","request":"GET /health-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:45:18+00:00","timestamp":"2026-04-05T13:45:18+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"12e6bbbaccaf2df95ebc4114f5e29df6","request":"GET /promo-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:45:18+00:00","timestamp":"2026-04-05T13:45:18+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"a53944a329c34687d09f13ed4e4076f1","request":"GET /checkout-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:45:18+00:00","timestamp":"2026-04-05T13:45:18+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"7c10a24efb863d721ef7e3bcce4ca284","request":"GET /dashboard-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:45:18+00:00","timestamp":"2026-04-05T13:45:18+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"a721d1e5c321c59bffeafd58d9023dca","request":"GET /support-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:45:34+00:00","timestamp":"2026-04-05T13:45:34+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"000a3f5438f7042bf546a4fd7ab14380","request":"GET /health HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":6.136,"upstream_addr":"172.18.0.5:5000, 172.18.0.3:5000","upstream_response_time":"3.062, 3.076","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:45:58+00:00","timestamp":"2026-04-05T13:45:58+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"48648e66a225592ee8279de241a3628f","request":"GET /health HTTP/1.1","status":504,"body_bytes_sent":167,"request_time":10.004,"upstream_addr":"172.18.0.5:5000, 172.18.0.3:5000","upstream_response_time":"5.001, 5.003","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:46:14+00:00","timestamp":"2026-04-05T13:46:14+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"7a677bd72d7cdfd2260ed78f6876ed23","request":"GET /health HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":6.131,"upstream_addr":"172.18.0.5:5000, 172.18.0.3:5000","upstream_response_time":"3.059, 3.072","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:46:18+00:00","timestamp":"2026-04-05T13:46:18+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"f4b716ac4d5835221abe2ce72199a41a","request":"GET /health-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:46:18+00:00","timestamp":"2026-04-05T13:46:18+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"f4880790ede092a463dadb978bfe08ab","request":"GET /promo-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:46:18+00:00","timestamp":"2026-04-05T13:46:18+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"46cc5a0c89cb979806b1b0ca815df08b","request":"GET /checkout-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:46:18+00:00","timestamp":"2026-04-05T13:46:18+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"97257f6071ac79fd700008a4a8e15bc4","request":"GET /dashboard-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:46:18+00:00","timestamp":"2026-04-05T13:46:18+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"fd271887e4d01560b3da541f8afb70e1","request":"GET /support-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:46:34+00:00","timestamp":"2026-04-05T13:46:34+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"27b8491196ff8b5803f938b5d69e2b46","request":"GET /health HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":6.151,"upstream_addr":"172.18.0.5:5000, 172.18.0.3:5000","upstream_response_time":"3.081, 3.072","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:46:58+00:00","timestamp":"2026-04-05T13:46:58+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"47d679d93b501fd8030a4573aabb6adf","request":"GET /health HTTP/1.1","status":504,"body_bytes_sent":167,"request_time":10.012,"upstream_addr":"172.18.0.5:5000, 172.18.0.3:5000","upstream_response_time":"5.006, 5.006","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:47:14+00:00","timestamp":"2026-04-05T13:47:14+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"0bad9dcb37ee31f1f7d65089b8adaadf","request":"GET /health HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":6.135,"upstream_addr":"172.18.0.5:5000, 172.18.0.3:5000","upstream_response_time":"3.064, 3.072","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:47:19+00:00","timestamp":"2026-04-05T13:47:19+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"c0e0bddec5ace440abf77d4cecf0acd9","request":"GET /health-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:47:19+00:00","timestamp":"2026-04-05T13:47:19+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"3471e8afa969f1ddef24965ccaa22e5d","request":"GET /promo-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:47:19+00:00","timestamp":"2026-04-05T13:47:19+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"84344c930a0eb7f9685cf043caca9c4e","request":"GET /checkout-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:47:19+00:00","timestamp":"2026-04-05T13:47:19+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"13085b0a9eb26b7006239309527c0dc4","request":"GET /dashboard-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:47:19+00:00","timestamp":"2026-04-05T13:47:19+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"77073c63036c2bac0d17b1ebd19034e9","request":"GET /support-demo HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":0.000,"upstream_addr":"ghostlink_app","upstream_response_time":"0.000","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:47:34+00:00","timestamp":"2026-04-05T13:47:34+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"fb81acde53817e050d8db05eafa4cde1","request":"GET /health HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":6.136,"upstream_addr":"172.18.0.5:5000, 172.18.0.3:5000","upstream_response_time":"3.065, 3.072","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:47:50+00:00","timestamp":"2026-04-05T13:47:50+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"8a53c3b7c5b53e97a6ccec6708e83765","request":"GET /health HTTP/1.1","status":502,"body_bytes_sent":157,"request_time":2.029,"upstream_addr":"172.18.0.5:5000, 172.18.0.3:5000","upstream_response_time":"2.027, 0.001","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:48:05+00:00","timestamp":"2026-04-05T13:48:05+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"10e9484bc8cd116d84a5a92f0593fa4b","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.009,"upstream_addr":"172.18.0.5:5000","upstream_response_time":"0.009","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:48:19+00:00","timestamp":"2026-04-05T13:48:19+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"c8a1f18eb0342ec04cc7c9d35581da6b","request":"GET /health-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.008,"upstream_addr":"172.18.0.5:5000","upstream_response_time":"0.008","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:48:19+00:00","timestamp":"2026-04-05T13:48:19+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"743489f191702c6e52d9b2af04fcf137","request":"GET /promo-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.008,"upstream_addr":"172.18.0.3:5000","upstream_response_time":"0.008","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:48:19+00:00","timestamp":"2026-04-05T13:48:19+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"d461371cd47d78528f09a83b6eef85b8","request":"GET /checkout-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.008,"upstream_addr":"172.18.0.3:5000","upstream_response_time":"0.008","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:48:19+00:00","timestamp":"2026-04-05T13:48:19+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"475d03433c9b59189ff94dc569b94c57","request":"GET /dashboard-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.008,"upstream_addr":"172.18.0.5:5000","upstream_response_time":"0.008","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:48:19+00:00","timestamp":"2026-04-05T13:48:19+00:00","log_level":"info","remote_addr":"172.18.0.9","request_id":"9d84cb52d31e18cd7d564d18079c9fc8","request":"GET /support-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.010,"upstream_addr":"172.18.0.3:5000","upstream_response_time":"0.010","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:48:21+00:00","timestamp":"2026-04-05T13:48:21+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"eb3b041b48eb49b0675b9760e1da9bd1","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.009,"upstream_addr":"172.18.0.5:5000","upstream_response_time":"0.009","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:48:26+00:00","timestamp":"2026-04-05T13:48:26+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"5cf0dd912aaf6c0b1770fb9aa9860ff4","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.008,"upstream_addr":"172.18.0.5:5000","upstream_response_time":"0.008","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T13:48:36+00:00","timestamp":"2026-04-05T13:48:36+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"a37e59f1ddd2ac0eada753f8cb410e42","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.009,"upstream_addr":"172.18.0.3:5000","upstream_response_time":"0.009","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:56:20+00:00","timestamp":"2026-04-05T13:56:20+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"13ef987d57a53fdc5c8d5200eee722ce","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.013,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.013","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:56:21+00:00","timestamp":"2026-04-05T13:56:21+00:00","log_level":"info","remote_addr":"172.18.0.8","request_id":"c9001b63b8ae217e850fbc1b0596e180","request":"GET /health-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.010,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.010","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:56:21+00:00","timestamp":"2026-04-05T13:56:21+00:00","log_level":"info","remote_addr":"172.18.0.8","request_id":"edbc49db275d6dc85debbb7606628a0b","request":"GET /promo-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.010,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.009","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:56:21+00:00","timestamp":"2026-04-05T13:56:21+00:00","log_level":"info","remote_addr":"172.18.0.8","request_id":"72457fc578aa09eb5cc8c9ed05674337","request":"GET /checkout-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.011,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.011","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:56:22+00:00","timestamp":"2026-04-05T13:56:22+00:00","log_level":"info","remote_addr":"172.18.0.8","request_id":"c095c30eb964f92d611d0d40eaafb16a","request":"GET /dashboard-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.013,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.013","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:56:22+00:00","timestamp":"2026-04-05T13:56:22+00:00","log_level":"info","remote_addr":"172.18.0.8","request_id":"1fcbaed3accdde56fb810f042512f4bd","request":"GET /support-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.010,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.009","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T13:56:35+00:00","timestamp":"2026-04-05T13:56:35+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"586635b34999215bf0860405693b2e82","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.008,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.008","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T13:56:50+00:00","timestamp":"2026-04-05T13:56:50+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"c88b26dd03408d7858a46cd7fda23adc","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.011,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.010","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:21:53+00:00","timestamp":"2026-04-05T14:21:53+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"0ed929fb0cf72b474a871a1f8317d1af","request":"GET /health-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":1.863,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"1.863","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:21:53+00:00","timestamp":"2026-04-05T14:21:53+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"87ffca8d6fd75db1aeb183524ca1521b","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.052,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.052","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:21:53+00:00","timestamp":"2026-04-05T14:21:53+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"712d9db4a5d314dca79cf12532ee66dd","request":"GET /promo-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.032,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.032","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:21:54+00:00","timestamp":"2026-04-05T14:21:54+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"1fcc01e68788e4f4200013c72824735c","request":"GET /checkout-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.066,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.066","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:21:54+00:00","timestamp":"2026-04-05T14:21:54+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"b2d3fcfb06d7c226e894c1b71b84884e","request":"GET /dashboard-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.025,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.025","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:21:54+00:00","timestamp":"2026-04-05T14:21:54+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"ba18ce5bf255da9b13fc95dc1d24a306","request":"GET /support-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.027,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.028","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:22:11+00:00","timestamp":"2026-04-05T14:22:11+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"04d47e34e9dffa281e7e966e7054d6a4","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.013,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.013","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:22:26+00:00","timestamp":"2026-04-05T14:22:26+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"b81d96846f12d87d945dca3ab6969ca0","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.009,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.009","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:22:41+00:00","timestamp":"2026-04-05T14:22:41+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"f60ce86ba515fd37afc2c97550ebae38","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.018,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.017","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:22:58+00:00","timestamp":"2026-04-05T14:22:58+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"a513b2f1d6be7bd378181c53dcf54d03","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.016,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.016","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:22:58+00:00","timestamp":"2026-04-05T14:22:58+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"5a7036610d63a6ca9edc3a7200d8ac1b","request":"GET /health-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.012,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.012","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:22:59+00:00","timestamp":"2026-04-05T14:22:59+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"c855b66a2e0d6942b210d5f4da7dd97a","request":"GET /promo-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.013,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.013","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:22:59+00:00","timestamp":"2026-04-05T14:22:59+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"9c7841eeee31d4c7797b617415b5ba6b","request":"GET /checkout-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.012,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.012","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:22:59+00:00","timestamp":"2026-04-05T14:22:59+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"6cab857706789bc9542bdf238dee5d41","request":"GET /dashboard-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.012,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.012","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:22:59+00:00","timestamp":"2026-04-05T14:22:59+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"8bec3d73cd972692091c0ec26eafebbc","request":"GET /support-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.014,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.015","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:23:11+00:00","timestamp":"2026-04-05T14:23:11+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"9c8d949f0f5d4d61352d939079754648","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.015,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.015","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:23:26+00:00","timestamp":"2026-04-05T14:23:26+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"78867ea6f7c0af6225d002d5b6776a52","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.012,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.012","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:23:41+00:00","timestamp":"2026-04-05T14:23:41+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"d194dd4ef3238de4aee117ff7229a0f9","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.015,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.015","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:23:56+00:00","timestamp":"2026-04-05T14:23:56+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"ae37f6e56f49eee7ee3c6f3b8c80e1dd","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.012,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.013","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:23:57+00:00","timestamp":"2026-04-05T14:23:57+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"0b2a2145c9385ec6fb75fe7b9c9eef40","request":"GET /health-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.011,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.011","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:23:57+00:00","timestamp":"2026-04-05T14:23:57+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"a7ba781f5844b37f5d4ac2057c422d5c","request":"GET /promo-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.011,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.011","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:23:57+00:00","timestamp":"2026-04-05T14:23:57+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"00d71be9d716bd3015cada8ecbab4bc1","request":"GET /checkout-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.011,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.011","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:23:57+00:00","timestamp":"2026-04-05T14:23:57+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"c51c165c6e87dbd8b039f948f552c110","request":"GET /dashboard-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.011,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.011","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:23:57+00:00","timestamp":"2026-04-05T14:23:57+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"3d64b5569adc1dc15a70c4f781d1deda","request":"GET /support-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.011,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.011","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:24:11+00:00","timestamp":"2026-04-05T14:24:11+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"6004296c838afce6b5cfcb492bedd808","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.015,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.015","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:24:26+00:00","timestamp":"2026-04-05T14:24:26+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"6bf77423eaea81734d3d73f72dc93146","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.018,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.018","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:24:41+00:00","timestamp":"2026-04-05T14:24:41+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"6f80403f648e23107b447389b6059d6a","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.015,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.015","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:24:56+00:00","timestamp":"2026-04-05T14:24:56+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"9f931207e44369bf540b5c58e7e3774b","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.022,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.022","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:24:57+00:00","timestamp":"2026-04-05T14:24:57+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"143567110dcade2347e7330557459508","request":"GET /health-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.015,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.015","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:24:58+00:00","timestamp":"2026-04-05T14:24:58+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"2572bd10f8b236ff8c368a718b1e12d6","request":"GET /promo-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.014,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.015","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:24:58+00:00","timestamp":"2026-04-05T14:24:58+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"620f3e7c2170a54eb9d29170385368ec","request":"GET /checkout-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.012,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.012","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:24:58+00:00","timestamp":"2026-04-05T14:24:58+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"db148d26614f3bda28ae304e135a434a","request":"GET /dashboard-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.014,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.014","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:24:58+00:00","timestamp":"2026-04-05T14:24:58+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"37060124fc6451730aaf10e06024d52c","request":"GET /support-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.011,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.011","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:25:11+00:00","timestamp":"2026-04-05T14:25:11+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"ce574e17995f8663cee72d6039ddacca","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.011,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.012","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:25:26+00:00","timestamp":"2026-04-05T14:25:26+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"2e050c9a5fcb931dc23def647b33afb8","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.016,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.016","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:25:42+00:00","timestamp":"2026-04-05T14:25:42+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"d26f7a32d150c96f70ae966647a55ce3","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.017,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.018","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:25:57+00:00","timestamp":"2026-04-05T14:25:57+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"48a904215b315b4ed5c5d34f12030c4b","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.014,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.014","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:25:58+00:00","timestamp":"2026-04-05T14:25:58+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"bc3a54f3fbb58b60610568f6a392b17c","request":"GET /health-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.016,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.016","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:25:58+00:00","timestamp":"2026-04-05T14:25:58+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"ff8bcb60d2c1d35f59006708b7989b7c","request":"GET /promo-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.017,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.017","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:25:58+00:00","timestamp":"2026-04-05T14:25:58+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"a868901db36a951dedfc1f95482e772d","request":"GET /checkout-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.013,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.013","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:25:59+00:00","timestamp":"2026-04-05T14:25:59+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"e4e9d129e1dc55baae549ad329c96f18","request":"GET /dashboard-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.015,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.015","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:25:59+00:00","timestamp":"2026-04-05T14:25:59+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"e1b6577610f1c2f8a80e0f3dc4326158","request":"GET /support-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.013,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.013","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:26:12+00:00","timestamp":"2026-04-05T14:26:12+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"d6e0185d335dedbd3a7498d446eb49f9","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.012,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.013","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:26:27+00:00","timestamp":"2026-04-05T14:26:27+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"27cce68ae9f897a6659d3e27abebc46d","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.017,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.017","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:26:42+00:00","timestamp":"2026-04-05T14:26:42+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"7ce4697dfb68e378b65a787cbadb2bf9","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.013,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.013","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:26:57+00:00","timestamp":"2026-04-05T14:26:57+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"1851784a57d68f3efff84caa1ea430f8","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.028,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.028","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:26:59+00:00","timestamp":"2026-04-05T14:26:59+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"1b83b203260f107f05ef4958aa3f1d9a","request":"GET /health-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.021,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.021","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:26:59+00:00","timestamp":"2026-04-05T14:26:59+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"a0c1df5cd1bfbd55d69f8674c4100b83","request":"GET /promo-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.011,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.012","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:26:59+00:00","timestamp":"2026-04-05T14:26:59+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"bba4f6a27e6a36c1da8cbd590e75f61f","request":"GET /checkout-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.013,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.012","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:26:59+00:00","timestamp":"2026-04-05T14:26:59+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"686e14094f76abffe9cfb40572f13dff","request":"GET /dashboard-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.012,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.012","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:26:59+00:00","timestamp":"2026-04-05T14:26:59+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"63673356534db166d6b0c76ddadc968e","request":"GET /support-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.012,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.012","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:27:12+00:00","timestamp":"2026-04-05T14:27:12+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"5703fd15c4a4450e8c6ebf13227a01f0","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.016,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.016","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:27:27+00:00","timestamp":"2026-04-05T14:27:27+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"7997b00d3cc28b786c351caf31e5fdc0","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.017,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.016","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:27:42+00:00","timestamp":"2026-04-05T14:27:42+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"609661c3ad6cc4d355944b756244ad1c","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.011,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.011","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:27:58+00:00","timestamp":"2026-04-05T14:27:58+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"36d1dffb38d648f25c1a8a4275df8198","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.010,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.010","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:28:00+00:00","timestamp":"2026-04-05T14:28:00+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"e967f6960c3bdf70b638e171a20646d5","request":"GET /health-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.016,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.016","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:28:00+00:00","timestamp":"2026-04-05T14:28:00+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"23291bac88f5d8ea28a600869bd6f704","request":"GET /promo-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.011,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.012","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:28:00+00:00","timestamp":"2026-04-05T14:28:00+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"9ef87283b9589b55d03894137da3e902","request":"GET /checkout-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.012,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.012","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:28:00+00:00","timestamp":"2026-04-05T14:28:00+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"d6b53f77bb3bf4f6d7ca7a5181696e68","request":"GET /dashboard-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.019,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.019","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:28:00+00:00","timestamp":"2026-04-05T14:28:00+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"ca9a96a1d6960b6ed80e39fcf8a9aa3d","request":"GET /support-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.025,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.025","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:28:07+00:00","timestamp":"2026-04-05T14:28:07+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"f3ab12083ee9d20499baa7d79bc67566","request":"GET /dRT8sC HTTP/1.1","status":404,"body_bytes_sent":33,"request_time":0.030,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.029","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:28:07+00:00","timestamp":"2026-04-05T14:28:07+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"6fcc67ca8c64f0bb3ba7ae0f594d6b0c","request":"GET /qb4bcj HTTP/1.1","status":404,"body_bytes_sent":33,"request_time":0.025,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.025","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:28:08+00:00","timestamp":"2026-04-05T14:28:08+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"f97bc23159aa48e26027b032e968f4c5","request":"GET /WIk2iR HTTP/1.1","status":404,"body_bytes_sent":33,"request_time":0.025,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.025","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:28:08+00:00","timestamp":"2026-04-05T14:28:08+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"187c19acda1a8232894aa1b5903b4caf","request":"GET /qXWAtH HTTP/1.1","status":404,"body_bytes_sent":33,"request_time":0.025,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.025","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:28:08+00:00","timestamp":"2026-04-05T14:28:08+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"9cf01344caabfac5c4bd127e830a79da","request":"GET /pbcWWT HTTP/1.1","status":404,"body_bytes_sent":33,"request_time":0.023,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.023","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:28:08+00:00","timestamp":"2026-04-05T14:28:08+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"c43cf4b3f99612fcc9d391d27f1a3572","request":"GET /kKowZS HTTP/1.1","status":404,"body_bytes_sent":33,"request_time":0.026,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.027","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:28:08+00:00","timestamp":"2026-04-05T14:28:08+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"be1536e81ca644b47a442f7ecb8a47ec","request":"GET /wmGLJr HTTP/1.1","status":404,"body_bytes_sent":33,"request_time":0.030,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.030","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:28:08+00:00","timestamp":"2026-04-05T14:28:08+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"4f0c8ad98eadde767e29fcea3a7deecd","request":"GET /HSTGus HTTP/1.1","status":404,"body_bytes_sent":33,"request_time":0.029,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.029","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:28:08+00:00","timestamp":"2026-04-05T14:28:08+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"6965c754a2e8d52b921d8ffdfbb67cd6","request":"GET /4eHbIt HTTP/1.1","status":404,"body_bytes_sent":33,"request_time":0.027,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.026","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:28:08+00:00","timestamp":"2026-04-05T14:28:08+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"1bc8ba044274e3c6a912a9356599ba06","request":"GET /TBtc9g HTTP/1.1","status":404,"body_bytes_sent":33,"request_time":0.039,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.040","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:28:08+00:00","timestamp":"2026-04-05T14:28:08+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"65e05bbd4018684fcf2f744583feafa4","request":"GET /cLSKlH HTTP/1.1","status":404,"body_bytes_sent":33,"request_time":0.030,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.029","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:28:08+00:00","timestamp":"2026-04-05T14:28:08+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"cd74bc9751a4c99addd044370d9db73a","request":"GET /SFPlQk HTTP/1.1","status":404,"body_bytes_sent":33,"request_time":0.021,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.021","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:28:08+00:00","timestamp":"2026-04-05T14:28:08+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"ca6bfb5f441ba127b31eb53e5a6102e2","request":"GET /HJixca HTTP/1.1","status":404,"body_bytes_sent":33,"request_time":0.019,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.019","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:28:08+00:00","timestamp":"2026-04-05T14:28:08+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"fbf11e90fcb4903af21d38fc2a746331","request":"GET /MwoO1M HTTP/1.1","status":404,"body_bytes_sent":33,"request_time":0.021,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.022","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:28:09+00:00","timestamp":"2026-04-05T14:28:09+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"ea40a5340b16b46e0791e77c0714636a","request":"GET /KI7caO HTTP/1.1","status":404,"body_bytes_sent":33,"request_time":0.029,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.029","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:28:09+00:00","timestamp":"2026-04-05T14:28:09+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"36c3f334acd46a77c2d8f04898f3d461","request":"GET /ISvC4m HTTP/1.1","status":404,"body_bytes_sent":33,"request_time":0.032,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.031","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:28:09+00:00","timestamp":"2026-04-05T14:28:09+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"d89e48828eb44906aaa5f90aa8abff37","request":"GET /YMmKrD HTTP/1.1","status":404,"body_bytes_sent":33,"request_time":0.023,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.024","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:28:09+00:00","timestamp":"2026-04-05T14:28:09+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"3752d0b13dd1ef6131f534773f38c8c7","request":"GET /Ssf9Pu HTTP/1.1","status":404,"body_bytes_sent":33,"request_time":0.033,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.034","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:28:09+00:00","timestamp":"2026-04-05T14:28:09+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"d10177667464eb3cf59ffdc5f443a8e8","request":"GET /lB2SDP HTTP/1.1","status":404,"body_bytes_sent":33,"request_time":0.068,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.069","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:28:09+00:00","timestamp":"2026-04-05T14:28:09+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"8733491b09a85c75233bdb69fcd8ba21","request":"GET /QtccpN HTTP/1.1","status":404,"body_bytes_sent":33,"request_time":0.026,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.025","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:28:13+00:00","timestamp":"2026-04-05T14:28:13+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"514a6ae5a0f3c822dd1ad3675afab8f8","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.017,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.017","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:28:27+00:00","timestamp":"2026-04-05T14:28:27+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"46dada90b76e03f4a895d5f6bcae857e","request":"HEAD /dRT8sC HTTP/1.1","status":404,"body_bytes_sent":0,"request_time":0.036,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.036","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:28:27+00:00","timestamp":"2026-04-05T14:28:27+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"25055e2322552f093174c774ab37ba65","request":"HEAD /qb4bcj HTTP/1.1","status":404,"body_bytes_sent":0,"request_time":0.046,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.046","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:28:27+00:00","timestamp":"2026-04-05T14:28:27+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"1637c091802cb0464535deffd732aafe","request":"HEAD /WIk2iR HTTP/1.1","status":404,"body_bytes_sent":0,"request_time":0.042,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.043","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:28:28+00:00","timestamp":"2026-04-05T14:28:28+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"18df626eb0d45d42c9819b2e1e442009","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.017,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.018","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:28:43+00:00","timestamp":"2026-04-05T14:28:43+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"c219207fd245ca15ee58088c221a4dcd","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.021,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.022","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:28:58+00:00","timestamp":"2026-04-05T14:28:58+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"acb991f6aaa141529a8d94db5fa82b7a","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.014,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.014","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:29:00+00:00","timestamp":"2026-04-05T14:29:00+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"ff1b8cf0d2b1bef715f853cc6b43f2ac","request":"GET /health-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.020,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.020","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:29:00+00:00","timestamp":"2026-04-05T14:29:00+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"915339c8bfd446ecef410940605de694","request":"GET /promo-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.012,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.013","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:29:01+00:00","timestamp":"2026-04-05T14:29:01+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"034952b070314287848dc7f36e8184a9","request":"GET /checkout-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.015,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.014","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:29:01+00:00","timestamp":"2026-04-05T14:29:01+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"68ac6cb7164b9e9fb2ca42a9b562df0f","request":"GET /dashboard-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.015,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.015","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:29:01+00:00","timestamp":"2026-04-05T14:29:01+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"3890af14d321d50640596598836b9fa5","request":"GET /support-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.015,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.015","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:29:13+00:00","timestamp":"2026-04-05T14:29:13+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"a19665d4589eb84d48fcd23d45dc8cb7","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.014,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.014","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:29:28+00:00","timestamp":"2026-04-05T14:29:28+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"6f46d2543e31a9ac77961a437c9c924c","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.014,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.014","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:29:43+00:00","timestamp":"2026-04-05T14:29:43+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"9356fd5ab7f44cb1ae008564e404ed69","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.018,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.017","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:29:58+00:00","timestamp":"2026-04-05T14:29:58+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"e8bd611566e1638b02b7a38ab77e912c","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.012,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.013","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:30:01+00:00","timestamp":"2026-04-05T14:30:01+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"56e3fbb352efe9010fabcc052e857b18","request":"GET /health-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.011,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.011","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:30:01+00:00","timestamp":"2026-04-05T14:30:01+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"82cfa8df850dda3d3989af3c6701da3b","request":"GET /promo-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.014,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.015","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:30:01+00:00","timestamp":"2026-04-05T14:30:01+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"31fa231055eff7af0ebe851dde766e57","request":"GET /checkout-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.014,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.014","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:30:01+00:00","timestamp":"2026-04-05T14:30:01+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"464e1e7a76b16bd745a93dc33e8e788d","request":"GET /dashboard-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.011,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.011","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:30:02+00:00","timestamp":"2026-04-05T14:30:02+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"76d856911fa9ce93d124b52c15bea7a4","request":"GET /support-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.011,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.012","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:30:11+00:00","timestamp":"2026-04-05T14:30:11+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"d548b4377feb96cb174096e8127ff946","request":"POST /shorten HTTP/1.1","status":201,"body_bytes_sent":33,"request_time":0.087,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.087","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:11+00:00","timestamp":"2026-04-05T14:30:11+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"1b4e386b24897346e5bbf43122439290","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.030,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.030","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:11+00:00","timestamp":"2026-04-05T14:30:11+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"374ab5b8a4dd1aaf02fdeed0079218d3","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.031,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.031","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:11+00:00","timestamp":"2026-04-05T14:30:11+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"d2612c3e265a072c78057d1eecfb2769","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.033,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.032","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:11+00:00","timestamp":"2026-04-05T14:30:11+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"1539102ec198079fb9d7212544a28173","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.024,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.025","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:11+00:00","timestamp":"2026-04-05T14:30:11+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"b40fb17aa658674114fb54d5c8dfc1c3","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.026,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.026","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:11+00:00","timestamp":"2026-04-05T14:30:11+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"015bfe46e15b9181eaec8172d373542e","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.021,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.021","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:11+00:00","timestamp":"2026-04-05T14:30:11+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"5763bf07d7217395276de4a66edc8c4d","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.023,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.023","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:11+00:00","timestamp":"2026-04-05T14:30:11+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"5902318845542b88f988c3465182a89b","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.028,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.028","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:12+00:00","timestamp":"2026-04-05T14:30:12+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"3d88f6ac62a615d8a860abb43b6e8dea","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.027,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.027","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:12+00:00","timestamp":"2026-04-05T14:30:12+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"c376a2475f0d2b01e98dd490ec060a09","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.025,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.025","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:12+00:00","timestamp":"2026-04-05T14:30:12+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"f7fce850ae42ed3daedea1f797caf614","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.030,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.031","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:12+00:00","timestamp":"2026-04-05T14:30:12+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"69d16da85b8c5bec9c31887790e5c9cf","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.024,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.023","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:12+00:00","timestamp":"2026-04-05T14:30:12+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"145c2aae262ce1fa7bdf24d9e084c8a0","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.035,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.035","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:12+00:00","timestamp":"2026-04-05T14:30:12+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"1d731429766cac37cc904f1e5464a3c8","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.032,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.032","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:12+00:00","timestamp":"2026-04-05T14:30:12+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"73d046d28f2633e15bd8937cae8c2980","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.044,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.044","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:12+00:00","timestamp":"2026-04-05T14:30:12+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"3795ee70da53fb8f2d84f44817c0050a","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.035,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.035","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:12+00:00","timestamp":"2026-04-05T14:30:12+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"d1dd547208e044af936b07cc6ce429f8","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.029,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.030","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:12+00:00","timestamp":"2026-04-05T14:30:12+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"2e4f238d2c8c1c850ce9bce3a907042d","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.030,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.030","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:12+00:00","timestamp":"2026-04-05T14:30:12+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"002f274cd487297991d35405477788c5","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.025,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.025","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:12+00:00","timestamp":"2026-04-05T14:30:12+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"11bacce4a4159af4f1b49fa7f8883eac","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.027,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.027","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:12+00:00","timestamp":"2026-04-05T14:30:12+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"c3c0413b9593298fba78ccf754935881","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.025,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.025","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:12+00:00","timestamp":"2026-04-05T14:30:12+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"cd4c9ea5192072285a7b2c48d0ddfd96","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.030,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.029","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:12+00:00","timestamp":"2026-04-05T14:30:12+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"567a18dc76a893339ac72b61b927c290","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.052,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.053","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:13+00:00","timestamp":"2026-04-05T14:30:13+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"4f9002b5015d838ffb1d704327b83acd","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.034,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.034","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:13+00:00","timestamp":"2026-04-05T14:30:13+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"f3659b724a8b36c36549a3f7059cf6e3","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.026,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.026","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:13+00:00","timestamp":"2026-04-05T14:30:13+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"6c9c11d0935eea7d872f5337b805fb33","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.031,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.031","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:13+00:00","timestamp":"2026-04-05T14:30:13+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"14e119bbf7c8a12443bb8167256269f1","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.032,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.032","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:13+00:00","timestamp":"2026-04-05T14:30:13+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"c461d8304c0cdbd9e5ef336380bb706e","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.027,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.027","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:13+00:00","timestamp":"2026-04-05T14:30:13+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"ee1445d686b98dbd4edafae2aa94b535","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.034,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.033","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:13+00:00","timestamp":"2026-04-05T14:30:13+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"b6eab0a822e3ba6d94913254899e44b2","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.043,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.043","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:13+00:00","timestamp":"2026-04-05T14:30:13+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"13c7c255d8563353a25a0675327e4c11","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.022,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.023","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:13+00:00","timestamp":"2026-04-05T14:30:13+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"dd11100b4532d80c78061610a985794b","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.025,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.024","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:13+00:00","timestamp":"2026-04-05T14:30:13+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"1dd8738f06b136584477ce95c6611ddf","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.025,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.025","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:13+00:00","timestamp":"2026-04-05T14:30:13+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"58fdbc6897f2a7757e39217f2db15e7a","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.026,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.027","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:13+00:00","timestamp":"2026-04-05T14:30:13+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"8c59324f1d07515f484cd6789f92ae19","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.037,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.038","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:13+00:00","timestamp":"2026-04-05T14:30:13+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"eb28602b36ad4812452dca6c41658d50","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.043,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.043","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:13+00:00","timestamp":"2026-04-05T14:30:13+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"5e4952673a3a20621ec7b08c5820aa0c","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.042,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.043","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:14+00:00","timestamp":"2026-04-05T14:30:14+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"5516e70d862feef54f5ee2e6e2a7a6ed","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.036,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.036","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:14+00:00","timestamp":"2026-04-05T14:30:14+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"886c38a8f20e642fd775536b4a55581d","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.015,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.015","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:30:14+00:00","timestamp":"2026-04-05T14:30:14+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"c4504cb898e47ad381ab78806b2054fc","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.026,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.025","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:14+00:00","timestamp":"2026-04-05T14:30:14+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"49e99d5e4d27a17f5225087fbc43a7de","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.042,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.042","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:14+00:00","timestamp":"2026-04-05T14:30:14+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"bc2f7a94f2f255304d1c538ee201120b","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.042,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.042","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:14+00:00","timestamp":"2026-04-05T14:30:14+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"8d471bde834f0902ee684297e216aad7","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.039,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.040","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:14+00:00","timestamp":"2026-04-05T14:30:14+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"cf6b58343f0619541ba61c0d68cfad8a","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.042,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.042","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:14+00:00","timestamp":"2026-04-05T14:30:14+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"6d4aae19520633434971bef47b83449c","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.044,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.044","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:14+00:00","timestamp":"2026-04-05T14:30:14+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"d2e58b3bc5c413431cb9c6e1333e8bb2","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.041,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.041","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:14+00:00","timestamp":"2026-04-05T14:30:14+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"3ca93d72b11bb581cb724495b2acc01f","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.055,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.056","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:14+00:00","timestamp":"2026-04-05T14:30:14+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"a9300f5def81b792bc6ec5f9e9d81c24","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.043,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.043","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:14+00:00","timestamp":"2026-04-05T14:30:14+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"7f4ae0beee53ac042f5bcc0793ae107a","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.043,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.043","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:15+00:00","timestamp":"2026-04-05T14:30:15+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"7605776db63c1b28427e92bdc13324fa","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.046,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.046","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:15+00:00","timestamp":"2026-04-05T14:30:15+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"14b25dff303e6090324638a25a37f6ca","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.043,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.044","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:15+00:00","timestamp":"2026-04-05T14:30:15+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"26fbb21d1c8de5076859d6bf52cba4e0","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.046,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.045","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:15+00:00","timestamp":"2026-04-05T14:30:15+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"cefba16850d9969b0f2e360853347804","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.031,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.031","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:15+00:00","timestamp":"2026-04-05T14:30:15+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"c59ceacfad3896e2354951494567bcca","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.032,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.032","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:15+00:00","timestamp":"2026-04-05T14:30:15+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"e9b7223e11fc35fdd7f1e6efcda457e3","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.042,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.041","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:15+00:00","timestamp":"2026-04-05T14:30:15+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"c384292f28e43a7e9119400f4de52dd8","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.045,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.044","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:15+00:00","timestamp":"2026-04-05T14:30:15+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"872b810c9c7a846d88b9efdb69207434","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.044,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.045","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:15+00:00","timestamp":"2026-04-05T14:30:15+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"9b716896d1d8098ba0a752eb3f424415","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.043,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.042","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:15+00:00","timestamp":"2026-04-05T14:30:15+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"e51ee8012585c9f740e1acf2468a485e","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.041,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.041","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:15+00:00","timestamp":"2026-04-05T14:30:15+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"f27942d81c38eff7179b18b1be66fb82","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.043,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.042","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:16+00:00","timestamp":"2026-04-05T14:30:16+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"366cf436d4ba2476ada01189ccfe1388","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.054,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.053","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:16+00:00","timestamp":"2026-04-05T14:30:16+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"da152c341a3a83e63107e67b8c04af9d","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.044,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.044","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:16+00:00","timestamp":"2026-04-05T14:30:16+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"ce3de30fe1041c9295162f2fe42a79e6","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.048,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.049","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:16+00:00","timestamp":"2026-04-05T14:30:16+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"dbc43e0a12d30c53645b13dcb2464a6d","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.033,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.033","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:16+00:00","timestamp":"2026-04-05T14:30:16+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"a760308396c6edb7cb34a971e5f2f677","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.030,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.030","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:16+00:00","timestamp":"2026-04-05T14:30:16+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"7e67962c4bc106b40c7f4f4d2d8ed072","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.026,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.025","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:16+00:00","timestamp":"2026-04-05T14:30:16+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"25dbbaff302fc7f2d011b5e2652e63b5","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.028,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.028","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:16+00:00","timestamp":"2026-04-05T14:30:16+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"318d22e6cbc0f659d96cbe64f1fa61c5","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.029,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.029","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:16+00:00","timestamp":"2026-04-05T14:30:16+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"9c02b2b5b8c426cfa49b5b7a3ba624f9","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.040,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.041","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:16+00:00","timestamp":"2026-04-05T14:30:16+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"ed3bca5e3cfc038a68c47c27bdeff27f","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.044,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.045","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:16+00:00","timestamp":"2026-04-05T14:30:16+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"3296cba242873ba0e6b85decbae064fe","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.043,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.043","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:16+00:00","timestamp":"2026-04-05T14:30:16+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"79ce3992e2e7eeb318ef25d5b020221f","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.047,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.048","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:16+00:00","timestamp":"2026-04-05T14:30:16+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"32e4aa3b20f36f45976be0992632c095","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.042,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.042","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:17+00:00","timestamp":"2026-04-05T14:30:17+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"dded17870bc6de3b746c4b813a920de7","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.046,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.046","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:17+00:00","timestamp":"2026-04-05T14:30:17+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"c5ce2e5d9dff046b924c2b190443cd07","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.040,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.039","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:17+00:00","timestamp":"2026-04-05T14:30:17+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"84182eaf60f4c2fa0330e3203ed08432","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.029,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.029","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:17+00:00","timestamp":"2026-04-05T14:30:17+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"91ef141846cf36ed5a40b393a5e7b1e3","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.044,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.045","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:17+00:00","timestamp":"2026-04-05T14:30:17+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"efac97d834f1eb1dc5b98ad6edf01702","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.039,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.039","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:17+00:00","timestamp":"2026-04-05T14:30:17+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"b334aa9f1eb3597686a04ebe3e3ce593","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.060,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.060","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:17+00:00","timestamp":"2026-04-05T14:30:17+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"415a3e268804a1429f3e36c76dc78b7a","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.025,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.025","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:17+00:00","timestamp":"2026-04-05T14:30:17+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"055b52305c1040a96826ac42d8b5d9e6","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.028,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.029","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:17+00:00","timestamp":"2026-04-05T14:30:17+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"287535467fa3dddc1f0ca7b468d29917","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.042,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.042","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:17+00:00","timestamp":"2026-04-05T14:30:17+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"555ba24ce0a076e7f61159bcb4dd71a7","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.040,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.041","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:17+00:00","timestamp":"2026-04-05T14:30:17+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"e61fc21559b0730fa8d7d05467678602","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.044,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.044","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:17+00:00","timestamp":"2026-04-05T14:30:17+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"0415d2a8c2e87faf5569caa8b5faba30","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.044,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.044","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:18+00:00","timestamp":"2026-04-05T14:30:18+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"42e3f3056e27e8379790afb704687ed3","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.048,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.049","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:18+00:00","timestamp":"2026-04-05T14:30:18+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"566148f010b9c59711ef0f303b9382e7","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.040,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.041","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:18+00:00","timestamp":"2026-04-05T14:30:18+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"861dace56640872726c74cb97cbec7fc","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.049,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.049","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:18+00:00","timestamp":"2026-04-05T14:30:18+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"640ae424662c95e77ad6f12c16e80333","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.046,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.046","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:18+00:00","timestamp":"2026-04-05T14:30:18+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"0fdb46ea1bbe875347d948d0bc423eee","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.038,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.038","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:18+00:00","timestamp":"2026-04-05T14:30:18+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"b6a32aec39825c551976fd99cfe27857","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.055,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.054","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:18+00:00","timestamp":"2026-04-05T14:30:18+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"e342bcc3e424ab4d78c3b28ac6d12535","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.027,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.027","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:18+00:00","timestamp":"2026-04-05T14:30:18+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"98ba8e9ebdb898a0c975a3f1f0fe9b1b","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.024,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.023","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:18+00:00","timestamp":"2026-04-05T14:30:18+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"aab49ee22572e8ad6e87e7249e8a8ca3","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.022,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.023","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:18+00:00","timestamp":"2026-04-05T14:30:18+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"3e6b791ad2b73aa42518a9f373db2d92","request":"GET /fgQp3a HTTP/1.1","status":503,"body_bytes_sent":197,"request_time":0.000,"upstream_addr":"","upstream_response_time":"","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:18+00:00","timestamp":"2026-04-05T14:30:18+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"ae8b9c6d8461341c5c559298a1fcd72e","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.028,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.028","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:18+00:00","timestamp":"2026-04-05T14:30:18+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"b3dfbc9afb3eb072911a34968c7f60d2","request":"GET /fgQp3a HTTP/1.1","status":503,"body_bytes_sent":197,"request_time":0.000,"upstream_addr":"","upstream_response_time":"","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:18+00:00","timestamp":"2026-04-05T14:30:18+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"f087ed9737afd8c73582b33dd62ab405","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.025,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.025","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:18+00:00","timestamp":"2026-04-05T14:30:18+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"7e3500c719570fc5a42b1c5547da70b6","request":"GET /fgQp3a HTTP/1.1","status":503,"body_bytes_sent":197,"request_time":0.000,"upstream_addr":"","upstream_response_time":"","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:18+00:00","timestamp":"2026-04-05T14:30:18+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"4ee5be24b317022dd50d8e6e10c74722","request":"GET /fgQp3a HTTP/1.1","status":503,"body_bytes_sent":197,"request_time":0.000,"upstream_addr":"","upstream_response_time":"","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:19+00:00","timestamp":"2026-04-05T14:30:19+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"d2c06cb60dd98c84f48569652a8f5e0d","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.025,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.024","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:19+00:00","timestamp":"2026-04-05T14:30:19+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"7033e675dda9412d2dfc079cef97fded","request":"GET /fgQp3a HTTP/1.1","status":503,"body_bytes_sent":197,"request_time":0.000,"upstream_addr":"","upstream_response_time":"","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:19+00:00","timestamp":"2026-04-05T14:30:19+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"01c2e5065b01ffacc09402d5690b0303","request":"GET /fgQp3a HTTP/1.1","status":503,"body_bytes_sent":197,"request_time":0.000,"upstream_addr":"","upstream_response_time":"","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:19+00:00","timestamp":"2026-04-05T14:30:19+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"57d951dbc9e7f0f67351dd41b4295ab7","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.027,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.027","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:19+00:00","timestamp":"2026-04-05T14:30:19+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"b40cca82fea3817e5acdbd26d64a621d","request":"GET /fgQp3a HTTP/1.1","status":503,"body_bytes_sent":197,"request_time":0.000,"upstream_addr":"","upstream_response_time":"","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:19+00:00","timestamp":"2026-04-05T14:30:19+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"a0d7d251f80105b36732c107d571abd7","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.038,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.037","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:19+00:00","timestamp":"2026-04-05T14:30:19+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"9711202ccef5800503f58850b3df845c","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.076,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.075","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:19+00:00","timestamp":"2026-04-05T14:30:19+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"86ba434e43f06909cbd9e5e74d7551d6","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.037,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.037","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:19+00:00","timestamp":"2026-04-05T14:30:19+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"53ceb4001d181fe079ab3e09a2cc916c","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.031,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.030","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:19+00:00","timestamp":"2026-04-05T14:30:19+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"0641f0ce4ebabbbf0bc48cafbe2245e3","request":"GET /fgQp3a HTTP/1.1","status":503,"body_bytes_sent":197,"request_time":0.000,"upstream_addr":"","upstream_response_time":"","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:19+00:00","timestamp":"2026-04-05T14:30:19+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"30fc5fc21940cf645959166ca3e10748","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.029,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.030","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:19+00:00","timestamp":"2026-04-05T14:30:19+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"c8f5b017bf980710f92364e11efff386","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.034,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.034","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:19+00:00","timestamp":"2026-04-05T14:30:19+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"ae3c34a71bd7ef46dda7290c5ba6e182","request":"GET /fgQp3a HTTP/1.1","status":503,"body_bytes_sent":197,"request_time":0.000,"upstream_addr":"","upstream_response_time":"","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:19+00:00","timestamp":"2026-04-05T14:30:19+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"5e118916135ff4352ff6c9b0d6fba009","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.044,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.044","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:19+00:00","timestamp":"2026-04-05T14:30:19+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"379099295b683924647f2eccb08e4ab4","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.040,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.041","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:20+00:00","timestamp":"2026-04-05T14:30:20+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"7ebaa2463634fec5ae9391776dd8b232","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.051,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.052","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:20+00:00","timestamp":"2026-04-05T14:30:20+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"20623f92d45126bf24933fe163fca6e0","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.038,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.038","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:20+00:00","timestamp":"2026-04-05T14:30:20+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"ab31ece06c31d47638252f8f2bd53758","request":"GET /fgQp3a HTTP/1.1","status":503,"body_bytes_sent":197,"request_time":0.000,"upstream_addr":"","upstream_response_time":"","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:20+00:00","timestamp":"2026-04-05T14:30:20+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"89b04a4cfff06259343497577a67e2a0","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.047,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.047","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:20+00:00","timestamp":"2026-04-05T14:30:20+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"2b2b8301719b3c498942d61502866063","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.043,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.043","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:20+00:00","timestamp":"2026-04-05T14:30:20+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"88e270695028d81d5532a033f0303f40","request":"GET /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":263,"request_time":0.047,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.048","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:29+00:00","timestamp":"2026-04-05T14:30:29+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"fda658c3580e617dd9e754ffc788cc00","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.011,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.012","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:30:44+00:00","timestamp":"2026-04-05T14:30:44+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"d5bb294521951db0ed961a8814975edc","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.013,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.014","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:30:58+00:00","timestamp":"2026-04-05T14:30:58+00:00","log_level":"info","remote_addr":"172.18.0.1","request_id":"89e63fb6edd27e196c016c3412c3b591","request":"HEAD /fgQp3a HTTP/1.1","status":302,"body_bytes_sent":0,"request_time":0.028,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.028","http_referer":"","http_user_agent":"curl/8.18.0"} +{"time":"2026-04-05T14:30:59+00:00","timestamp":"2026-04-05T14:30:59+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"1b2cebecd1ab4ac18c0a250fd015a5a4","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.019,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.019","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:31:02+00:00","timestamp":"2026-04-05T14:31:02+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"0d91af00a3a736c1ebcbba55c2766229","request":"GET /health-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.017,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.017","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:31:02+00:00","timestamp":"2026-04-05T14:31:02+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"a3dec1ac7662e83f133a008ddf8443f2","request":"GET /promo-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.013,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.012","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:31:02+00:00","timestamp":"2026-04-05T14:31:02+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"374ca49e37f0ef4481763d332ee713df","request":"GET /checkout-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.011,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.012","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:31:02+00:00","timestamp":"2026-04-05T14:31:02+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"152be36ac6832095a820ae04326588ab","request":"GET /dashboard-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.019,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.019","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:31:02+00:00","timestamp":"2026-04-05T14:31:02+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"85d5a41b2d77011e23dad26721f58718","request":"GET /support-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.011,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.012","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:31:14+00:00","timestamp":"2026-04-05T14:31:14+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"366a1e41cc06516f1aedb1f8249875a9","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.014,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.015","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:31:29+00:00","timestamp":"2026-04-05T14:31:29+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"bd788f33e40282a28482932fb81e132c","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.017,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.017","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:31:44+00:00","timestamp":"2026-04-05T14:31:44+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"ab090851f60b85ad062cdf50c584d80e","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.013,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.013","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:31:59+00:00","timestamp":"2026-04-05T14:31:59+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"0c40f1a19c719585da5c18937f2ebc62","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.013,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.013","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:32:02+00:00","timestamp":"2026-04-05T14:32:02+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"cefb2d473ac238d343e84df91c05cea2","request":"GET /health-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.017,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.017","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:32:03+00:00","timestamp":"2026-04-05T14:32:03+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"a2602582f9121567377c0c39dca5b3df","request":"GET /promo-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.013,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.013","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:32:03+00:00","timestamp":"2026-04-05T14:32:03+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"4019e80cf451c60aa5f00652225ffbbd","request":"GET /checkout-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.014,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.014","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:32:03+00:00","timestamp":"2026-04-05T14:32:03+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"373c9f809bf64878086a5a40e1324853","request":"GET /dashboard-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.013,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.013","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:32:03+00:00","timestamp":"2026-04-05T14:32:03+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"e949f9e183317557d379567dbf30c97b","request":"GET /support-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.015,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.015","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:32:14+00:00","timestamp":"2026-04-05T14:32:14+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"8dcc8a3989f3a17d614a1d0b186fb010","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.020,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.020","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:32:30+00:00","timestamp":"2026-04-05T14:32:30+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"238d4ad0e84d0d8daa877b12fabe4216","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.018,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.018","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:32:45+00:00","timestamp":"2026-04-05T14:32:45+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"c365595f846ceb37ab135d20beae9644","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.015,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.015","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:33:00+00:00","timestamp":"2026-04-05T14:33:00+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"f1a6e25d80f8f701d1ff954d3a99cf87","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.018,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.018","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:33:03+00:00","timestamp":"2026-04-05T14:33:03+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"4a8be0ca202ef1a8ea0efff6b706899c","request":"GET /health-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.018,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.018","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:33:03+00:00","timestamp":"2026-04-05T14:33:03+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"5e997e823afe78ca7e82d95d7a650a49","request":"GET /promo-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.012,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.012","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:33:04+00:00","timestamp":"2026-04-05T14:33:04+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"de35bc34f8d77d65be21da30a630ed4a","request":"GET /checkout-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.039,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.039","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:33:04+00:00","timestamp":"2026-04-05T14:33:04+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"58ed9af48266209446f2b59a6be87df7","request":"GET /dashboard-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.011,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.010","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:33:04+00:00","timestamp":"2026-04-05T14:33:04+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"5073130902053632ad04b2a7bf9d5464","request":"GET /support-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.014,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.014","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:33:15+00:00","timestamp":"2026-04-05T14:33:15+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"718f487393d40c2953cd4d65ae1b56d3","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.019,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.019","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:33:30+00:00","timestamp":"2026-04-05T14:33:30+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"2d736d94138df6a837c526e4d5cadea2","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.015,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.015","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:33:45+00:00","timestamp":"2026-04-05T14:33:45+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"12334a6d8db55c2bd34cc39a7a9550ab","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.018,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.019","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:34:00+00:00","timestamp":"2026-04-05T14:34:00+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"dde908246b9992aab9226361c81556c6","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.014,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.014","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:34:04+00:00","timestamp":"2026-04-05T14:34:04+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"e2ee997c41236a8c801f356ced692455","request":"GET /health-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.014,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.014","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:34:04+00:00","timestamp":"2026-04-05T14:34:04+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"bb11a0f388e73d12b77de28135c45202","request":"GET /promo-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.013,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.013","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:34:04+00:00","timestamp":"2026-04-05T14:34:04+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"88d86d507b6edc772c448f556d766abd","request":"GET /checkout-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.019,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.019","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:34:04+00:00","timestamp":"2026-04-05T14:34:04+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"98903118c974e6ac471092754028b3f8","request":"GET /dashboard-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.014,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.015","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:34:05+00:00","timestamp":"2026-04-05T14:34:05+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"610ca0002fc56d044aaad1044044aa23","request":"GET /support-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.024,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.023","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:34:15+00:00","timestamp":"2026-04-05T14:34:15+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"ce3733a5c6e7a3b2261098f3664d9bdd","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.018,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.018","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:34:31+00:00","timestamp":"2026-04-05T14:34:31+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"9bb8a5fec176a6e37725aefc5db807f8","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.013,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.012","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:34:46+00:00","timestamp":"2026-04-05T14:34:46+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"92b1c5f3d3c676052f88372a88491b23","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.014,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.014","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:35:01+00:00","timestamp":"2026-04-05T14:35:01+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"acdddac5e72caa4c1b7e389eabc2c311","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.019,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.018","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:35:05+00:00","timestamp":"2026-04-05T14:35:05+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"b3e4bf54df5cb04a1349d011e5e0a6d3","request":"GET /health-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.016,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.017","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:35:05+00:00","timestamp":"2026-04-05T14:35:05+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"740bf36be3e7096c26793f73c523b988","request":"GET /promo-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.024,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.023","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:35:05+00:00","timestamp":"2026-04-05T14:35:05+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"7859aa487a4a28fb0b79084114f9488d","request":"GET /checkout-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.018,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.018","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:35:05+00:00","timestamp":"2026-04-05T14:35:05+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"9cd7d56e9f55fafc6b1225599fb1dff5","request":"GET /dashboard-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.015,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.015","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:35:05+00:00","timestamp":"2026-04-05T14:35:05+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"1e325f3b646ef28bd8a96c792726e35e","request":"GET /support-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.013,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.013","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:35:16+00:00","timestamp":"2026-04-05T14:35:16+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"b0e6cd35e8b4bf38648b3760ef45c55c","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.022,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.022","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:35:31+00:00","timestamp":"2026-04-05T14:35:31+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"858ebde6f79e203fd861ed239a373db7","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.022,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.022","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:35:46+00:00","timestamp":"2026-04-05T14:35:46+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"437ccc7d6228e43c7cd8ad796737e0c2","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.015,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.015","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:36:01+00:00","timestamp":"2026-04-05T14:36:01+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"fe5c7296abaee6a813ab4252109bfc1b","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.014,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.013","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:36:06+00:00","timestamp":"2026-04-05T14:36:06+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"67f41848c4e41c8bea07dc3eb4d69ff8","request":"GET /health-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.027,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.027","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:36:06+00:00","timestamp":"2026-04-05T14:36:06+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"39541bc0e97793287fc1f2a7c4ca3c80","request":"GET /promo-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.014,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.014","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:36:06+00:00","timestamp":"2026-04-05T14:36:06+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"ec21f5f0a0f82c2fc5f5939e3755eee8","request":"GET /checkout-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.024,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.024","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:36:06+00:00","timestamp":"2026-04-05T14:36:06+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"82b183ee281cb6f6ecacc02d7c18d201","request":"GET /dashboard-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.013,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.013","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:36:06+00:00","timestamp":"2026-04-05T14:36:06+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"37ae1d7f213efbcb303733b5c7e72f7f","request":"GET /support-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.011,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.010","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:36:16+00:00","timestamp":"2026-04-05T14:36:16+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"5b7d831a96dfb0ca3ddc843c74887889","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.013,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.013","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:36:32+00:00","timestamp":"2026-04-05T14:36:32+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"8f6013f8d8f282ae4901d0aa54b9c337","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.016,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.016","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:36:47+00:00","timestamp":"2026-04-05T14:36:47+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"facfd2bc75c03bfd67305ba0ada83150","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.014,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.014","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:37:02+00:00","timestamp":"2026-04-05T14:37:02+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"8818a0f80546e7ae069467c53e53069c","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.013,"upstream_addr":"172.18.0.8:5000","upstream_response_time":"0.013","http_referer":"","http_user_agent":"Wget"} +{"time":"2026-04-05T14:37:06+00:00","timestamp":"2026-04-05T14:37:06+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"da7716bd312e91a4ea142de3c9f5ccab","request":"GET /health-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.011,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.011","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:37:06+00:00","timestamp":"2026-04-05T14:37:06+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"5471efb4aee59df907317f37678ebf9e","request":"GET /promo-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.015,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.014","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:37:07+00:00","timestamp":"2026-04-05T14:37:07+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"31ff9b6dade41eb1a59ded189b2235d7","request":"GET /checkout-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.015,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.015","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:37:07+00:00","timestamp":"2026-04-05T14:37:07+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"81289a79b36f5a26148db99e444d44a8","request":"GET /dashboard-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.012,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.012","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:37:07+00:00","timestamp":"2026-04-05T14:37:07+00:00","log_level":"info","remote_addr":"172.18.0.4","request_id":"c36b0b6b729587abd88bd829859ee24c","request":"GET /support-demo HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.011,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.011","http_referer":"","http_user_agent":"Python-urllib/3.13"} +{"time":"2026-04-05T14:37:17+00:00","timestamp":"2026-04-05T14:37:17+00:00","log_level":"info","remote_addr":"127.0.0.1","request_id":"84a1fa5158091fb27456ba0d79758fe1","request":"GET /health HTTP/1.1","status":200,"body_bytes_sent":425,"request_time":0.018,"upstream_addr":"172.18.0.6:5000","upstream_response_time":"0.018","http_referer":"","http_user_agent":"Wget"} diff --git a/logs/nginx/error.log b/logs/nginx/error.log index 6178c07..dbed64a 100644 --- a/logs/nginx/error.log +++ b/logs/nginx/error.log @@ -79172,3 +79172,137 @@ 2026/04/05 05:47:20 [error] 22#22: *2556 limiting requests, excess: 20.400 by zone "ghostlink_per_ip", client: 172.18.0.1, server: _, request: "POST /shorten HTTP/1.1", host: "host.docker.internal" 2026/04/05 05:47:20 [error] 23#23: *2567 limiting requests, excess: 20.390 by zone "ghostlink_per_ip", client: 172.18.0.1, server: _, request: "GET /eYk7sj HTTP/1.1", host: "host.docker.internal" 2026/04/05 06:56:22 [notice] 2709#2709: signal process started +2026/04/05 13:19:00 [error] 22#22: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.4, server: _, request: "GET /health-demo HTTP/1.1", upstream: "http://172.18.0.8:5000/health", host: "nginx" +2026/04/05 13:19:00 [warn] 22#22: *1 upstream server temporarily disabled while connecting to upstream, client: 172.18.0.4, server: _, request: "GET /health-demo HTTP/1.1", upstream: "http://172.18.0.8:5000/health", host: "nginx" +2026/04/05 13:19:00 [error] 22#22: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.4, server: _, request: "GET /health-demo HTTP/1.1", upstream: "http://172.18.0.11:5000/health", host: "nginx" +2026/04/05 13:19:00 [warn] 22#22: *1 upstream server temporarily disabled while connecting to upstream, client: 172.18.0.4, server: _, request: "GET /health-demo HTTP/1.1", upstream: "http://172.18.0.11:5000/health", host: "nginx" +2026/04/05 13:19:01 [error] 23#23: *4 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.4, server: _, request: "GET /promo-demo HTTP/1.1", upstream: "http://172.18.0.8:5000/health", host: "nginx" +2026/04/05 13:19:01 [warn] 23#23: *4 upstream server temporarily disabled while connecting to upstream, client: 172.18.0.4, server: _, request: "GET /promo-demo HTTP/1.1", upstream: "http://172.18.0.8:5000/health", host: "nginx" +2026/04/05 13:19:01 [error] 23#23: *4 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.4, server: _, request: "GET /promo-demo HTTP/1.1", upstream: "http://172.18.0.11:5000/health", host: "nginx" +2026/04/05 13:19:01 [warn] 23#23: *4 upstream server temporarily disabled while connecting to upstream, client: 172.18.0.4, server: _, request: "GET /promo-demo HTTP/1.1", upstream: "http://172.18.0.11:5000/health", host: "nginx" +2026/04/05 13:19:01 [error] 24#24: *7 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.4, server: _, request: "GET /checkout-demo HTTP/1.1", upstream: "http://172.18.0.8:5000/health", host: "nginx" +2026/04/05 13:19:01 [warn] 24#24: *7 upstream server temporarily disabled while connecting to upstream, client: 172.18.0.4, server: _, request: "GET /checkout-demo HTTP/1.1", upstream: "http://172.18.0.8:5000/health", host: "nginx" +2026/04/05 13:19:01 [error] 24#24: *7 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.4, server: _, request: "GET /checkout-demo HTTP/1.1", upstream: "http://172.18.0.11:5000/health", host: "nginx" +2026/04/05 13:19:01 [warn] 24#24: *7 upstream server temporarily disabled while connecting to upstream, client: 172.18.0.4, server: _, request: "GET /checkout-demo HTTP/1.1", upstream: "http://172.18.0.11:5000/health", host: "nginx" +2026/04/05 13:19:01 [error] 25#25: *10 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.4, server: _, request: "GET /dashboard-demo HTTP/1.1", upstream: "http://172.18.0.8:5000/health", host: "nginx" +2026/04/05 13:19:01 [warn] 25#25: *10 upstream server temporarily disabled while connecting to upstream, client: 172.18.0.4, server: _, request: "GET /dashboard-demo HTTP/1.1", upstream: "http://172.18.0.8:5000/health", host: "nginx" +2026/04/05 13:19:01 [error] 25#25: *10 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.4, server: _, request: "GET /dashboard-demo HTTP/1.1", upstream: "http://172.18.0.11:5000/health", host: "nginx" +2026/04/05 13:19:01 [warn] 25#25: *10 upstream server temporarily disabled while connecting to upstream, client: 172.18.0.4, server: _, request: "GET /dashboard-demo HTTP/1.1", upstream: "http://172.18.0.11:5000/health", host: "nginx" +2026/04/05 13:19:01 [error] 26#26: *13 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.4, server: _, request: "GET /support-demo HTTP/1.1", upstream: "http://172.18.0.8:5000/health", host: "nginx" +2026/04/05 13:19:01 [warn] 26#26: *13 upstream server temporarily disabled while connecting to upstream, client: 172.18.0.4, server: _, request: "GET /support-demo HTTP/1.1", upstream: "http://172.18.0.8:5000/health", host: "nginx" +2026/04/05 13:19:01 [error] 26#26: *13 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.4, server: _, request: "GET /support-demo HTTP/1.1", upstream: "http://172.18.0.11:5000/health", host: "nginx" +2026/04/05 13:19:01 [warn] 26#26: *13 upstream server temporarily disabled while connecting to upstream, client: 172.18.0.4, server: _, request: "GET /support-demo HTTP/1.1", upstream: "http://172.18.0.11:5000/health", host: "nginx" +2026/04/05 13:41:07 [error] 22#22: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /health-demo HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "nginx" +2026/04/05 13:41:07 [warn] 22#22: *1 upstream server temporarily disabled while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /health-demo HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "nginx" +2026/04/05 13:41:07 [error] 22#22: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /health-demo HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "nginx" +2026/04/05 13:41:07 [warn] 22#22: *1 upstream server temporarily disabled while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /health-demo HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "nginx" +2026/04/05 13:41:07 [error] 24#24: *4 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /promo-demo HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "nginx" +2026/04/05 13:41:07 [warn] 24#24: *4 upstream server temporarily disabled while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /promo-demo HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "nginx" +2026/04/05 13:41:07 [error] 24#24: *4 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /promo-demo HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "nginx" +2026/04/05 13:41:07 [warn] 24#24: *4 upstream server temporarily disabled while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /promo-demo HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "nginx" +2026/04/05 13:41:07 [error] 25#25: *7 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /checkout-demo HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "nginx" +2026/04/05 13:41:07 [warn] 25#25: *7 upstream server temporarily disabled while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /checkout-demo HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "nginx" +2026/04/05 13:41:07 [error] 25#25: *7 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /checkout-demo HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "nginx" +2026/04/05 13:41:07 [warn] 25#25: *7 upstream server temporarily disabled while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /checkout-demo HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "nginx" +2026/04/05 13:41:07 [error] 23#23: *10 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /dashboard-demo HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "nginx" +2026/04/05 13:41:07 [warn] 23#23: *10 upstream server temporarily disabled while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /dashboard-demo HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "nginx" +2026/04/05 13:41:07 [error] 23#23: *10 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /dashboard-demo HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "nginx" +2026/04/05 13:41:07 [warn] 23#23: *10 upstream server temporarily disabled while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /dashboard-demo HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "nginx" +2026/04/05 13:43:02 [warn] 22#22: *39 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:43:02 [error] 22#22: *39 upstream timed out (110: Operation timed out) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:43:07 [warn] 22#22: *39 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:43:07 [error] 22#22: *39 upstream timed out (110: Operation timed out) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:43:10 [error] 22#22: *42 no live upstreams while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /health-demo HTTP/1.1", upstream: "http://ghostlink_app/health", host: "nginx" +2026/04/05 13:43:11 [error] 22#22: *43 no live upstreams while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /promo-demo HTTP/1.1", upstream: "http://ghostlink_app/health", host: "nginx" +2026/04/05 13:43:11 [error] 22#22: *44 no live upstreams while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /checkout-demo HTTP/1.1", upstream: "http://ghostlink_app/health", host: "nginx" +2026/04/05 13:43:11 [error] 22#22: *45 no live upstreams while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /dashboard-demo HTTP/1.1", upstream: "http://ghostlink_app/health", host: "nginx" +2026/04/05 13:43:11 [error] 22#22: *46 no live upstreams while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /support-demo HTTP/1.1", upstream: "http://ghostlink_app/health", host: "nginx" +2026/04/05 13:43:17 [error] 22#22: *47 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:43:17 [warn] 22#22: *47 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:43:17 [error] 22#22: *47 no live upstreams while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://ghostlink_app/health", host: "127.0.0.1" +2026/04/05 13:43:37 [warn] 22#22: *49 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:43:37 [error] 22#22: *49 upstream timed out (110: Operation timed out) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:43:40 [error] 22#22: *49 connect() failed (113: Host is unreachable) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:43:40 [warn] 22#22: *49 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:43:57 [warn] 22#22: *52 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:43:57 [error] 22#22: *52 upstream timed out (110: Operation timed out) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:44:02 [warn] 22#22: *52 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:44:02 [error] 22#22: *52 upstream timed out (110: Operation timed out) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:44:12 [error] 22#22: *57 no live upstreams while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://ghostlink_app/health", host: "127.0.0.1" +2026/04/05 13:44:14 [error] 22#22: *55 connect() failed (113: Host is unreachable) while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /health-demo HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "nginx" +2026/04/05 13:44:14 [warn] 22#22: *55 upstream server temporarily disabled while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /health-demo HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "nginx" +2026/04/05 13:44:17 [error] 22#22: *55 connect() failed (113: Host is unreachable) while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /health-demo HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "nginx" +2026/04/05 13:44:17 [warn] 22#22: *55 upstream server temporarily disabled while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /health-demo HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "nginx" +2026/04/05 13:44:17 [error] 22#22: *59 no live upstreams while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /promo-demo HTTP/1.1", upstream: "http://ghostlink_app/health", host: "nginx" +2026/04/05 13:44:17 [error] 22#22: *60 no live upstreams while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /checkout-demo HTTP/1.1", upstream: "http://ghostlink_app/health", host: "nginx" +2026/04/05 13:44:17 [error] 22#22: *61 no live upstreams while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /dashboard-demo HTTP/1.1", upstream: "http://ghostlink_app/health", host: "nginx" +2026/04/05 13:44:17 [error] 22#22: *62 no live upstreams while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /support-demo HTTP/1.1", upstream: "http://ghostlink_app/health", host: "nginx" +2026/04/05 13:44:31 [error] 24#24: *63 connect() failed (113: Host is unreachable) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:44:31 [warn] 24#24: *63 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:44:34 [error] 24#24: *63 connect() failed (113: Host is unreachable) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:44:34 [warn] 24#24: *63 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:44:53 [warn] 24#24: *66 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:44:53 [error] 24#24: *66 upstream timed out (110: Operation timed out) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:44:58 [warn] 24#24: *66 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:44:58 [error] 24#24: *66 upstream timed out (110: Operation timed out) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:45:11 [error] 24#24: *69 connect() failed (113: Host is unreachable) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:45:11 [warn] 24#24: *69 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:45:14 [error] 24#24: *69 connect() failed (113: Host is unreachable) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:45:14 [warn] 24#24: *69 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:45:18 [error] 24#24: *72 no live upstreams while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /health-demo HTTP/1.1", upstream: "http://ghostlink_app/health", host: "nginx" +2026/04/05 13:45:18 [error] 24#24: *73 no live upstreams while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /promo-demo HTTP/1.1", upstream: "http://ghostlink_app/health", host: "nginx" +2026/04/05 13:45:18 [error] 24#24: *74 no live upstreams while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /checkout-demo HTTP/1.1", upstream: "http://ghostlink_app/health", host: "nginx" +2026/04/05 13:45:18 [error] 24#24: *75 no live upstreams while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /dashboard-demo HTTP/1.1", upstream: "http://ghostlink_app/health", host: "nginx" +2026/04/05 13:45:18 [error] 24#24: *76 no live upstreams while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /support-demo HTTP/1.1", upstream: "http://ghostlink_app/health", host: "nginx" +2026/04/05 13:45:31 [error] 24#24: *77 connect() failed (113: Host is unreachable) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:45:31 [warn] 24#24: *77 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:45:34 [error] 24#24: *77 connect() failed (113: Host is unreachable) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:45:34 [warn] 24#24: *77 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:45:53 [warn] 24#24: *80 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:45:53 [error] 24#24: *80 upstream timed out (110: Operation timed out) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:45:58 [warn] 24#24: *80 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:45:58 [error] 24#24: *80 upstream timed out (110: Operation timed out) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:46:11 [error] 24#24: *83 connect() failed (113: Host is unreachable) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:46:11 [warn] 24#24: *83 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:46:14 [error] 24#24: *83 connect() failed (113: Host is unreachable) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:46:14 [warn] 24#24: *83 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:46:18 [error] 24#24: *86 no live upstreams while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /health-demo HTTP/1.1", upstream: "http://ghostlink_app/health", host: "nginx" +2026/04/05 13:46:18 [error] 24#24: *87 no live upstreams while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /promo-demo HTTP/1.1", upstream: "http://ghostlink_app/health", host: "nginx" +2026/04/05 13:46:18 [error] 24#24: *88 no live upstreams while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /checkout-demo HTTP/1.1", upstream: "http://ghostlink_app/health", host: "nginx" +2026/04/05 13:46:18 [error] 24#24: *89 no live upstreams while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /dashboard-demo HTTP/1.1", upstream: "http://ghostlink_app/health", host: "nginx" +2026/04/05 13:46:18 [error] 24#24: *90 no live upstreams while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /support-demo HTTP/1.1", upstream: "http://ghostlink_app/health", host: "nginx" +2026/04/05 13:46:31 [error] 25#25: *91 connect() failed (113: Host is unreachable) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:46:31 [warn] 25#25: *91 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:46:34 [error] 25#25: *91 connect() failed (113: Host is unreachable) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:46:34 [warn] 25#25: *91 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:46:53 [warn] 25#25: *94 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:46:53 [error] 25#25: *94 upstream timed out (110: Operation timed out) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:46:58 [warn] 25#25: *94 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:46:58 [error] 25#25: *94 upstream timed out (110: Operation timed out) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:47:11 [error] 25#25: *97 connect() failed (113: Host is unreachable) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:47:11 [warn] 25#25: *97 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:47:14 [error] 25#25: *97 connect() failed (113: Host is unreachable) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:47:14 [warn] 25#25: *97 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:47:19 [error] 25#25: *100 no live upstreams while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /health-demo HTTP/1.1", upstream: "http://ghostlink_app/health", host: "nginx" +2026/04/05 13:47:19 [error] 25#25: *101 no live upstreams while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /promo-demo HTTP/1.1", upstream: "http://ghostlink_app/health", host: "nginx" +2026/04/05 13:47:19 [error] 25#25: *102 no live upstreams while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /checkout-demo HTTP/1.1", upstream: "http://ghostlink_app/health", host: "nginx" +2026/04/05 13:47:19 [error] 25#25: *103 no live upstreams while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /dashboard-demo HTTP/1.1", upstream: "http://ghostlink_app/health", host: "nginx" +2026/04/05 13:47:19 [error] 25#25: *104 no live upstreams while connecting to upstream, client: 172.18.0.9, server: _, request: "GET /support-demo HTTP/1.1", upstream: "http://ghostlink_app/health", host: "nginx" +2026/04/05 13:47:31 [error] 25#25: *105 connect() failed (113: Host is unreachable) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:47:31 [warn] 25#25: *105 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:47:34 [error] 25#25: *105 connect() failed (113: Host is unreachable) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:47:34 [warn] 25#25: *105 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:47:50 [error] 25#25: *108 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:47:50 [warn] 25#25: *108 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.5:5000/health", host: "127.0.0.1" +2026/04/05 13:47:50 [error] 25#25: *108 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 13:47:50 [warn] 25#25: *108 upstream server temporarily disabled while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /health HTTP/1.1", upstream: "http://172.18.0.3:5000/health", host: "127.0.0.1" +2026/04/05 14:30:18 [error] 35#35: *294 limiting requests, excess: 20.370 by zone "ghostlink_per_ip", client: 172.18.0.1, server: _, request: "GET /fgQp3a HTTP/1.1", host: "localhost" +2026/04/05 14:30:18 [error] 35#35: *297 limiting requests, excess: 20.260 by zone "ghostlink_per_ip", client: 172.18.0.1, server: _, request: "GET /fgQp3a HTTP/1.1", host: "localhost" +2026/04/05 14:30:18 [error] 35#35: *299 limiting requests, excess: 20.390 by zone "ghostlink_per_ip", client: 172.18.0.1, server: _, request: "GET /fgQp3a HTTP/1.1", host: "localhost" +2026/04/05 14:30:18 [error] 35#35: *300 limiting requests, excess: 20.140 by zone "ghostlink_per_ip", client: 172.18.0.1, server: _, request: "GET /fgQp3a HTTP/1.1", host: "localhost" +2026/04/05 14:30:19 [error] 35#35: *302 limiting requests, excess: 20.330 by zone "ghostlink_per_ip", client: 172.18.0.1, server: _, request: "GET /fgQp3a HTTP/1.1", host: "localhost" +2026/04/05 14:30:19 [error] 35#35: *303 limiting requests, excess: 20.080 by zone "ghostlink_per_ip", client: 172.18.0.1, server: _, request: "GET /fgQp3a HTTP/1.1", host: "localhost" +2026/04/05 14:30:19 [error] 35#35: *305 limiting requests, excess: 20.150 by zone "ghostlink_per_ip", client: 172.18.0.1, server: _, request: "GET /fgQp3a HTTP/1.1", host: "localhost" +2026/04/05 14:30:19 [error] 33#33: *311 limiting requests, excess: 20.260 by zone "ghostlink_per_ip", client: 172.18.0.1, server: _, request: "GET /fgQp3a HTTP/1.1", host: "localhost" +2026/04/05 14:30:19 [error] 33#33: *315 limiting requests, excess: 20.130 by zone "ghostlink_per_ip", client: 172.18.0.1, server: _, request: "GET /fgQp3a HTTP/1.1", host: "localhost" +2026/04/05 14:30:20 [error] 33#33: *320 limiting requests, excess: 20.070 by zone "ghostlink_per_ip", client: 172.18.0.1, server: _, request: "GET /fgQp3a HTTP/1.1", host: "localhost" diff --git a/security/canary_failures.log b/security/canary_failures.log index bdb5ad6..781738f 100644 --- a/security/canary_failures.log +++ b/security/canary_failures.log @@ -3,3 +3,32 @@ 2026-04-05T04:17:33Z canary=checkout-demo status=502 latency=0.037453 2026-04-05T04:17:33Z canary=dashboard-demo status=502 latency=0.039888 2026-04-05T04:17:33Z canary=support-demo status=502 latency=0.031542 +2026-04-05T13:41:07Z canary=health-demo status=502 latency=0.042215 +2026-04-05T13:41:07Z canary=promo-demo status=502 latency=0.024917 +2026-04-05T13:41:07Z canary=checkout-demo status=502 latency=0.035078 +2026-04-05T13:41:07Z canary=dashboard-demo status=502 latency=0.024295 +2026-04-05T13:43:10Z canary=health-demo status=502 latency=0.009617 +2026-04-05T13:43:11Z canary=promo-demo status=502 latency=0.009974 +2026-04-05T13:43:11Z canary=checkout-demo status=502 latency=0.010190 +2026-04-05T13:43:11Z canary=dashboard-demo status=502 latency=0.010212 +2026-04-05T13:43:11Z canary=support-demo status=502 latency=0.010376 +2026-04-05T13:44:17Z canary=health-demo status=502 latency=6.146789 +2026-04-05T13:44:17Z canary=promo-demo status=502 latency=0.009504 +2026-04-05T13:44:17Z canary=checkout-demo status=502 latency=0.020179 +2026-04-05T13:44:17Z canary=dashboard-demo status=502 latency=0.009996 +2026-04-05T13:44:17Z canary=support-demo status=502 latency=0.011182 +2026-04-05T13:45:18Z canary=health-demo status=502 latency=0.017053 +2026-04-05T13:45:18Z canary=promo-demo status=502 latency=0.011761 +2026-04-05T13:45:18Z canary=checkout-demo status=502 latency=0.013228 +2026-04-05T13:45:18Z canary=dashboard-demo status=502 latency=0.015727 +2026-04-05T13:45:18Z canary=support-demo status=502 latency=0.011421 +2026-04-05T13:46:18Z canary=health-demo status=502 latency=0.011954 +2026-04-05T13:46:18Z canary=promo-demo status=502 latency=0.016383 +2026-04-05T13:46:18Z canary=checkout-demo status=502 latency=0.010109 +2026-04-05T13:46:18Z canary=dashboard-demo status=502 latency=0.010952 +2026-04-05T13:46:18Z canary=support-demo status=502 latency=0.011897 +2026-04-05T13:47:19Z canary=health-demo status=502 latency=0.025784 +2026-04-05T13:47:19Z canary=promo-demo status=502 latency=0.011805 +2026-04-05T13:47:19Z canary=checkout-demo status=502 latency=0.009399 +2026-04-05T13:47:19Z canary=dashboard-demo status=502 latency=0.012149 +2026-04-05T13:47:19Z canary=support-demo status=502 latency=0.019399 diff --git a/security/canary_state.env b/security/canary_state.env index a2b9649..83c438a 100644 --- a/security/canary_state.env +++ b/security/canary_state.env @@ -1,13 +1,13 @@ -CANARY_SUCCESS_TOTAL=680 -CANARY_FAILURE_TOTAL=5 -CANARY_LAST_RUN_EPOCH=1775366050 +CANARY_SUCCESS_TOTAL=851 +CANARY_FAILURE_TOTAL=39 +CANARY_LAST_RUN_EPOCH=1775399826 CANARY_HEALTH_DEMO_STATUS=200 -CANARY_HEALTH_DEMO_LATENCY=0.028588 +CANARY_HEALTH_DEMO_LATENCY=0.025543 CANARY_PROMO_DEMO_STATUS=200 -CANARY_PROMO_DEMO_LATENCY=0.051313 +CANARY_PROMO_DEMO_LATENCY=0.030540 CANARY_CHECKOUT_DEMO_STATUS=200 -CANARY_CHECKOUT_DEMO_LATENCY=0.030694 +CANARY_CHECKOUT_DEMO_LATENCY=0.034248 CANARY_DASHBOARD_DEMO_STATUS=200 -CANARY_DASHBOARD_DEMO_LATENCY=0.028289 +CANARY_DASHBOARD_DEMO_LATENCY=0.026510 CANARY_SUPPORT_DEMO_STATUS=200 -CANARY_SUPPORT_DEMO_LATENCY=0.025590 +CANARY_SUPPORT_DEMO_LATENCY=0.028043