Skip to content

Script Observability

Every Script tool execution produces structured logs and metrics, enabling real-time monitoring via Grafana and troubleshooting via Loki queries.

Each Script execution produces two log events:

EventTriggerKey Fields
script.execution_startedWhen RTC is created (before execution)rtc_id, session_id, title, action, name
script.execution_completedAfter result submission (after execution)rtc_id, session_id, title, action, status, duration_ms, result_size, code_size

Logs are JSON-encoded (zap JSON encoding) and collected by Promtail into Loki.

Use the following queries in Grafana Explore (Data source: Loki) or the Logs Dashboard:

{service="server"} | json | msg=~"script\\.execution_(started|completed)"
{service="server"} | json | msg="script.execution_completed"
{service="server"} | json title="title", action="action", status="status", duration_ms="duration_ms" | msg="script.execution_completed"
{service="server"} | json status="status" | msg="script.execution_completed" | status="failed"
sum(count_over_time({service="server"} | json | msg="script.execution_completed"[1m])) by (action)
{service="server"} | json title="title" | msg="script.execution_completed" | title="Analyze sales data trends"

Match started/completed pairs (troubleshoot timeouts)

Section titled “Match started/completed pairs (troubleshoot timeouts)”
{service="server"} | json | msg=~"script\\.execution_(started|completed)"

Sort by rtc_id. If a started event has no matching completed, the execution failed abnormally.

MetricTypeLabelsPurpose
rtc_script_executions_totalCounteraction, statusExecution count, success rate
rtc_script_execution_duration_secondsHistogramactionExecution duration distribution (P50/P95/P99)
rtc_script_result_size_bytesHistogramactionResult size distribution
rtc_script_code_size_bytesHistogramactionCode size distribution
# Execution rate (by action and status)
sum by (action, status) (rate(rtc_script_executions_total[5m]))
# P95 execution latency
histogram_quantile(0.95, sum(rate(rtc_script_execution_duration_seconds_bucket[5m])) by (le))
# Error rate
sum(rate(rtc_script_executions_total{status="failed"}[5m])) / sum(rate(rtc_script_executions_total[5m]))

The main Dashboard (rtc-agent.json) includes a “Script Execution” Row with 6 panels:

PanelDescription
Execution RateReal-time rate grouped by action + status
Execution LatencyP50 / P95 / P99 latency trends
Error RateFailure ratio (thresholds: 5% yellow, 10% red)
Result Size P95Return data volume trends
Code Size P95Input code volume trends
Total ExecutionsCumulative count grouped by action

The Logs Dashboard (logs.json) includes a “Script Execution Logs” panel with a pre-configured Loki query showing both script.execution_started and script.execution_completed events.

AlertConditionDurationSeverity
ScriptExecutionHighErrorRateFailure rate > 10%2 minuteswarning
ScriptExecutionSlowP95 latency > 30s5 minuteswarning

Alert rules are defined in server/etc/dev/prometheus/alerts.yml.