Hi!
Im trying to setup store and forward (using docker as test environment) and im constantly getting constant “UnknownMetricException” after DBIRTH triggers.
I was following documentation and for our architecture, “Writing historical events directly to tags” is the best fit and that’s what I attempted to setup.
Out of curisosity I tried to write directly to historian and that method works fine.
Setup
The idea is to basically simulate an outage for a known period of time with two tags (short tests for now, 1 min) and after that get a snapshot of each historian. I expected to see some data loss because of keep alive…but actually all data is lost.
Versions used in test
- Ignition 8.3.4
- MQTT Engine 5.0.4
- Transmission 5.0.3
Writing historical events directly to tags
Store Historical Events = false
Allow Back-fill Data = true
In-Order History = true
Rolling buffer disabled
Results
So basically when I simulate outage, I get “UnknownMetricException” which I believe is the cause or maybe symptom of the real issue. I have SparkplugBPayloadHandler set to TRACE, here is relevant part:
17:50:33.944 D Processing NBIRTH from EdgeDevices_GroupID/Place_EdgeNodeID with Seq# 0
17:50:33.954 D Processing DBIRTH from EdgeDevices_GroupID/Place_EdgeNodeID with Seq# 1
17:50:33.960 D Initializing DBIRTH metric SimTag1
17:50:34.925 W Throwing UnknownMetricException for SimTag1
17:50:34.925 I Requesting Rebirth ... cause: Unknown metric
17:50:34.936 D Processing NBIRTH with Seq# 0
17:50:34.977 D Processing DBIRTH with Seq# 1
It seems like a race condition and I attempted to tinker a bit with birthSettleDelay (discovered with open api spec) by bumping from 0 → 1000/2000ms but results are pretty much the same.
Am I missing something here? Thanks in advance.
P.S. Full config dumps from the gateway API:
MQTT Engine
{
"type": "com.cirruslink.mqtt.engine.gateway/general",
"description": null,
"enabled": true,
"version": 1,
"collection": "core",
"collections": [
"core"
],
"signature": "a510dcb1015ec1f58b2584ac74ac69e7eea62d903320bf7905b212d1d4e4ba0a",
"config": {
"enableEngine": true,
"blockNodeCommands": false,
"blockDeviceCommands": false,
"includeSecurityContext": false,
"blockTagPropertyChanges": true,
"storeHistoricalEvents": false,
"reorderingTimeout": 10000,
"enableLatching": false,
"latchTimeout": 2000,
"enableBdSeqChecking": true,
"metricTimestampValidation": false,
"customProperties": "{}",
"rebirthDebounceDelay": 5000,
"useCirrusEncoder": true,
"sparkplugMessageHandlerThreadCount": 500,
"enableAlarmEventPublishing": true,
"alarmDisplayPathType": "IDS_AND_EDGE",
"h2dbDirectory": "/usr/local/bin/ignition/data",
"h2dbPort": 9098
},
"backupConfig": {
"enableEngine": true,
"blockNodeCommands": false,
"blockDeviceCommands": false,
"includeSecurityContext": false,
"blockTagPropertyChanges": true,
"storeHistoricalEvents": false,
"reorderingTimeout": 10000,
"enableLatching": false,
"latchTimeout": 2000,
"enableBdSeqChecking": true,
"metricTimestampValidation": false,
"customProperties": "{}",
"rebirthDebounceDelay": 5000,
"useCirrusEncoder": true,
"sparkplugMessageHandlerThreadCount": 500,
"enableAlarmEventPublishing": true,
"alarmDisplayPathType": "IDS_AND_EDGE",
"h2dbDirectory": "/usr/local/bin/ignition/data",
"h2dbPort": 9098
},
"data": [
"backupConfig.json",
"config.json"
],
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2026-05-25T16:18:15Z"
},
"lastModificationSignature": "c8d6b45876029405ccfb67abc84aab4188d2089b2169ad2765a7f9d14513be39",
"enabled": true
},
"metrics": {},
"healthchecks": {}
}
Transmitter
{
"type": "com.cirruslink.mqtt.transmission.gateway/transmitter",
"name": "sim_edge",
"description": null,
"enabled": true,
"version": 1,
"collection": "core",
"collections": [
"core"
],
"signature": "8422067dc190c0f7809cd3dabc48277ae2854da7746ff337444ce8bb7e51d4c8",
"config": {
"tagProvider": "default",
"tagPath": "EdgeDevices",
"tagPacingPeriod": 50,
"serverSet": "Default",
"discoveryDelay": 0,
"historyStore": "StoreAndForwardSimulation",
"enableStoreForwardByDefault": true,
"inOrderHistory": true,
"alarmEventEnable": false,
"aliasedTags": false,
"compressionTypeWrapper": "NONE",
"convertUdts": false,
"deviceLevelUdtsAsDevices": false,
"publishUdtDefinitions": true,
"optimizeUdts": true,
"blockCommands": false,
"validateSecurityContext": false,
"securityContextHashingAlgorithm": "SHA_256",
"publishBed": false,
"echoRequestTimeout": -1,
"groupId": "EdgeDevices_GroupID",
"edgeNodeId": "Place_EdgeNodeID",
"filteredProperties": "accessRights;clampMode;deadband;deadbandMode;formatString;historicalDeadband;historicalDeadbandMode;historicalDeadbandStyle;historyEnabled;historyMaxAge;historyMaxAgeUnits;historyProvider;historySampleRate;historySampleRateUnits;historyTagGroup;historyTimeDeadband;historyTimeDeadbandUnits;opcItemPath;opcServer;permissionModel;rawHigh;rawLow;sampleMode;scaleFactor;scaleMode;scaledHigh;scaledLow;tagGroup;valueSource;expression;expressionType;ConfiguredTagPath;eventScripts;readPermissions;writePermissions;eventScripts;parentEnabled;sourceTagPath",
"rebirthDebounceDelay": 5000,
"includeSparkplugDataTypes": true,
"useCirrusEncoder": true,
"birthSettleDelay": 0,
"sendAllProps": false,
"reconciliationWindow": 5000
},
"backupConfig": {
"tagProvider": "default",
"tagPath": "EdgeDevices",
"tagPacingPeriod": 50,
"serverSet": "Default",
"discoveryDelay": 0,
"historyStore": "StoreAndForwardSimulation",
"enableStoreForwardByDefault": true,
"inOrderHistory": true,
"alarmEventEnable": false,
"aliasedTags": false,
"compressionTypeWrapper": "NONE",
"convertUdts": false,
"deviceLevelUdtsAsDevices": false,
"publishUdtDefinitions": true,
"optimizeUdts": true,
"blockCommands": false,
"validateSecurityContext": false,
"securityContextHashingAlgorithm": "SHA_256",
"publishBed": false,
"echoRequestTimeout": -1,
"groupId": "EdgeDevices_GroupID",
"edgeNodeId": "Place_EdgeNodeID",
"filteredProperties": "accessRights;clampMode;deadband;deadbandMode;formatString;historicalDeadband;historicalDeadbandMode;historicalDeadbandStyle;historyEnabled;historyMaxAge;historyMaxAgeUnits;historyProvider;historySampleRate;historySampleRateUnits;historyTagGroup;historyTimeDeadband;historyTimeDeadbandUnits;opcItemPath;opcServer;permissionModel;rawHigh;rawLow;sampleMode;scaleFactor;scaleMode;scaledHigh;scaledLow;tagGroup;valueSource;expression;expressionType;ConfiguredTagPath;eventScripts;readPermissions;writePermissions;eventScripts;parentEnabled;sourceTagPath",
"rebirthDebounceDelay": 5000,
"includeSparkplugDataTypes": true,
"useCirrusEncoder": true,
"birthSettleDelay": 0,
"sendAllProps": false,
"reconciliationWindow": 5000
},
"data": [
"backupConfig.json",
"config.json"
],
"attributes": {
"lastModification": {
"actor": "admin",
"timestamp": "2026-05-25T18:31:34Z"
},
"uuid": "cda0a3de-3d85-4681-b1c4-8d30904c0bea",
"lastModificationSignature": "bf234ac2e6f858358f065f08792427d0f6722b1db87d5415c22168362e164238",
"enabled": true
},
"metrics": {},
"healthchecks": {}
}
EDIT: Broken link.
