Enable detailed monitoring for singleton actors (#3200)
What changed, and why it matters
This commit is a routine observability/monitoring change. It renames a few internal actor identifiers (for example from 'zmqblock' to 'zmq-block') and adds a Kamon monitoring configuration so that specific singleton actors report their mailbox size. There is no security fix or vulnerability present in the diff.
No security action needed. Treat as a normal operational/monitoring improvement.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The patch enables per-actor metric tracking for a whitelist of singleton Akka actors in Eclair. It updates actor names in Setup.scala to match the new Kamon filter list in application.conf. The change is purely about metrics instrumentation and actor naming consistency; it does not alter message handling, authentication, cryptography, network exposure, or error-handling behavior.
Changed components
eclair-core/src/main/scala/fr/acinq/eclair/Setup.scalaeclair-node/src/main/resources/application.confInspect captured patch +29 / −3
diff --git a/eclair-core/src/main/scala/fr/acinq/eclair/Setup.scala b/eclair-core/src/main/scala/fr/acinq/eclair/Setup.scala
index 0038338..4e48b2f 100644
--- a/eclair-core/src/main/scala/fr/acinq/eclair/Setup.scala
+++ b/eclair-core/src/main/scala/fr/acinq/eclair/Setup.scala
@@ -326,14 +326,14 @@ class Setup(val datadir: File,
}
watcher = {
- system.actorOf(SimpleSupervisor.props(Props(new ZMQActor(config.getString("bitcoind.zmqblock"), ZMQActor.Topics.HashBlock, Some(zmqBlockConnected))), "zmqblock", SupervisorStrategy.Restart))
- system.actorOf(SimpleSupervisor.props(Props(new ZMQActor(config.getString("bitcoind.zmqtx"), ZMQActor.Topics.RawTx, Some(zmqTxConnected))), "zmqtx", SupervisorStrategy.Restart))
+ system.actorOf(SimpleSupervisor.props(Props(new ZMQActor(config.getString("bitcoind.zmqblock"), ZMQActor.Topics.HashBlock, Some(zmqBlockConnected))), "zmq-block", SupervisorStrategy.Restart))
+ system.actorOf(SimpleSupervisor.props(Props(new ZMQActor(config.getString("bitcoind.zmqtx"), ZMQActor.Topics.RawTx, Some(zmqTxConnected))), "zmq-tx", SupervisorStrategy.Restart))
val watcherBitcoinClient = if (config.getBoolean("bitcoind.batch-watcher-requests")) {
new BitcoinCoreClient(new BatchingBitcoinJsonRPCClient(bitcoin), nodeParams.liquidityAdsConfig.lockUtxos)
} else {
new BitcoinCoreClient(bitcoin, nodeParams.liquidityAdsConfig.lockUtxos)
}
- system.spawn(Behaviors.supervise(ZmqWatcher(nodeParams, blockHeight, watcherBitcoinClient)).onFailure(typed.SupervisorStrategy.resume), "watcher")
+ system.spawn(Behaviors.supervise(ZmqWatcher(nodeParams, blockHeight, watcherBitcoinClient)).onFailure(typed.SupervisorStrategy.resume), "zmq-watcher")
}
router = system.actorOf(SimpleSupervisor.props(Router.props(nodeParams, watcher, Some(routerInitialized)), "router", SupervisorStrategy.Resume))
diff --git a/eclair-node/src/main/resources/application.conf b/eclair-node/src/main/resources/application.conf
index eaa336f..268609d 100644
--- a/eclair-node/src/main/resources/application.conf
+++ b/eclair-node/src/main/resources/application.conf
@@ -34,6 +34,32 @@ akka {
kamon.instrumentation.akka {
filters {
actors {
+ # Decides which actors will have metric tracking enabled. Beware that most of the time what you really need is to
+ # track Actor groups instead of individual actors because wildly targetting actors can lead to cardinality issues.
+ #
+ track {
+ includes = ${?kamon.instrumentation.akka.filters.actors.track.includes} [
+ "**/blockchain-watchdog",
+ "**/zmq-block",
+ "**/zmq-tx",
+ "**/zmq-watcher",
+ "**/router",
+ "**/front-router",
+ "**/db-event-handler",
+ "**/register",
+ "**/payment-handler",
+ "**/relayer",
+ "**/switchboard",
+ "**/client-spawner",
+ "**/server",
+ "**/payment-initiator",
+ "**/autoprobe-count",
+ "**/batching-client",
+ "**/post-restart-htlc-cleaner"
+ ]
+ excludes = [ "*/system/**", "*/user/IO-**" ]
+ }
+
# Decides which actors generate Spans for the messages they process, given that there is already an ongoing trace
# in the Context of the processed message (i.e. there is a Sampled Span in the Context).
trace {
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.