Before you begin
- You have a Sift API key and base URL. See Authentication.
- You have a gRPC client for your language. See Generate a client with buf.
- Your application can call gRPC endpoints.
How ingestion config streaming works
Ingestion-config-based streaming separates schema registration from data transmission. You register the structure of your telemetry once (the Asset, flows, and Channels) usingIngestionConfigService.CreateIngestionConfig. After that, you stream compact messages that reference the config by ID, which reduces packet size and improves throughput.
A flow is a named group of Channels whose values are sent together in one request. Every request references a specific flow by name, and the Channel values in that request must match the order of channels defined in that flow.
Stream telemetry to Sift
Step 1: Create an ingestion config
Send aCreateIngestionConfigRequest to IngestionConfigService.CreateIngestionConfig. This registers your asset, flows, and channels.
Client keysSet
client_key to a unique string you control. This lets you look up the config later without storing the server-assigned ID. Although optional, it is strongly recommended.ingestion_config_id. Save this value; you will include it in every data request.
Step 2: Define your flows and channels
EachFlowConfig names a group of channels that are sent together.
google.protobuf.Empty in the position of the missing channel to preserve ordering.
Step 3: Create a Run
A Run groups the data you stream into a named, time-bounded capture. Creating a Run is strongly recommended; without arun_id in your ingestion requests, streamed data will not be organized into a Run and will not appear in Sift’s Runs view. To create one, call RunService.CreateRun and save the returned run_id.
Step 4: Stream data
For each data point, construct anIngestWithConfigDataStreamRequest and send it to IngestService.IngestWithConfigDataStream.
| Field | Description |
|---|---|
ingestion_config_id | The ID returned when you created the ingestion config. |
flow | The name of the flow this request sends data for. |
timestamp | The timestamp for all channel values in this request. |
channel_values | Ordered list of values matching the channel order in the flow definition. |
run_id | Strongly recommended. Include this in every request to associate data with a Run. Omitting it will cause streamed data to not appear in Sift’s Runs view. |
end_stream_on_validation_error | Set to true only during development. Do not use in production; it severely impacts performance. |
organization_id | Optional unless your user belongs to multiple organizations. |
Step 5: Add flows to an existing ingestion config
To add new flows after creation, send aCreateIngestionConfigFlowRequest to IngestionConfigService. Adding flows is backwards compatible. Do not modify or remove existing flows or channels.
Verify the result
After streaming, open Sift and navigate to the asset you specified inasset_name. You should see:
- The asset listed under your organization.
- If you created a Run, the Run appears with data for the channels you streamed.
- Any server-side validation errors appear in the Data Processing dashboard.
Next steps
- Organize streamed data into Assets and Runs
- Continue streaming across multiple runs
- Stream your first telemetry data with Python