Operational Telemetry data model
The Operational Telemetry data model normalizes telemetry across Manufacturing, Facilities/BMS, Smart Cities, Events, and Critical Infrastructure into a single, queryable schema. All dashboards in the Splunk OT Intelligence app use this data model.
About the Operational Telemetry data model
The data model covers a broad range of OT data types — from numeric sensor readings and equipment states to alarms, production counts, maintenance records, and physical security events.
| Child object | Description |
|---|---|
| Metrics | Universal numeric sensor readings. |
| Events | Discrete alarms, faults, and notifications. |
| States | Equipment operational states and modes. |
| Production | Manufacturing counts, batches, and tracking. |
| OEE | Overall Equipment Effectiveness and downtime. |
| Quality | Quality measurements and SPC. |
| Maintenance | Work orders and predictive maintenance. |
| Security | Access control and physical security. |
| Venue Operations | Event/venue scheduling and identification. |
| Location | Real-time location tracking from Cisco Spaces, BLE, and WiFi. |
For a general introduction to how Splunk data models work, including datasets, field types, constraints, and inheritance, see the About data models topic in the Splunk Cloud Platform documentation.
Requirements and prerequisites
Requirements to install
-
Splunk OT Intelligence versions 4.13.0 or higher.
-
Data must reside in indexes that are matched by the
ot_indexesmacro. All events must include the following five required base fields:device_id,device_type,vertical,site, andsystem.
Configure the ot_indexes macro
The ot_indexes macro tells all Operational Telemetry dashboards which indexes to search. If your data is not in an index covered by this macro, none of the dashboards will show the data.
To configure the macro, perform the following steps:
- Go to Settings, and then Advanced Search, and then Search Macros.
- Navigate to
ot_indexes - Add your index to the definition.
To include multiple indexes, add each one using OR in the definition. For example, (index=my_iot OR index=my_scada). Only events in matching indexes will be visible to the dashboards.
Map your data to the data model
Step 1: Add the five required fields using an automatic lookup
If you have a lookup table that maps a device identifier (such as a serial number) to device_id, device_type, site, system, and vertical, you can use an automatic lookup to enrich every matching event at search time.
- Go to Settings, and then Lookups, and then Automatic Lookups.
- Select your sourcetype
- Set your device identifier as the input field. For example,
serial_number, as the input field. - Set
device_id,device_type,site,system, andverticalas the output fields.
Every event from your selected sourcetype will now be automatically enriched with the five required fields.
Step 2: Map fields using calculated fields
If your raw event uses different field names than what the data model expects, use calculated fields to create the mapping. For example, reading instead of metric_value, or metric instead of metric_name .
- Go to Settings , and then Fields , and then Calculated Fields
- Select your sourcetype
-
Add a calculated field for each mapping. For example:
metric_name=metricmetric_value=reading
Your data is ready to flow into the Operational Telemetry data model.
Dashboards
The following dashboards in the Splunk OT Intelligence app are built on this data model. Each dashboard requires data to be mapped into the model before it will show your ingested data.
| Dashboard | Purpose |
|---|---|
| Operational Telemetry - Overview | End-to-end visibility into the health and distribution of your OT environment |
| Operational Telemetry - Metrics | Browse and inspect all numeric sensor data flowing through the model |
| Operational Telemetry - Events | Monitor and triage alarms, faults, and notifications across your OT devices |
| Operational Telemetry - States | Track operational state changes and history across your devices |
| Operational Telemetry - Data Adoption | Identify how much of your data is mapped into the model and where the gaps are |
Data model hierarchy
BaseEvent
└── All_Telemetry (root — constraint: `ot_indexes`)
├── Metrics
├── Events
├── States
├── Production
├── OEE
├── Quality
├── Maintenance
├── Security
├── VenueOperations
└── Location
Enable data model acceleration to speed up dashboard queries. Enabling data model acceleration increases storage and processing costs because Splunk pre-builds and maintains summarized data on disk. Enable it only when query performance is a priority and the additional resource cost is acceptable. To configure it, go to Settings , and then Data Models. Navigate to the Operational Telemetry data model, and enable acceleration. See About data models for details.
Telemetry
Telemetry reference
The root object for all telemetry across all verticals. Every event must include all of the following required fields:
Constraint: ot_indexes
Required fields
| Field | Type | Description | Example |
|---|---|---|---|
device_id |
string | Unique identifier for the device | sensor-001, plc-line3 |
device_type |
string | Category of device | plc, sensor, meter, controller, camera, gateway |
vertical |
string | Industry vertical the device belongs to | manufacturing, facilities, smart_city, events, critical_infrastructure |
site |
string | Facility or campus code | NYC-01, PLANT-A |
system |
string | Operational system the device is part of | HVAC, Electrical, Production, Water, Security |
| Field | Type | Description | Example |
|---|---|---|---|
asset_class |
string | Classification of the asset type | rotating_equipment, electrical, hvac |
asset_id |
string | ID of the parent asset in a CMMS or EAM system | ASSET-CHILLER-03 |
asset_name |
string | Name of the parent asset | Chiller 3 |
building |
string | Building identifier within the site | Building-B, HQ |
criticality |
string | Operational criticality of the device | critical, high, medium, low |
device_name |
string | Human-friendly name for the device | Chiller Unit 3, AHU-B2 |
firmware_version |
string | Installed firmware version | v2.4.1 |
floor |
string | Floor or level within the building | Floor-2, B1 |
floor_plan_id |
string | Reference to a floor plan used for indoor visualization | floorplan-b2-001 |
geo_lat |
number | GPS latitude of the device | 40.7128 |
location_confidence |
number | Accuracy of the position estimate in meters or % | 2.5, 95 |
geo_lon |
number | GPS longitude of the device | -74.0060 |
device_mac |
string | MAC address of the device | 00:1A:2B:3C:4D:5E |
model |
string | Device model number | S7-1500, T775 |
network_id |
string | Meraki network ID | net-abc789 |
organization_id |
string | Meraki or Cisco Spaces organization ID | org-123456 |
parent_device_id |
string | ID of the parent device in the equipment hierarchy | ahu-01 (parent of a VAV unit) |
protocol |
string | Communication protocol used by the device | modbus, bacnet, opcua, mqtt, meraki_api |
protocol_address |
string | Native address of the device in its protocol | 40001 (Modbus register), ns=2;s=Motor.Speed (OPC-UA) |
protocol_object_type |
string | Protocol-native object type | AI (BACnet Analog Input), holding (Modbus) |
serial_number |
string | Device serial number | SN-20241201-004 |
site_name |
string | Full name of the facility | New York Data Center |
subsystem |
string | Specific subsystem within the system | AHU, Chiller, VAV |
tag_path |
string | Full hierarchical address used by OPC-UA or BACnet | ns=2;s=Plant1.Line2.Motor.Speed |
vendor |
string | Device manufacturer | Siemens, Honeywell, Cisco |
x_coordinate |
number | Indoor X position from Spaces or BLE | 12.5 |
y_coordinate |
number | Indoor Y position from Spaces or BLE | 8.3 |
zone |
string | Zone or area within the floor | Zone-A, Server Room 1 |
zone_type |
string | Functional type of the zone | office, conference, lobby, restroom, concourse |
| Field | Expression | Description | Example |
|---|---|---|---|
uns |
site_name/building/floor/zone/asset_name/device_name |
ISA-95/UNS topic path (Enterprise/Site/Area/Line/Asset/Device) used for routing and pub/sub addressing | NYC-Plant/Building-B/Floor-2/Zone-A/Chiller-3/sensor-001 |
udmi_topic |
site/device_id/<subFolder> |
UDMI envelope path where subFolder is derived from the data type present in the event | PLANT-A/sensor-001/pointset |
location |
site_name/building/floor/zone/asset_name/device_name |
Human-readable location path used by dashboards for filtering, grouping, and the site map | NYC-Plant/Building-B/Floor-2/Zone-A/Chiller-3/sensor-001 |
The location field is not required by the root constraints, but it is used across all Operational Telemetry dashboards for filtering, grouping, and the site map. We recommend populating it as a combination of your site and asset hierarchy — the more granular your location data, the more useful the dashboards become.
If location is not present in your events, OT Intelligence automatically derives it from your existing fields using the pattern site_name/building/floor/zone/asset_name/device_name. Any field that is missing or empty falls back to unknown.
Universal numeric measurements. All sensor readings — temperature, humidity, power, flow rate, occupancy counts — use this pattern.
Parent: All Telemetry
Constraint: metric_name=* metric_value=*
| Field | Type | Description | Example |
|---|---|---|---|
aggregation_type |
string | How the value should be aggregated over time | avg, sum, min, max, last |
aggregation_period |
string | Time window used for aggregation | 1min, 5min, 15min, 1hour, 1day |
metric_category |
string | Functional category of the metric | environmental, electrical, process, mechanical, hvac |
metric_dimension |
string | Axis identifier for multi-axis sensors | x, y, z, magnitude |
direction |
string | Direction of traffic flow | northbound, southbound, inbound, outbound |
lane_id |
string | Identifier for a traffic lane | lane-1, northbound-left |
metric_max |
number | High operating limit for the metric | 100, 500.0 |
metric_name |
string | Standardized name identifying the type of measurement | temperature, humidity, power, flow_rate, person_count |
metric_min |
number | Low operating limit for the metric | 0, 10.0 |
metric_quality |
string | Quality flag for the data point | good, suspect, bad, stale |
rate_period |
string | Current energy rate period | peak, off_peak, shoulder, holiday |
metric_setpoint |
number | Target or setpoint value | 22.0, 750 |
setpoint_source |
string | Origin of the current setpoint | schedule, operator, optimization, demand_response |
tariff_id |
string | Energy tariff or rate period identifier | tariff-peak-2024 |
metric_unit |
string | Unit of the measurement | degC, %, kW, ppm, lux, count |
metric_value |
number | Numeric measurement value | 23.5, 1024, 0.87 |
| Field | Expression | Description | Example |
|---|---|---|---|
threshold_status |
case(metric_value<metric_min,"low", metric_value>metric_max,"high", 1=1,"normal") |
Whether the metric value is below, above, or within its operating limits | low, high, normal |
setpoint_deviation |
metric_value - metric_setpoint |
Difference between the current value and the setpoint; null if no setpoint is defined | 1.5, -0.3 |
Discrete occurrences: alarms, faults, and notifications from OT devices.
Parent: All Telemetry
Constraint: event_type=*
| Field | Type | Description | Example |
|---|---|---|---|
acknowledged_time |
timestamp | Time the event was acknowledged | 2024-11-01T09:15:00 |
acknowledged |
string | Whether the event has been acknowledged | true, false |
acknowledged_by |
string | Username of the person who acknowledged the event | operator1 |
alert_level |
string | Meraki webhook alert level | warning, critical |
alert_type |
string | Meraki webhook alert type | motion_alert, door_open |
event_category |
string | Domain the event belongs to | equipment, process, safety, environmental, security, network, crowd |
cleared_time |
timestamp | Time the event was cleared | 2024-11-01T09:45:00 |
duration_seconds |
number | Duration from event open to cleared in seconds | 1800 |
event_code |
string | Vendor or standard code identifying the event | E-1042, BACnet-1301 |
event_state |
string | Current lifecycle state of the event | active, cleared, acknowledged, shelved |
event_type |
string | Category of the event | alarm, fault, warning, info, state_change, maintenance, security, webhook |
event_message |
string | Human-readable description of the event | High temperature threshold exceeded |
event_severity |
string | Severity level of the event | critical, high, medium, low, info |
event_source |
string | System or component that generated the event | SCADA, BMS, Meraki |
| Field | Expression | Description | Example |
|---|---|---|---|
severity_num |
case(event_severity="critical",5, "high",4, "medium",3, "low",2, "info",1, 1=1,0) |
Numeric representation of severity for sorting and comparison | 5, 3, 1 |
Equipment operational states and modes — discrete, non-numeric values representing what a device is currently doing.
Parent: All Telemetry
Constraint: state_name=* state_value=*
| Field | Type | Description | Example |
|---|---|---|---|
state_category |
string | Functional category of the state | operational, mode, position, availability, security, presence |
control_mode |
string | Current control mode of the device | auto, manual, off, override, standby |
state_duration |
number | Time spent in the previous state in seconds | 3600 |
dwell_time |
number | Time the tracked entity has spent in the current location or state in seconds | 450 |
previous_state |
string | State value before the current change | running |
state_reason |
string | Cause of the state change | operator, automatic, fault, schedule |
schedule_id |
string | BMS schedule that triggered the state change | schedule-occ-weekday |
schedule_mode |
string | Occupancy mode from the active BMS schedule | occupied, unoccupied, standby, holiday |
state_name |
string | Name identifying the type of state being reported | run_status, mode, door_state, presence, occupancy |
state_value |
string | Current value of the state | running, stopped, open, closed, occupied, entry, exit |
Manufacturing production counts, batch tracking, and line performance.
Parent: All Telemetry
Constraint: good_count=* OR batch_id=* OR production_order=*
| Field | Type | Description | Example |
|---|---|---|---|
batch_id |
string | Batch identifier | BATCH-20241101-A |
cell_id |
string | Work cell identifier | cell-B2 |
cycle_time |
number | Actual time to complete one unit cycle in seconds | 42 |
good_count |
number | Number of conforming units produced | 482 |
ideal_cycle_time |
number | Theoretical minimum cycle time in seconds | 38 |
line_id |
string | Production line identifier | line-3 |
operator_id |
string | Identifier of the operator on duty | op-007 |
product_code |
string | Product SKU or code | SKU-7890 |
product_name |
string | Product name | Widget Type B |
production_order |
string | Production or work order number | PO-2024-00123 |
program_id |
string | PLC or CNC program currently running | PROG-MOTOR-A |
recipe_id |
string | Recipe identifier | RECIPE-042 |
recipe_version |
string | Version of the active recipe | v3.1 |
reject_count |
number | Number of rejected units | 18 |
shift |
string | Shift identifier | day, night, shift-1 |
step_id |
string | Current step within the running program | step-4 |
takt_time |
number | Available production time divided by customer demand in seconds | 40 |
target_count |
number | Target unit count for the period | 520 |
total_count |
number | Total units produced | 500 |
| Field | Expression | Description | Example |
|---|---|---|---|
yield_rate |
(good_count / total_count) * 100 |
Percentage of good units out of total produced; null if total count is zero | 96.4 |
cycle_efficiency |
(ideal_cycle_time / cycle_time) * 100 |
Ratio of ideal to actual cycle time as a percentage; null if either value is missing | 90.5 |
Overall Equipment Effectiveness metrics and downtime tracking for manufacturing assets.
Parent: All Telemetry
Constraint: oee=* OR availability=* OR downtime_minutes=*
| Field | Type | Description | Example |
|---|---|---|---|
availability |
number | Availability component of OEE as a percentage | 92.5 |
downtime_minutes |
number | Total downtime in minutes | 36 |
downtime_category |
string | Classification of the downtime type | planned, unplanned, changeover, breakdown, starved, blocked |
downtime_reason |
string | Description of why the equipment was down | Scheduled maintenance, Conveyor jam |
mtbf |
number | Mean Time Between Failures in hours | 120.5 |
mttr |
number | Mean Time To Repair in hours | 2.3 |
oee |
number | Overall Equipment Effectiveness as a percentage | 78.6 |
performance |
number | Performance component of OEE as a percentage | 88.0 |
planned_production_time |
number | Planned production time in minutes | 480 |
quality |
number | Quality component of OEE as a percentage | 96.4 |
actual_run_time |
number | Actual time the equipment was running in minutes | 444 |
| Field | Expression | Description | Example |
|---|---|---|---|
calculated_oee |
(availability * performance * quality) / 10000 |
OEE derived from the three component fields; null if any component is missing | 78.6 |
Quality measurements and Statistical Process Control (SPC) for manufacturing inspection. Records individual measurements against specification and control limits to track conformance and detect process drift.
Parent: All Telemetry
Constraint: measurement_name=* measurement_value=*
| Field | Type | Description | Example |
|---|---|---|---|
measurement_name |
string | Name of the quality characteristic being measured | shaft_diameter, tensile_strength, fill_volume |
measurement_value |
number | Measured value of the quality characteristic | 25.03, 450.7 |
defect_code |
string | Code classifying the type of defect | D-001, SCRATCH |
defect_description |
string | Description of the defect found | Surface scratch on face B |
disposition |
string | Decision made on the inspected item | accept, reject, rework |
inspection_type |
string | Type of quality inspection performed | incoming, in-process, final |
inspector_id |
string | Identifier of the inspector | insp-12 |
lcl |
number | Lower Control Limit for SPC | 24.94 |
lsl |
number | Lower Specification Limit | 24.90 |
nominal |
number | Nominal or target value | 25.00 |
sample_id |
string | Identifier of the sample | SAMPLE-20241101-007 |
sample_size |
number | Number of units in the sample | 5 |
ucl |
number | Upper Control Limit for SPC | 25.06 |
measurement_unit |
string | Unit of the quality measurement | mm, MPa, mL |
usl |
number | Upper Specification Limit | 25.10 |
| Field | Expression | Description | Example |
|---|---|---|---|
in_spec |
measurement_value >= lsl AND measurement_value <= usl |
Whether the measurement is within the Upper and Lower Specification Limits | true, false |
in_control |
measurement_value >= lcl AND measurement_value <= ucl |
Whether the measurement is within the Upper and Lower Control Limits | true, false |
Work orders and predictive maintenance signals for OT assets.
Parent: All Telemetry
Constraint: work_order_id=* OR health_score=* OR failure_probability=* OR anomaly_score=*
| Field | Type | Description | Example |
|---|---|---|---|
anomaly_score |
number | Score indicating how anomalous the current behavior is | 0.91 |
completed_date |
timestamp | Date the maintenance was completed | 2024-11-15T11:30:00 |
failure_code |
string | Code classifying the failure type | FC-003, BEARING-FAIL |
failure_description |
string | Description of the failure | Bearing overheating on motor shaft |
failure_probability |
number | Predicted probability of failure from 0 to 1 | 0.83 |
health_score |
number | Asset health score from 0 to 100 | 72 |
runtime_since_maintenance |
number | Runtime hours since the last maintenance event | 720 |
labor_hours |
number | Labor hours spent on the work order | 3.5 |
parts_cost |
number | Cost of parts used | 120.00 |
work_order_priority |
string | Priority level of the work order | critical, high, medium, low |
repair_action |
string | Action taken to resolve the failure | Replaced bearing assembly |
root_cause |
string | Root cause identified for the failure | Insufficient lubrication |
remaining_useful_life |
number | Estimated remaining useful life in hours | 340 |
runtime_hours |
number | Total cumulative runtime hours of the asset | 8450 |
scheduled_date |
timestamp | Date the maintenance was scheduled | 2024-11-15T08:00:00 |
work_order_status |
string | Current status of the work order | open, in_progress, completed |
technician_id |
string | Identifier of the assigned technician | tech-42 |
total_cost |
number | Total cost of the maintenance activity | 295.00 |
work_order_type |
string | Type of maintenance work order | preventive, corrective, predictive |
work_order_id |
string | Work order identifier | WO-2024-00456 |
Physical security events including access control, intrusion detection, and venue ticketing.
Parent: All Telemetry
Constraint: access_point=* OR intrusion_zone=* OR camera_id=* OR credential_id=* OR ticket_id=*
| Field | Type | Description | Example |
|---|---|---|---|
access_point |
string | Identifier of the access point where the event occurred | door-lobby-main, gate-3 |
camera_id |
string | Identifier of the camera that captured the event | cam-entrance-01 |
credential_id |
string | Identifier of the credential used | badge-00892 |
credential_type |
string | Type of credential used for access | badge, pin, biometric, mobile |
access_direction |
string | Direction of movement at the access point | entry, exit |
host_id |
string | Identifier of the employee hosting the visitor | emp-0210 |
intrusion_zone |
string | Zone where an intrusion was detected | server-room-b, perimeter-north |
person_id |
string | Identifier of the person involved | emp-1042 |
person_type |
string | Category of person involved | employee, contractor, visitor |
access_result |
string | Outcome of the access attempt | granted, denied, forced, held_open |
ticket_id |
string | Ticket barcode for event or venue access | TKT-20241101-00934 |
ticket_tier |
string | Pricing or access tier of the ticket | tier-1, premium |
ticket_type |
string | Category of the ticket | general, vip, season, staff |
visitor_company |
string | Company the visitor is representing | Acme Corp |
Event and venue scheduling, identification, and layout. Use the Metrics child object for occupancy counts and numeric venue data.
Parent: All Telemetry
Constraint: event_id=* OR venue_id=* OR gate_id=* OR route_id=*
| Field | Type | Description | Example |
|---|---|---|---|
venue_capacity |
number | Maximum capacity of the venue | 20000 |
concession_id |
string | Identifier for a concession stand | concession-12 |
event_end |
timestamp | Scheduled end time of the event | 2024-11-10T21:30:00 |
event_id |
string | Unique identifier for the event | EVT-2024-00781 |
event_name |
string | Name of the event | Championship Finals 2024 |
gate_id |
string | Identifier for an entry or exit gate | gate-north-1 |
parking_lot_id |
string | Identifier for a parking area | lot-C |
route_id |
string | Identifier for a transit or delivery route | route-shuttle-A |
section_id |
string | Identifier for a seating or venue section | section-B, upper-deck-3 |
event_start |
timestamp | Scheduled start time of the event | 2024-11-10T18:00:00 |
venue_id |
string | Unique identifier for the venue | venue-stadium-01 |
venue_name |
string | Name of the venue | City Arena |
Real-time location tracking from Cisco Spaces, BLE beacons, and WiFi positioning. Extends the base geospatial fields (geo_lat, geo_lon, x_coordinate, y_coordinate) defined in the beginning of this topic.
Parent: All Telemetry
Constraint: location_id=* OR tracked_device_id=* OR visit_id=*
| Field | Type | Description | Example |
|---|---|---|---|
ap_mac |
string | MAC address of the associated access point | 00:1B:2C:3D:4E:5F |
detection_method |
string | Technology used to determine the device location | wifi, ble, gps, rfid |
entry_time |
timestamp | Time the tracked device entered the location | 2024-11-01T08:45:00 |
exit_time |
timestamp | Time the tracked device exited the location | 2024-11-01T09:30:00 |
location_id |
string | Cisco Spaces location UUID | loc-uuid-00f3a1 |
location_name |
string | Human-readable name of the location | Floor 2 - West Wing |
location_type |
string | Granularity level of the location | campus, building, floor, zone |
ssid |
string | WiFi network the tracked device is connected to | corp-wifi-5g |
tracked_device_id |
string | Identifier of the device being tracked | mobile-emp-007, asset-tag-142 |
tracked_device_type |
string | Type of device being tracked | mobile, tag, client, asset |
visit_id |
string | Unique identifier for a visit or journey through the space | visit-20241101-00312 |
See also
- Operational Telemetry dashboards : Explore the dashboards built on this data model
- About data models : Splunk Cloud Platform documentation on data model concepts, field types, and acceleration