Skip to main content
Get real-time visibility into your application health. Track performance, resource usage, and system health through comprehensive dashboards and detailed data views.

Get Started with Dashboards

Enable Metrics Collection

To start using dashboards, you’ll need to configure telemetry in your application:
  • Node.js
  • Unreal
  • C++
Add the following code snippet to your application:
import { telemetry } from '@inworld/runtime';

// Initialize telemetry
telemetry.init({
  apiKey: process.env.INWORLD_API_KEY,
  appName: 'MyApplication',
  appVersion: '1.0.0',
});
Once telemetry has been configured, metrics will be automatically collected and sent to Portal.

View Default Dashboard

default-dashboard.png Every workspace comes with a pre-configured default dashboard containing 8 essential metrics. These 8 metrics are automatically calculated when you execute your graphs.
PanelWhat it Shows
Graph Executions TotalCount of graph executions
Graph Executions Errors TotalCount of total graph execution errors
P50 / P99 Graph Execution LatencyPercentile latency for the full graph execution
Node Executions TotalCount of node executions across all nodes
Node Executions Errors TotalCount of total node execution errors across all nodes
P50 / P99 Node Execution LatencyPercentile latency for all node executions
LLM Node: Output Tokens RateNumber of LLM output tokens per unit of time
P50 / P99 LLM Time to First Token LatencyPercentile latency for time to first token

Building Custom Panels

Ready to create your own custom panels? Here’s the step-by-step process:
1

Create Panel

  1. Click on the dashboard you want to view
  2. Click New Panel on the top right corner
  3. Select a chart type: Time Series, Number, Table, Bar, or Pie Chart
2

Build Your Query

The visual query builder makes it simple - just choose a metric and an aggregator.query-builder.png
  1. Select a metric: What you want to measure (e.g., framework_executions_total)
  2. Pick an aggregator: How to calculate values (Count, Average, P99, etc.)
  3. Add filters (optional): Use WHERE conditions, group by dimensions, or set time aggregation
  4. Click Stage & Run Query
End-to-End Examplecreate-panel.gif

Query Builder Guide

Essential Fields

The core fields you’ll use for most charts:
FieldWhat it DoesExample
Metric NameThe specific metric to displayframework_executions_total
Aggregate OperatorHow to calculate valuesCount, Avg, P99, Sum
WHEREFilter your datagraph_id = "abc"
Group bySplit data into separate linesBy service name, endpoint

Advanced Fields

For more complex queries and customization:
FieldWhat it DoesExample
LimitMaximum number of groups to show10 (top 10 services)
HAVINGFilter groups after aggregationGroupBy(operation) > 5
Order bySort the resultsBy value desc, by name
Aggregate EveryTime resolution (seconds)60 = one point per minute
Legend FormatCustomize chart labels{{service_name}}

Aggregate Operators

aggregate-operator.png These operators determine how your data is calculated and displayed: Basic Aggregations:
  • NOOP: No operation - shows raw metric values without aggregation
  • Count: Number of events or data points
  • Count Distinct: Number of unique values
  • Sum: Adds up all values within each time period (e.g., total requests per minute)
  • Sum_increase: Shows increase in cumulative counters over time (e.g., how much a “total requests” counter grew)
  • Avg: Average value across all data points
  • Max: Highest value in the dataset
  • Min: Lowest value in the dataset
Percentiles:
  • P50: 50th percentile (median)
  • P75: 75th percentile (third quartile)
  • P90: 90th percentile - only 10% of values are above this
  • P95: 95th percentile - only 5% of values are above this
  • P99: 99th percentile - only 1% of values are above this
Rate Functions:
  • Sum_rate: Sum of individual rate calculations (e.g., total requests/sec across all services)
  • Avg_rate: Average of individual rate calculations
  • Max_rate: Maximum of individual rate calculations
  • Min_rate: Minimum of individual rate calculations

Time Aggregation Settings

aggregate-every.png Time Range: On the top right of your dashboard - Defines the time scope of your data (e.g., “last 30 minutes”, “last 1 week”) Aggregate Every: In the Query Builder - Defines how your data is grouped over time (every 60 seconds, 300 seconds, etc.) When you change the time range on the dashboard, the Aggregate Every field automatically adjusts to keep charts readable. For example, when you select “last 30 minutes”, the default Aggregate Every is set to 60 seconds. Why this matters:
  • Longer time rangesHigher aggregation intervals (fewer data points, smoother charts)
  • Shorter time rangesLower aggregation intervals (more data points, more detail)
Selected Time RangeAggregate Every (seconds)Human Readable
30 minutes601 minute
60 minutes601 minute
1 hour601 minute
3 hours601 minute
6 hours601 minute
12 hours1202 minutes
1 day3005 minutes
3 days90015 minutes
1 week180030 minutes
10 days360060 minutes
2 weeks360060 minutes
1 month90002h 30min
2 months180005 hours
When defaults might cause issues: Problem: Too granular (gaps in chart)
  • When: Sparse data + short time range (e.g., events every 5 minutes but aggregating every 1 minute)
  • Result: Lots of empty intervals, choppy chart with gaps
  • Fix: Increase Aggregate Every (e.g., change from 60 to 300 seconds)
Problem: Too coarse (missing detail)
  • When: Frequent data + long time range (e.g., events every 30 seconds but aggregating every 5 hours)
  • Result: Important spikes and patterns get smoothed out
  • Fix: Decrease Aggregate Every (e.g., change from 18000 to 3600 seconds)

Next Steps

Ready to grow your business metrics? Check out the resources below to get started!