Zum Inhalt springen
Deutsch

Stock-Metriken

Wenn die Metrics-Extension startet, zeichnet das Framework automatisch eine Basislinie an Metriken auf, die das Actor- System, Mailboxen, Cluster, Sharding, Persistence und Broker- Actor abdecken.

import { ActorSystem, MetricsExtensionId } from 'actor-ts';
const metrics = system.extension(MetricsExtensionId);
// Stock-Metriken beginnen aufzuzeichnen — kein weiteres Setup

Das sind die Metriken, die du dir sonst selbst schreiben würdest. Sie Out-of-the-Box auszuliefern erlaubt dir, sofort ein Dashboard zu verdrahten.

Per-Actor-Class-Metriken — deckt die Actor ab, die Anwendungslogik hosten:

MetrikTypLabelsBedeutung
actor_messages_received_totalcounterclass, pathInsgesamt in eine Actor-Mailbox geroutete Nachrichten.
actor_messages_processed_totalcounterclass, pathInsgesamt an onReceive übergebene Nachrichten.
actor_messages_failed_totalcounterclass, pathNachrichten, deren onReceive geworfen hat.
actor_message_duration_mshistogramclass, pathVerarbeitungszeit pro Nachricht.
actor_restarts_totalcounterclass, pathSupervisor-getriebene Restarts.

Das path-Label kann hoch-kardinal sein (ein Pfad pro Actor). Für sharded Entities (Tausende Pfade) deckelt das Framework Label-Serien — nur die ersten N Pfade werden individuell verfolgt, der Rest aggregiert in eine einzige _other-Serie.

MetrikTypLabelsBedeutung
actor_mailbox_sizegaugeclass, pathAktuelle Tiefe.
actor_mailbox_enqueued_totalcounterclass, pathEnqueues insgesamt.
actor_mailbox_dequeued_totalcounterclass, pathDequeues insgesamt.
actor_mailbox_dropped_totalcounterclass, path, reasonDrops nach Overflow-Policy.

mailbox_size ist die Zeitpunkt-Tiefe; kombiniert mit Enqueue-/Dequeue-Raten kannst du Backpressure berechnen.

Ein hohes mailbox_size mit wachsendem dropped_total ist ein Slow-Consumer-Signal — der Actor kommt mit seiner Eingangsrate nicht mit.

MetrikTypLabelsBedeutung
cluster_members_countgaugestatusMitglieder in jedem Zustand (Joining/Up/Unreachable/etc.)
cluster_gossip_messages_totalcounterdirectionGossip-Count ein/aus.
cluster_member_transitions_totalcounterfrom, toZustandsübergänge pro Typ.
cluster_unreachable_duration_mshistogramWie lange unerreichbare Mitglieder so bleiben.

Zum Monitoring der Cluster-Gesundheit:

  • cluster_members_count{status="up"} sollte deiner konfigurierten Replica-Anzahl entsprechen.
  • cluster_members_count{status="unreachable"} > 0 ist ein Alert-Auslöser.
  • cluster_unreachable_duration_ms p99 gibt „wie flappy ist das Netzwerk” — hohe Werte heißen, dein Failure-Detector braucht möglicherweise Tuning.
MetrikTypLabelsBedeutung
sharding_shards_hostedgaugetype, regionShards pro Region pro Typ gehostet.
sharding_entities_countgaugetype, regionAktive Entities pro Region.
sharding_rebalances_totalcountertypeRebalance-Events.
sharding_handoffs_totalcountertype, outcomeHandoff-Erfolg/-Fehlschlag.
sharding_passivations_totalcountertype, reasonIdle-Timeout / Max-Entities / manuell.

Nützliche Dashboards:

  • Heiße Regionensharding_shards_hosted pro Region.
  • Entity-Churnsharding_passivations_total-Rate.
  • Rebalance-Frequenz — hohe Werte deuten auf Cluster- Instabilität.
MetrikTypLabelsBedeutung
persistence_events_written_totalcounterpid_prefixGeschriebene Events.
persistence_events_replayed_totalcounterpid_prefixWährend Recovery gelesene Events.
persistence_snapshot_saves_totalcounterpid_prefixGeschriebene Snapshots.
persistence_recovery_duration_mshistogrampid_prefixZeit von preStart bis Recovery-Complete.

recovery_duration_ms ist eine der actionable-sten Metriken — wenn Recovery anfängt Sekunden zu brauchen, snapshot aggressiver.

pid_prefix ist eine Label-Gruppe, abgeleitet aus deiner persistenceId — z. B. aggregiert account-* alle Account-Events.

Für BrokerActor-Subklassen (Kafka, MQTT usw.):

MetrikTypLabelsBedeutung
broker_stategaugeactor, endpoint0 = disconnected, 1 = connected, etc.
broker_connect_attempts_totalcounteractor, endpoint, outcomeConnect-Versuche, Erfolg/Fehlschlag.
broker_messages_in_totalcounteractor, topicEingehende Nachrichten vom Broker.
broker_messages_out_totalcounteractor, topicAusgehende Nachrichten zum Broker.
broker_buffer_sizegaugeactorAusgangs-Buffer-Tiefe.
broker_buffer_overflow_totalcounteractor, policyBuffer-Overflows.

broker_state ist das schnellste Signal für Verbindungsprobleme — ein Gauge, der unter 1 fällt, heißt, ein Broker ist down.

system.extension(MetricsExtensionId, {
enableStockMetrics: false, // aus
});

Wenn der Overhead der Stock-Metriken zählt (CPU-enge Loops, sehr hoher Actor-Churn), kannst du dich abmelden. Die meisten Produktivsysteme lassen sie an — der Overhead ist vernachlässigbar.

const metrics = system.extension(MetricsExtensionId);
metrics.registry.setStaticLabels({
region: 'eu-west-1',
env: 'production',
});

Statische Labels gelten für jede Metrik. Nützlich für den globalen Kontext, auf den das Metrik-Backend joinen sollte (Region, Env, Pod-Name).