Created
September 23, 2025 14:37
-
-
Save brbarmex/76b553491b194d9d422c775a6fdea071 to your computer and use it in GitHub Desktop.
dd
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "title": "HTTP Golden Signals - Gin API", | |
| "description": "Golden Signals (latência, tráfego, erros, saturação, apdex) para serviços HTTP instrumentados com Gin + Datadog (dd-trace-go v2 + datadog-go v5).", | |
| "layout_type": "ordered", | |
| "is_read_only": false, | |
| "notify_list": [], | |
| "reflow_type": "auto", | |
| "template_variables": [ | |
| { "name": "service", "prefix": "service", "default": "my-gin-api" }, | |
| { "name": "env", "prefix": "env", "default": "perf" }, | |
| { "name": "route", "prefix": "route", "default": "*" } | |
| ], | |
| "widgets": [ | |
| { | |
| "definition": { | |
| "type": "note", | |
| "content": "# HTTP Golden Signals\n- **Filtre** por `service`, `env` e `route` usando as variáveis acima.\n- Métricas esperadas: `http.server.requests`, `http.server.request_duration_ms` (Distribution), `http.server.errors`, `http.server.in_flight`, `http.server.bytes_out`, `http.server.queue_time_ms`, `http.server.apdex_*`.", | |
| "background_color": "blue", | |
| "font_size": "14", | |
| "text_align": "left", | |
| "show_tick": true, | |
| "tick_pos": "50%" | |
| } | |
| }, | |
| { | |
| "definition": { | |
| "title": "Latência p95 (ms)", | |
| "type": "timeseries", | |
| "requests": [ | |
| { | |
| "formulas": [{ "formula": "query_p95" }], | |
| "queries": [ | |
| { | |
| "name": "query_p95", | |
| "data_source": "metrics", | |
| "query": "p95:http.server.request_duration_ms{service:$service,env:$env,route:$route}" | |
| } | |
| ], | |
| "response_format": "timeseries", | |
| "display_type": "line" | |
| } | |
| ], | |
| "yaxis": { "scale": "linear" } | |
| } | |
| }, | |
| { | |
| "definition": { | |
| "title": "RPS (Requests/s)", | |
| "type": "timeseries", | |
| "requests": [ | |
| { | |
| "formulas": [{ "formula": "q_rps" }], | |
| "queries": [ | |
| { | |
| "name": "q_rps", | |
| "data_source": "metrics", | |
| "query": "sum:http.server.requests{service:$service,env:$env,route:$route}.as_rate()" | |
| } | |
| ], | |
| "response_format": "timeseries", | |
| "display_type": "line" | |
| } | |
| ], | |
| "yaxis": { "scale": "linear" } | |
| } | |
| }, | |
| { | |
| "definition": { | |
| "title": "Error rate (%)", | |
| "type": "timeseries", | |
| "requests": [ | |
| { | |
| "formulas": [ | |
| { "formula": "(q_err / q_req) * 100" } | |
| ], | |
| "queries": [ | |
| { | |
| "name": "q_err", | |
| "data_source": "metrics", | |
| "query": "sum:http.server.errors{service:$service,env:$env,route:$route}.as_rate()" | |
| }, | |
| { | |
| "name": "q_req", | |
| "data_source": "metrics", | |
| "query": "sum:http.server.requests{service:$service,env:$env,route:$route}.as_rate()" | |
| } | |
| ], | |
| "response_format": "timeseries", | |
| "display_type": "line" | |
| } | |
| ], | |
| "yaxis": { "scale": "linear", "include_zero": true, "min": "auto", "max": "auto" } | |
| } | |
| }, | |
| { | |
| "definition": { | |
| "title": "Saturação - In-flight (reqs concorrentes)", | |
| "type": "timeseries", | |
| "requests": [ | |
| { | |
| "formulas": [{ "formula": "q_inflight" }], | |
| "queries": [ | |
| { | |
| "name": "q_inflight", | |
| "data_source": "metrics", | |
| "query": "avg:http.server.in_flight{service:$service,env:$env,route:$route}" | |
| } | |
| ], | |
| "response_format": "timeseries", | |
| "display_type": "line" | |
| } | |
| ] | |
| } | |
| }, | |
| { | |
| "definition": { | |
| "title": "Throughput - Bytes/s (out)", | |
| "type": "timeseries", | |
| "requests": [ | |
| { | |
| "formulas": [{ "formula": "q_bps_out" }], | |
| "queries": [ | |
| { | |
| "name": "q_bps_out", | |
| "data_source": "metrics", | |
| "query": "sum:http.server.bytes_out{service:$service,env:$env,route:$route}.as_rate()" | |
| } | |
| ], | |
| "response_format": "timeseries", | |
| "display_type": "line" | |
| } | |
| ] | |
| } | |
| }, | |
| { | |
| "definition": { | |
| "title": "Queue time p95 (ms) - opcional", | |
| "type": "timeseries", | |
| "requests": [ | |
| { | |
| "formulas": [{ "formula": "q_p95_queue" }], | |
| "queries": [ | |
| { | |
| "name": "q_p95_queue", | |
| "data_source": "metrics", | |
| "query": "p95:http.server.queue_time_ms{service:$service,env:$env,route:$route}" | |
| } | |
| ], | |
| "response_format": "timeseries", | |
| "display_type": "line" | |
| } | |
| ] | |
| } | |
| }, | |
| { | |
| "definition": { | |
| "title": "Apdex (0–1)", | |
| "type": "query_value", | |
| "requests": [ | |
| { | |
| "formulas": [ | |
| { "formula": "(q_sat + (q_tol * 0.5)) / (q_sat + q_tol + q_fru)" } | |
| ], | |
| "queries": [ | |
| { | |
| "name": "q_sat", | |
| "data_source": "metrics", | |
| "query": "sum:http.server.apdex_satisfying{service:$service,env:$env,route:$route}.rollup(sum, 300)" | |
| }, | |
| { | |
| "name": "q_tol", | |
| "data_source": "metrics", | |
| "query": "sum:http.server.apdex_tolerating{service:$service,env:$env,route:$route}.rollup(sum, 300)" | |
| }, | |
| { | |
| "name": "q_fru", | |
| "data_source": "metrics", | |
| "query": "sum:http.server.apdex_frustrated{service:$service,env:$env,route:$route}.rollup(sum, 300)" | |
| } | |
| ], | |
| "response_format": "scalar" | |
| } | |
| ], | |
| "autoscale": true, | |
| "custom_unit": "", | |
| "precision": 3 | |
| } | |
| }, | |
| { | |
| "definition": { | |
| "title": "Latência por rota (p95) — split por {route}", | |
| "type": "timeseries", | |
| "requests": [ | |
| { | |
| "formulas": [{ "formula": "q_lat_split" }], | |
| "queries": [ | |
| { | |
| "name": "q_lat_split", | |
| "data_source": "metrics", | |
| "query": "p95:http.server.request_duration_ms{service:$service,env:$env} by {route}" | |
| } | |
| ], | |
| "response_format": "timeseries", | |
| "display_type": "line" | |
| } | |
| ] | |
| } | |
| }, | |
| { | |
| "definition": { | |
| "title": "TOP rotas por latência p95 (ms)", | |
| "type": "toplist", | |
| "requests": [ | |
| { | |
| "queries": [ | |
| { | |
| "name": "q_top_p95", | |
| "data_source": "metrics", | |
| "query": "p95:http.server.request_duration_ms{service:$service,env:$env} by {route}" | |
| } | |
| ] | |
| } | |
| ] | |
| } | |
| }, | |
| { | |
| "definition": { | |
| "title": "Distribuição de status (rate por família)", | |
| "type": "timeseries", | |
| "requests": [ | |
| { | |
| "formulas": [{ "formula": "q_2xx" }], | |
| "queries": [ | |
| { | |
| "name": "q_2xx", | |
| "data_source": "metrics", | |
| "query": "sum:http.server.requests{service:$service,env:$env,route:$route,status:2*}.as_rate()" | |
| } | |
| ], | |
| "display_type": "area", | |
| "response_format": "timeseries" | |
| }, | |
| { | |
| "formulas": [{ "formula": "q_4xx" }], | |
| "queries": [ | |
| { | |
| "name": "q_4xx", | |
| "data_source": "metrics", | |
| "query": "sum:http.server.requests{service:$service,env:$env,route:$route,status:4*}.as_rate()" | |
| } | |
| ], | |
| "display_type": "area", | |
| "response_format": "timeseries" | |
| }, | |
| { | |
| "formulas": [{ "formula": "q_5xx" }], | |
| "queries": [ | |
| { | |
| "name": "q_5xx", | |
| "data_source": "metrics", | |
| "query": "sum:http.server.requests{service:$service,env:$env,route:$route,status:5*}.as_rate()" | |
| } | |
| ], | |
| "display_type": "area", | |
| "response_format": "timeseries" | |
| } | |
| ], | |
| "yaxis": { "scale": "linear", "include_zero": true } | |
| } | |
| } | |
| ], | |
| "tags": ["golden-signals", "http", "gin", "datadog", "perf"], | |
| "id": null | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment