Splunk Integration

When Splunk upload is enabled, Pulse Endpoint sends all collected metrics to your Splunk instance via HTTP Event Collector. This allows you to build dashboards, run queries, and correlate Mac telemetry with other data sources.

Dashboard Starter Pack

Pre-built Splunk dashboard with fleet overview, CPU/memory trends, process analytics, alert correlation, and more.

1Download the dashboard XML file below
2In Splunk, go to Settings → Dashboards → Create New Dashboard
3Click Source (top right) and paste the XML
4Update index=main to match your index if different

Dashboard uses index=main and sourcetype="macos:pulse" by default

Event Types

Pulse Endpoint sends three types of events to Splunk, each at its own interval:

Metrics

System telemetry collected every interval (default 30s). Contains CPU, memory, disk, network, GPU, power, process, and host data.

Watched Processevent_type: "watched_process"

Per-process tracking for watched processes. Sent as separate events so you can monitor specific apps across your fleet.

Alertevent_type: "alert"

Fired when CPU or memory pressure thresholds are exceeded for a sustained duration. Includes the threshold, current value, and top processes at time of alert.

Metrics Event Fields

Every metrics event includes timestamp and hostname at the top level, plus the following nested objects.

CPU

FieldTypeDescription
cpu.load_1mDoubleLoad average — 1 minute
cpu.load_5mDoubleLoad average — 5 minutes
cpu.load_15mDoubleLoad average — 15 minutes
cpu.cpu_countIntNumber of logical CPU cores
cpu.load_percentDoubleOverall CPU load as a percentage
cpu.cpu_userDoubleUser-space CPU %
cpu.cpu_sysDoubleSystem (kernel) CPU %
cpu.cpu_idleDoubleIdle CPU %
cpu.thermal_throttleBoolWhether CPU is being thermally throttled
cpu.thermal_stateStringThermal state name (nominal, fair, serious, critical)
cpu.thermal_levelIntThermal pressure level (0–3)

Memory

FieldTypeDescription
memory.mem_total_mbDoubleTotal physical memory (MB)
memory.mem_free_mbDoubleAvailable memory (MB)
memory.mem_active_mbDoubleActive memory (MB)
memory.mem_inactive_mbDoubleInactive memory (MB)
memory.mem_wired_mbDoubleWired (non-purgeable) memory (MB)
memory.mem_compressed_mbDoubleCompressed memory (MB)
memory.memory_pressure_levelIntPressure level: 1 = normal, 2 = warning, 4 = critical
memory.memory_pressureStringPressure level as a string (normal, warning, critical)
memory.pageinsIntPage-in count (delta since last collection)
memory.pageoutsIntPage-out count (delta)
memory.swapinsIntSwap-in count (delta)
memory.swapoutsIntSwap-out count (delta)
memory.swap_total_mbDoubleTotal swap space (MB)
memory.swap_used_mbDoubleUsed swap (MB)
memory.swap_free_mbDoubleFree swap (MB)

Disk

FieldTypeDescription
disk.disk_total_gbDoubleTotal disk capacity (GB)
disk.disk_used_gbDoubleUsed disk space (GB)
disk.disk_free_gbDoubleFree disk space (GB)
disk.disk_percent_usedIntDisk usage percentage
disk.disk_kb_read_secDoubleDisk read throughput (KB/s)
disk.disk_kb_write_secDoubleDisk write throughput (KB/s)
disk.disk_transfers_secDoubleDisk I/O operations per second

Network

FieldTypeDescription
network.interfaceStringActive network interface name (e.g., en0)
network.net_packets_inIntInbound packets (delta)
network.net_packets_outIntOutbound packets (delta)
network.net_bytes_inIntInbound bytes (delta)
network.net_bytes_outIntOutbound bytes (delta)
network.net_errors_inIntInbound errors (delta)
network.net_errors_outIntOutbound errors (delta)
network.internet_connectedBoolWhether the host has internet connectivity

GPU

FieldTypeDescription
gpu.gpu_modelStringGPU model name
gpu.gpu_core_countIntNumber of GPU cores
gpu.gpu_utilization_percentIntOverall GPU device utilization %
gpu.gpu_renderer_percentIntGPU renderer utilization %
gpu.gpu_tiler_percentIntGPU tiler utilization %
gpu.gpu_memory_in_use_bytesInt64GPU memory currently in use (bytes)
gpu.gpu_memory_allocated_bytesInt64GPU memory allocated (bytes)
gpu.top_gpu_processes[]ArrayTop processes by GPU time — each with pid, name, gpu_time_ns

Power

FieldTypeDescription
power.on_batteryBoolRunning on battery
power.on_acBoolConnected to AC power
power.battery_percentIntBattery charge level (%)
power.battery_stateStringBattery state (charging, discharging, charged, etc.)
power.prevent_sleep_assertionsIntNumber of active sleep prevention assertions

