Health
758 reqs
Requests
Error Rate
P95 Latency
Apdex
Requests by Status Code
KQL
{{const-endpointFilter}} AND attributes.http.response.status_code != null
| summarize count() by bin_auto(timestamp), coalesce(tostring(attributes.http.response.status_code), "unknown")
| order by timestamp desc
| limit 10000
No data in this time range
Try a wider time range or adjust the filters.
Latency Percentiles
KQL
{{const-endpointFilter}} AND duration != null
| summarize percentiles(duration / 1e6, 50, 75, 90, 95) by bin_auto(timestamp)
| order by timestamp desc
No data in this time range
Try a wider time range or adjust the filters.
Errors (4xx & 5xx)
KQL
{{const-endpointFilter}} AND attributes.http.response.status_code != null AND attributes.http.response.status_code >= 400.0
| extend error_category = case(attributes.http.response.status_code >= 500, "5xx", attributes.http.response.status_code >= 400, "4xx", tostring(attributes.http.response.status_code))
| summarize count() by bin_auto(timestamp), error_category
| order by timestamp desc
| limit 10000
No data in this time range
Try a wider time range or adjust the filters.
Status Code Breakdown
SQL
SELECT
COALESCE(attributes___http___response___status_code::text, 'unknown') as status_code,
COUNT(*)::text as count,
ROUND((COUNT(*)::float * 100.0 / GREATEST(1, SUM(COUNT(*)) OVER ())::float)::numeric, 1)::float::text as pct,
ROUND((AVG(duration) / 1e6)::numeric, 2)::text as avg_latency
FROM otel_logs_and_spans
WHERE project_id='{{project_id}}'
AND {{const-endpointFilter}}
{{time_filter}}
GROUP BY attributes___http___response___status_code
ORDER BY COUNT(*) DESC
LIMIT 20
Downstream Dependencies
SQL
WITH rollup AS (
SELECT bucket AS timestamp, target_key, req_count, error_count, sum_duration_ns
FROM apis.endpoint_dependency_edges
WHERE project_id='{{project_id}}' AND endpoint_hash='{{var-endpointHash}}'
)
SELECT
target_key as operation,
SUM(req_count)::text as calls,
ROUND((SUM(sum_duration_ns)::numeric / NULLIF(SUM(req_count), 0) / 1e6), 2)::text as avg_latency,
ROUND((SUM(error_count) * 100.0 / GREATEST(1, SUM(req_count)))::numeric, 2)::text as error_rate
FROM rollup
WHERE 1=1 {{time_filter}}
GROUP BY target_key
ORDER BY SUM(req_count) DESC
LIMIT 20
Recent Traces
Open in Explorer
KQL
attributes.server.address in ("frontend") AND attributes.http.request.method in ("GET") AND (attributes.http.route in ("/api/data") or (isempty(attributes.http.route) and attributes.url.path in ("/api/data")))