diff --git a/scripts/base/frameworks/cluster/__load__.zeek b/scripts/base/frameworks/cluster/__load__.zeek index a854302636..0d6372e3d4 100644 --- a/scripts/base/frameworks/cluster/__load__.zeek +++ b/scripts/base/frameworks/cluster/__load__.zeek @@ -14,6 +14,9 @@ redef Broker::log_topic = Cluster::rr_log_topic; # Add a cluster prefix. @prefixes += cluster +# This should soon condition on loading only when Broker is in use. +@load ./broker-backpressure + @if ( Supervisor::is_supervised() ) # When running a supervised cluster, populate Cluster::nodes from the node table # the Supervisor provides to new Zeek nodes. The management framework configures diff --git a/scripts/base/frameworks/cluster/broker-backpressure.zeek b/scripts/base/frameworks/cluster/broker-backpressure.zeek new file mode 100644 index 0000000000..e3fe4c9cdd --- /dev/null +++ b/scripts/base/frameworks/cluster/broker-backpressure.zeek @@ -0,0 +1,29 @@ +# Notifications for Broker-reported backpressure overflow. +# See base/frameworks/broker/backpressure.zeek for context. + +@load base/frameworks/telemetry + +module Cluster; + +global broker_backpressure_disconnects_cf = Telemetry::register_counter_family([ + $prefix="zeek", + $name="broker-backpressure-disconnects", + $unit="", + $label_names=vector("peer"), + $help_text="Number of Broker peerings dropped due to a neighbor falling behind in message I/O", +]); + +event Broker::peer_removed(endpoint: Broker::EndpointInfo, msg: string) + { + if ( ! endpoint?$network || "caf::sec::backpressure_overflow" !in msg ) + return; + + local nn = nodeid_to_node(endpoint$id); + + Cluster::log(fmt("removed due to backpressure overflow: %s%s:%s (%s)", + nn$name != "" ? "" : "non-cluster peer ", + endpoint$network$address, endpoint$network$bound_port, + nn$name != "" ? nn$name : endpoint$id)); + Telemetry::counter_family_inc(broker_backpressure_disconnects_cf, + vector(nn$name != "" ? nn$name : "unknown")); + } diff --git a/testing/btest/Baseline/coverage.init-default/missing_loads b/testing/btest/Baseline/coverage.init-default/missing_loads index e16624e1fb..9997ec4fd8 100644 --- a/testing/btest/Baseline/coverage.init-default/missing_loads +++ b/testing/btest/Baseline/coverage.init-default/missing_loads @@ -1,4 +1,5 @@ ### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +-./frameworks/cluster/broker-backpressure.zeek -./frameworks/cluster/broker-stores.zeek -./frameworks/cluster/nodes/logger.zeek -./frameworks/cluster/nodes/manager.zeek