Top Processes

Each metrics event includes the top 5 processes by CPU, memory, network, and disk I/O. Process lists are nested under processes.

FieldTypeDescription
processes.process_countIntTotal number of running processes
processes.top_cpu_processes[]ArrayTop 5 by CPU — each with pid, ppid, name, cpu_percent
processes.top_mem_processes[]ArrayTop 5 by memory — each with pid, ppid, name, memory_mb
processes.top_net_processes[]ArrayTop 5 by network — each with pid, name, bytes_in, bytes_out
processes.top_disk_processes[]ArrayTop 5 by disk I/O — each with pid, name, read_bytes_per_sec, write_bytes_per_sec

System / Host Info

Host identification fields for fleet-wide queries, nested under system.

FieldTypeDescription
system.macos_versionStringmacOS version (e.g., 15.3.1)
system.hardware_modelStringHardware model identifier (e.g., Mac16,1)
system.cpu_brandStringCPU name (e.g., Apple M4 Pro)
system.chip_descriptionStringFull chip description with core counts
system.performance_coresIntNumber of performance cores
system.efficiency_coresIntNumber of efficiency cores
system.gpu_coresIntNumber of GPU cores
system.console_userStringCurrently logged-in user
system.uptime_secondsIntSystem uptime in seconds
system.uptime_hoursDoubleSystem uptime in hours

Watched Process Events

When you configure watched processes (via the menu bar or MDM), Pulse Endpoint sends a separate event for each watched process with event_type: "watched_process". This lets you track specific apps across your fleet.

Watched Process Fields

FieldTypeDescription
event_typeStringAlways "watched_process"
watched.process_patternStringThe process name pattern being watched
watched.process_countIntNumber of matching running instances
watched.cpu_percentDoubleCombined CPU % of all matching processes
watched.memory_mbDoubleCombined memory (MB) of all matching processes
watched.network_bytes_inInt64Combined inbound bytes (delta)
watched.network_bytes_outInt64Combined outbound bytes (delta)
watched.disk_read_bytes_per_secDoubleCombined disk read (bytes/s)
watched.disk_write_bytes_per_secDoubleCombined disk write (bytes/s)

Alert Events

When CPU or memory pressure thresholds are exceeded for a sustained duration, a separate alert event is logged with event_type: "alert".

Alert Fields

FieldTypeDescription
event_typeStringAlways "alert"
alert.typeStringAlert type (cpu, memory_pressure)
alert.messageStringHuman-readable alert message
alert.valueStringCurrent value that triggered the alert
alert.thresholdStringConfigured threshold that was exceeded
alert.topCPUProcesses[]ArrayTop CPU processes at time of alert
alert.topMemoryProcesses[]ArrayTop memory processes at time of alert

HEC Endpoint Setup

Pulse Endpoint sends metrics in JSON format using Splunk's HEC event endpoint. Your endpoint URL must point to the JSON collector:

https://splunk.example.com:8088/services/collector/event
https://splunk.example.com:8088/services/collector
https://splunk.example.com:8088/services/collector/raw
https://splunk.example.com:8088/services/collector/event/(trailing slash)

Do not use the raw endpoint (/services/collector/raw) — Pulse Endpoint sends structured JSON events, not raw text. Also ensure there is no trailing slash in the URL, as this will cause a 404 error.

Optionally enable uploading metrics to Splunk via HTTP Event Collector. Requires hecEndpoint and hecToken to be configured.

Default: false
Plist example:
<key>uploadEnabled</key>
<true/>

Full URL to your Splunk HTTP Event Collector JSON endpoint. Use /services/collector or /services/collector/event. Do not use the raw endpoint or include a trailing slash.

Default: ""
Plist example:
<key>hecEndpoint</key>
<string>https://splunk.example.com:8088/services/collector/event</string>
hecToken
String

Authentication token for the Splunk HTTP Event Collector. Generated in Splunk under Settings > Data Inputs > HTTP Event Collector.

Default: ""
Plist example:
<key>hecToken</key>
<string>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</string>

Target Splunk index for metric events. The HEC token must have permission to write to this index.

Default: main
Plist example:
<key>splunkIndex</key>
<string>macos_metrics</string>

Splunk sourcetype assigned to uploaded events. Useful for parsing and searching.

Default: macos:pulse
Plist example:
<key>sourcetype</key>
<string>pulse:metrics</string>
verifySSL
Boolean

Validate the SSL certificate of the Splunk server. Disable for self-signed certificates or environments where the HEC port uses an internal CA (e.g., Splunk Cloud trial instances, on-prem Splunk with default certificates).

Default: true
Plist example:
<key>verifySSL</key>
<false/>

How often to upload stored metrics to Splunk, in minutes.

Default: 5
Values: 1–60
Plist example:
<key>uploadIntervalMinutes</key>
<integer>1</integer>