How netflix/spectator works
Spectator is a Java library for recording dimensional time-series measurements. Applications create IDs and meters through a Registry, update counters, timers, summaries and gauges, then registry implementations expose or publish measurements. The repository also provides Atlas querying/subscriptions, an HTTP polling endpoint, and optional integrations for JVM/GC, AWS, IPC, logging, Spark and Netflix tagging. The README documents the core instrumentation path; sampled source gives specific evidence for the HTTP endpoint, Atlas subscription refresh and selected integrations, but not every integration’s internal wiring.
Main entry points: Registry.java Registry API · AtlasRegistry.java Atlas registry · SubscriptionManager.java LWC subscriptions · Publisher.java Atlas publisher
Components 26
Instrumentation API
- Registry API
spectator-api/src/main/java/com/netflix/spectator/api/Registry.java - IDs and tags
spectator-api/src/main/java/com/netflix/spectator/api/DefaultId.java - Meters
spectator-api/src/main/java/com/netflix/spectator/api/DefaultRegistry.java - Histograms
spectator-api/src/main/java/com/netflix/spectator/api/histogram/PercentileTimer.java - Meter patterns
spectator-api/src/main/java/com/netflix/spectator/api/patterns/PolledMeter.java
Atlas Registry
- Atlas registry
spectator-reg-atlas/src/main/java/com/netflix/spectator/atlas/AtlasRegistry.java - LWC subscriptions
spectator-reg-atlas/src/main/java/com/netflix/spectator/atlas/SubscriptionManager.java - Query parsing
spectator-reg-atlas/src/main/java/com/netflix/spectator/atlas/impl/Parser.java - Query matching
spectator-reg-atlas/src/main/java/com/netflix/spectator/atlas/impl/QueryIndex.java - Atlas publisher
spectator-reg-atlas/src/main/java/com/netflix/spectator/atlas/Publisher.java
Metric Exposure
- Metrics endpoint
spectator-web-spring/src/main/java/com/netflix/spectator/controllers/MetricsController.java
Integrations
- IPC HTTP client
spectator-ext-ipc/src/main/java/com/netflix/spectator/ipc/http/HttpClient.java - IPC logging
spectator-ext-ipc/src/main/java/com/netflix/spectator/ipc/IpcLogger.java - AWS metrics
spectator-ext-aws/src/main/java/com/netflix/spectator/aws/SpectatorServiceMetricCollector.java - AWS SDK v2
spectator-ext-aws2/src/main/java/com/netflix/spectator/aws2/SpectatorExecutionInterceptor.java - JVM metrics
spectator-ext-jvm/src/main/java/com/netflix/spectator/jvm/JmxPoller.java - GC events
spectator-ext-gc/src/main/java/com/netflix/spectator/gc/GcEventListener.java - Log4j appender
spectator-ext-log4j2/src/main/java/com/netflix/spectator/log4j/SpectatorAppender.java - Spark reporter
spectator-ext-spark/src/main/java/com/netflix/spectator/spark/SpectatorReporter.java - Placeholder meters
spectator-ext-placeholders/src/main/java/com/netflix/spectator/placeholders/DefaultPlaceholderFactory.java - Netflix tagging
spectator-nflx-tagging/src/main/java/com/netflix/spectator/nflx/tagging/NetflixTagging.java - Metrics adapter
spectator-reg-metrics3/src/main/java/com/netflix/spectator/metrics3/MetricsRegistry.java - Metrics v5 adapter
spectator-reg-metrics5/src/main/java/com/netflix/spectator/metrics5/MetricsCounter.java - Servlet filter
spectator-ext-ipcservlet/src/main/java/com/netflix/spectator/ipcservlet/IpcServletFilter.java
Other components
- Instrumented app
- Atlas service
Connections 28
- Instrumented app → Registry API: creates meters
- Instrumented app → IDs and tags: adds dimensions
- Registry API → IDs and tags: creates IDs
- Instrumented app → Meters: records values
- Registry API → Meters: provides meters
- Registry API → Histograms: builds distributions
- Registry API → Meter patterns: supports polling
- Instrumented app → Atlas registry: selects registry
- Atlas registry → LWC subscriptions: refreshes subscriptions
- LWC subscriptions → Atlas service: requests expressions
- Atlas registry → Query parsing: parses queries
- Atlas registry → Query matching: matches queries
- Atlas registry → Atlas publisher: publishes measurements
- Atlas publisher → Atlas service: sends measurements
- Metrics endpoint → Registry API: reads measurements
- Instrumented app → Metrics endpoint: requests metrics
- IPC HTTP client → IPC logging: logs requests
- AWS metrics → Registry API: records latency
- AWS SDK v2 → Registry API: records metrics
- JVM metrics → Registry API: polls metrics
- GC events → Registry API: records events
- Log4j appender → Registry API: records logging
- Spark reporter → Registry API: reports metrics
- Placeholder meters → Registry API: provides meters
- Netflix tagging → Registry API: adds tags
- Metrics adapter → Registry API: adapts registry
- Metrics v5 adapter → Registry API: adapts meters
- Servlet filter → IPC logging: integrates requests