ObservabilityAutoConfiguration

@AutoConfiguration(after = [WowAutoConfiguration::class])
@ConditionalOnClass(name = ["me.ahoo.wow.observability.OtelObserver"])
@ConditionalOnProperty(prefix = "wow.observability", name = ["enabled"], matchIfMissing = true)
@EnableConfigurationProperties(value = [ObservabilityProperties::class])
class ObservabilityAutoConfiguration

Tracing and metrics (wow-observability), active when the application has wow-observability on its classpath, unless wow.observability.enabled=false (ObservabilityProperties).

The spans go through the application's OpenTelemetry bean (Spring Boot's, with an SDK and its exporters), else GlobalOpenTelemetry (the Java agent's, or a no-op one); the metrics go to the application's MeterRegistry bean (Spring Boot Actuator's), else Micrometer's global registry.

  • Node: an OtelObserver, beside any Observer of the application's (the node tells every one): the node's admissions, executions, decisions, appends, subscription handlings (consumptions of a topic among them) and timer firings are spans, in the trace each request, entry or message carries, with the commit latency, subscription lag and timer delay as timers.

  • Queries: an OtelQueryObserver among the QueryObservers the query plane takes: a span and a timer each; and the stores' query bulkheads (QueryLimitMetrics): their limits, write pressure and decreases.

  • Kafka produce: every TopicProducer bean (Kafka's) is wrapped in a TracingTopicProducer: a span per send.

  • Parked entries: a ParkedMetrics among the ParkedNotifiers the node takes; and NodeMetrics, which samples every wow.node.sample-interval how many entries each subscription has parked and where each subscription of the log stands (its position, backlog and progress: a rebuild's), from the node's start to its end, when there is a node.

Constructors

Link copied to clipboard
constructor()

Types

Link copied to clipboard
object Companion

Functions

Link copied to clipboard
@Bean
@ConditionalOnBean(value = [ServiceNode::class])
fun wowNodeMetrics(node: ServiceNode, meters: ObjectProvider<MeterRegistry>, sampler: NodeSampler): NodeMetrics
Link copied to clipboard
@Bean
fun wowObserver(openTelemetry: ObjectProvider<OpenTelemetry>, meters: ObjectProvider<MeterRegistry>, beans: ListableBeanFactory): Observer
Link copied to clipboard
@Bean
fun wowOtelQueryObserver(openTelemetry: ObjectProvider<OpenTelemetry>, meters: ObjectProvider<MeterRegistry>): QueryObserver
Link copied to clipboard
@Bean
fun wowParkedMetrics(meters: ObjectProvider<MeterRegistry>): ParkedNotifier
Link copied to clipboard
fun wowQueryLimitMetrics(stores: ObjectProvider<QueryStores>, meters: ObjectProvider<MeterRegistry>): SmartInitializingSingleton

The meters of the stores' query bulkheads: each one's limit and, of those that adapt, the write pressure and the limit's decreases, registered once every bean exists, when the node queries its stores.