IngestionConfigService.CreateIngestionConfig to register the schema of your telemetry, then streams compact structured messages to Sift over gRPC. This approach reduces packet size and improves throughput compared to schemaless methods.
CreateIngestionConfigRequest
FlowConfig
A flow is a named group of channels whose values are sent together in one request.ChannelConfig
Choosing between enum-typed and string-typed Channels
If your source data has enum values, such as a Flatbuffer or Protobuf enum, you can send them as an enum-typed Channel or as a plain string-typed Channel. Register the values as an enum if the value set is stable. Use a string Channel if the value set is still changing. Registering an enum has these advantages over a string Channel:- Efficiency: Enum values ingest as a
uint32instead of the full string on every sample. - Visualization: Enum Channels get the Enum Panel in Explore, that includes color-coded state bands and enum names on the y-axis. String Channels use the Table Panel.
- Validation: Sift checks each ingested value against the registered enum key set. An unexpected value surfaces as an error instead of landing silently as a string.
$1 == 'FAULT' works the same way for both types.
Enum changes create a new Channel version: A Channel’s identity includes its enum elements. Adding a variant, or inserting one in the middle of the enumeration, creates a new Channel version under the same name. This can cause Rule and Report evaluation errors against the prior version and adds entries to the Channel selector. A string Channel doesn’t have this behavior. Use a string Channel instead of an enum Channel if the value set is still changing.
Channel ordering
The order of Channels in aFlowConfig must be preserved exactly when sending values in an IngestWithConfigDataStreamRequest. Sift attributes each value to a Channel by its position in the list.
If data is available for some Channels in a flow but not others, send google.protobuf.Empty in the position of the missing Channel to maintain correct ordering.
Channel structure mismatch: If the ingestion client logs
encountered a message that doesn't match any cached flows, the Channel data sent for that flow doesn’t match the flow’s Channel structure as registered in CreateIngestionConfig. Verify that the Channel names, order, and data types you send match the flow’s configured Channels.Example
Given a flowreading with two Channels, a double Channel followed by a string Channel:
IngestWithConfigDataStreamRequest
end_stream_on_validation_error is false appear in Sift’s Data Processing dashboard (https://app.siftstack.com/manage/data-processing).
Duplicate timestamps: If a Channel receives two values at the exact same timestamp, Sift keeps only the most recently written value and discards the earlier one. This deduplication happens at write time, not read time.
Retrieving an ingestion config by client key
Updating an ingestion config
To add flows after creation, send aCreateIngestionConfigFlowsRequest to IngestionConfigService. Each flow name must be unique within the ingestion config; sending a flow with a name that already exists returns an error. You can’t rename, remove, or modify existing flows, including their Channels.