Goal: get macOS Unified Logs into Datadog without drowning in high-volume system chatter.
What we do:
- Local (Vector): collect, normalize, redact, and drop obviously-benign spam before it leaves the host.
- Remote (Datadog pipeline): tag known benign patterns as
@noise_classso dashboards/monitors can exclude them consistently.
- macOS Tahoe
- Homebrew
- Vector (
brew install vectordotdev/brew/vector) - Datadog Agent installed
- Environment variables set in shell/session for Datadog API usage:
DD_API_KEYDD_APP_KEYDD_SITE(for exampledatadoghq.com)
From repo root:
python3 scripts/datadog/setup_macos_tahoe_logging.py --upsert-noise-pipelinePreview-only mode (no writes / no API calls):
python3 scripts/datadog/setup_macos_tahoe_logging.py --no-apply-vector --upsert-noise-pipeline --dry-run-pipelineThe authoritative pipeline payload lives here:
config/observability/datadog-macos-unifiedlog-noise-pipeline.json
You can upsert it with:
python3 scripts/datadog/upsert_macos_noise_pipeline.pypython3 .claude/skills/macos-unifiedlog-vector/scripts/analyze_noise.py --limit 25 --max-lines 200000
bash scripts/datadog/verify-setup.sh
python3 scripts/datadog/analyze_macos_noise_drift.py --duration 24h --max-events 5000 --min-count 3Hide noise-classed logs:
source:macos.unifiedlog -@noise_class:*
Only noise-classed logs (for auditing rules):
source:macos.unifiedlog @noise_class:*
- Unified logging command/config/stats (
log): https://www.manpagez.com/man/1/log/ - Console filtering workflow: https://support.apple.com/en-tj/guide/console/cnsl35710/mac
- Unified logging design guidance (WWDC 2016): https://developer.apple.com/videos/play/wwdc2016/721/
- PlugInKit command and
pkdrelationship: https://www.manpagez.com/man/8/pluginkit/
Appendix: Noise Producers + Why Noise/Chatter
These producers are macOS system services that can emit high-volume log lines (often at error) that typically do not require operator action in a dev workstation context.
runningboard_identity_chatter- Producer:
runningboardd(process lifecycle/resource assertions). - Why: repetitive identity-mismatch diagnostics; usually self-resolving.
- Producer:
token_generation_inference_chatter- Producer:
TGOnDeviceInferenceProviderService(on-device inference asset lifecycle). - Why: expected asset/token retry churn during background transitions.
- Producer:
imagent_coredata_xpc_chatter- Producer:
imagent(Messages identity/account sync). - Why: transient CoreData/XPC token setup issues under account/network churn.
- Producer:
findmy_cfprefs_sandbox_fault- Producer:
findmybeaconingd. - Why: recurring sandbox/preferences faults often without user-visible degradation.
- Producer:
apsd_entitlement_noise- Producer:
apsd(Apple Push Service daemon). - Why: entitlement capability checks common on dev/non-internal contexts.
- Producer:
apsd_connection_chatter- Producer:
apsd. - Why: reconnect/replacement messages during normal backoff behavior.
- Producer:
akd_attestation_noise- Producer:
akd(Apple account/auth daemon). - Why: recurring attestation warnings during identity refresh.
- Producer:
cloudd_ckoperation_fallback_noise- Producer:
cloudd(CloudKit daemon). - Why: compatibility fallback selection logs; commonly benign.
- Producer:
worldclock_mobiletimer_connection_chatter- Producer:
WorldClockWidgetvia MobileTimer XPC. - Why: widget lifecycle/XPC reconnect chatter is frequent and low-value.
- Producer:
fseventsd_missing_bundleid_noise- Producer:
fseventsd. - Why: many clients lack bundle IDs; noisy but expected.
- Producer:
pkd_persona_generation_noise- Producer:
pkd/ PlugInKit. - Why: persona generation/extension point record retries during registry churn.
- Producer:
containermanagerd_diagnosticd_filter_noise- Producer:
containermanagerd. - Why: benign periodic probes (diagnostic filter access / empty query results).
- Producer:
backupd_helper_capability_permission_noise- Producer:
backupd-helper/ Time Machine helper. - Why: capability/permission probes against volumes often fail by design and retry.
- Producer: