Telemetry #
The Telemetry service accepts events from game clients, game services, Pragma Engine plugins, and custom services and forwards them to a big data store.
While telemetry applies to many different kinds of data collection, Pragma Engine uses it to describe high-volume, less structured, big data information. Pragma Engine provides a real-time telemetry event collector that terminates data into a data store of choice. Telemetry is useful for collecting high resolution data around specific questions or features, and requires post-processing to produce actionable insights.
The service accepts events in realtime and delegates to a configured storage provider. Studios can use standard, existing toolchains for data analytics and processing.
Data can be passed individually or in a batch, and messages are sent as JSON. Several standard fields are provided outside of the JSON payload to help with grouping, filtering, and aggregating events.
Operationalize #
While it’s possible to build reports and dashboards against raw telemetry data, it’s not recommended. The result will be dashboards that are slow to load due to the volume of data being processed. The reports will also be fragile, breaking when changes are made to the raw telemetry events. Instead, create ETLs that aggregate data into an operable format and build reports against these.
For example, exploratory queries and ad-hoc reports can be built against raw telemetry, but it is advisable to transform raw events into well-formed schemas that are tailored to their purpose. This improves performance, reliability, and reduces the cost and complexity of producing actionable insights.
Below is a sample workflow for building a game health report.
Configuration #
The Telemetry service is configured through TelemetryServiceConfig:
| Option | Default | Description |
|---|---|---|
xxHash64Seed | 0 | The seed used in the xxhash64 hash of the event sourceId and eventName. |
playerEventSourceId | PLAYER_ID | The session ID used as the event sourceId for player events recorded on the game backend. PLAYER_ID uses the session’s playerId; SOCIAL_ID uses the session’s socialId. Applies only to playerEventV1 and playerEventsV1. |
globalWeight | 1000 | The global client telemetry sampling weight, 0–1000. 0 sends no events; 1000 sends all events. |
perEventWeight | empty | Per-event-name sampling weight overrides, 0–1000. Event names missing from this map use globalWeight. |
alwaysEnabledIds | empty | IDs (playerId or socialId strings) whose sessions send client telemetry regardless of sampling weights. Only the key matters; the value is ignored. |
Client event sampling #
globalWeight, perEventWeight, and alwaysEnabledIds control how much client-originated telemetry is sent. SDKs fetch the sampling config on the first telemetry send attempt of a connection, and config changes are broadcast to connected sessions in real time. alwaysEnabledIds is resolved per session on the platform—the list itself is never sent to clients.
game: # or social/telemetry
serviceConfigs:
TelemetryServiceConfig:
globalWeight: 800
perEventWeight:
"event-a": 800
"event-b": 50
alwaysEnabledIds:
"00000000-0000-0000-0000-000000000001": ""
"00000000-0000-0000-0000-000000000002": ""
Dedicated Backend #
Telemetry can run on a dedicated backend, isolated from your game and social backends, so high-volume event traffic doesn’t compete with latency-sensitive gameplay RPCs. See Dedicated Telemetry Backend for details.
| Topic | Description |
|---|---|
| Plugins | Use a provided plugin or implement your own. |
| Events | Send events to Telemetry Service. |
| Schema of Events | Ingest data for reporting. |
| Pragma Analytics | Events automatically sent by Pragma |
| Dedicated Telemetry Backend | Run telemetry on its own backend, isolated from game and social. |