Golden Signals
Traffic
P95 Latency
Error Rate
Apdex Score
System Overview
Active Services
Total Requests
DB Systems
Unique Endpoints
Services Health
SQL
SELECT resource___service___name as service_name, ROUND((SUM(CASE WHEN duration <= 500000000 THEN 1.0 WHEN duration <= 2000000000 THEN 0.5 ELSE 0 END)) / GREATEST(1, COUNT(*))::numeric, 2) as apdex, ROUND((COUNT(*)::numeric / GREATEST(1, EXTRACT(EPOCH FROM (MAX(timestamp) - MIN(timestamp))) / 60)), 2) as throughput, ROUND((COUNT(*) FILTER (WHERE status_code = 'ERROR' OR COALESCE(attributes___http___response___status_code, 0) >= 500) * 100.0 / GREATEST(1, COUNT(*))::numeric), 2) as error_rate, ROUND((approx_percentile(0.95, percentile_agg(duration))::numeric / 1000000), 2) as p95_latency FROM otel_logs_and_spans WHERE project_id='{{project_id}}' AND resource___service___name IS NOT NULL AND kind = 'server' AND duration IS NOT NULL {{time_filter}} GROUP BY resource___service___name ORDER BY {{table_sort}} LIMIT 50
Events by Service
KQL
resource.service.name != null | summarize count() by bin_auto(timestamp), resource.service.name | order by timestamp desc | limit 10000
No data in this time range
Try a wider time range or adjust the filters.
Error Rates by Service
KQL
status_code == "ERROR" and resource.service.name != null | summarize count() by bin_auto(timestamp), resource.service.name | order by timestamp desc | limit 10000
No data in this time range
Try a wider time range or adjust the filters.
HTTP Request Volume by Service
KQL
resource.service.name != null and kind == "server" | summarize count() by bin_auto(timestamp), resource.service.name | order by timestamp desc | limit 10000
No data in this time range
Try a wider time range or adjust the filters.
HTTP Requests by Status Code
KQL
(kind == "server" or name == "apitoolkit-http-span" or name == "monoscope.http") 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.
HTTP Errors (4xx & 5xx) - Incoming
KQL
(kind == "server" or name == "apitoolkit-http-span" or name == "monoscope.http") and attributes.http.response.status_code != null and attributes.http.response.status_code >= 400 | 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.
Request Latency Percentiles
KQL
(kind == "server" or name == "apitoolkit-http-span" or name == "monoscope.http") and duration != null | summarize percentiles(duration, 50, 75, 90, 95, 99) by bin_auto(timestamp) | order by timestamp desc
No data in this time range
Try a wider time range or adjust the filters.
Database Health
SQL
SELECT
attributes___db___system___name as db_system,
COUNT(*) as queries,
ROUND((AVG(duration) / 1e6)::numeric, 2) as avg_ms,
ROUND((COUNT(*) FILTER (WHERE status_code = 'ERROR') * 100.0 / GREATEST(1, COUNT(*)))::numeric, 2) as error_rate
FROM otel_logs_and_spans
WHERE project_id='{{project_id}}'
AND attributes___db___system___name IS NOT NULL
AND duration IS NOT NULL
{{time_filter}}
GROUP BY db_system
ORDER BY {{table_sort}}
No data in this time range
Try a wider time range or adjust the filters.
No data in this time range
Try a wider time range or adjust the filters.
Requests by Endpoint
SQL
WITH top_endpoints AS (
SELECT
attributes___http___request___method || ' ' || attributes___url___path as endpoint,
COUNT(*) as total_count
FROM otel_logs_and_spans
WHERE project_id='{{project_id}}'
AND (kind = 'server' OR name = 'apitoolkit-http-span' OR name = 'monoscope.http')
AND attributes___http___response___status_code IS NOT NULL
AND attributes___url___path IS NOT NULL
{{time_filter}}
GROUP BY endpoint
ORDER BY total_count DESC
LIMIT 10
)
SELECT
extract(epoch from time_bucket('{{rollup_interval}}', o.timestamp))::integer AS time,
o.attributes___http___request___method || ' ' || o.attributes___url___path as endpoint,
COUNT(*)::float as count
FROM otel_logs_and_spans o
INNER JOIN top_endpoints t ON (o.attributes___http___request___method || ' ' || o.attributes___url___path) = t.endpoint
WHERE o.project_id='{{project_id}}'
AND (o.kind = 'server' OR o.name = 'apitoolkit-http-span' OR o.name = 'monoscope.http')
{{time_filter}}
GROUP BY time, o.attributes___http___request___method, o.attributes___url___path
ORDER BY time DESC
No data in this time range
Try a wider time range or adjust the filters.
No data in this time range
Try a wider time range or adjust the filters.
Custom Test A
KQL
level == "ERROR" or "WARN"
No data in this time range
Try a wider time range or adjust the filters.