zeek/doc/scripts/base/frameworks/cluster/main.zeek.rst
Tim Wojtulewicz ded98cd373 Copy docs into Zeek repo directly
This is based on commit 2731def9159247e6da8a3191783c89683363689c from the
zeek-docs repo.
2025-09-26 02:58:29 +00:00

999 lines
40 KiB
ReStructuredText

:tocdepth: 3
base/frameworks/cluster/main.zeek
=================================
.. zeek:namespace:: Cluster
A framework for establishing and controlling a cluster of Zeek instances.
In order to use the cluster framework, a script named
``cluster-layout.zeek`` must exist somewhere in Zeek's script search path
which has a cluster definition of the :zeek:id:`Cluster::nodes` variable.
The ``CLUSTER_NODE`` environment variable or :zeek:id:`Cluster::node`
must also be sent and the cluster framework loaded as a package like
``@load base/frameworks/cluster``.
.. warning::
The file ``cluster-layout.zeek`` should only contain the definition
of :zeek:id:`Cluster::nodes`. Specifically, avoid loading other Zeek
scripts or using :zeek:see:`redef` for anything but :zeek:id:`Cluster::nodes`.
Due to ``cluster-layout.zeek`` being loaded very early, it is easy to
introduce circular loading issues.
:Namespace: Cluster
:Imports: :doc:`base/bif/cluster.bif.zeek </scripts/base/bif/cluster.bif.zeek>`, :doc:`base/bif/plugins/Zeek_Cluster_WebSocket.events.bif.zeek </scripts/base/bif/plugins/Zeek_Cluster_WebSocket.events.bif.zeek>`, :doc:`base/frameworks/broker </scripts/base/frameworks/broker/index>`, :doc:`base/frameworks/control </scripts/base/frameworks/control/index>`
Summary
~~~~~~~
Redefinable Options
###################
==================================================================================================== ===============================================================================
:zeek:id:`Cluster::default_backend`: :zeek:type:`Broker::BackendType` :zeek:attr:`&redef` The type of data store backend that will be used for all data stores if
no other has already been specified by the user in :zeek:see:`Cluster::stores`.
:zeek:id:`Cluster::default_master_node`: :zeek:type:`string` :zeek:attr:`&redef` Name of the node on which master data stores will be created if no other
has already been specified by the user in :zeek:see:`Cluster::stores`.
:zeek:id:`Cluster::default_persistent_backend`: :zeek:type:`Broker::BackendType` :zeek:attr:`&redef` The type of persistent data store backend that will be used for all data
stores if no other has already been specified by the user in
:zeek:see:`Cluster::stores`.
:zeek:id:`Cluster::default_store_dir`: :zeek:type:`string` :zeek:attr:`&redef` Setting a default dir will, for persistent backends that have not
been given an explicit file path via :zeek:see:`Cluster::stores`,
automatically create a path within this dir that is based on the name of
the data store.
:zeek:id:`Cluster::default_websocket_max_event_queue_size`: :zeek:type:`count` :zeek:attr:`&redef` The default maximum queue size for WebSocket event dispatcher instances.
:zeek:id:`Cluster::default_websocket_ping_interval`: :zeek:type:`interval` :zeek:attr:`&redef` The default ping interval for WebSocket clients.
:zeek:id:`Cluster::enable_round_robin_logging`: :zeek:type:`bool` :zeek:attr:`&redef` Whether to distribute log messages among available logging nodes.
:zeek:id:`Cluster::logger_topic`: :zeek:type:`string` :zeek:attr:`&redef` The topic name used for exchanging messages that are relevant to
logger nodes in a cluster.
:zeek:id:`Cluster::manager_is_logger`: :zeek:type:`bool` :zeek:attr:`&redef` Indicates whether or not the manager will act as the logger and receive
logs.
:zeek:id:`Cluster::manager_topic`: :zeek:type:`string` :zeek:attr:`&redef` The topic name used for exchanging messages that are relevant to
manager nodes in a cluster.
:zeek:id:`Cluster::node`: :zeek:type:`string` :zeek:attr:`&redef` This is usually supplied on the command line for each instance
of the cluster that is started up.
:zeek:id:`Cluster::node_topic_prefix`: :zeek:type:`string` :zeek:attr:`&redef` The topic prefix used for exchanging messages that are relevant to
a named node in a cluster.
:zeek:id:`Cluster::nodeid_topic_prefix`: :zeek:type:`string` :zeek:attr:`&redef` The topic prefix used for exchanging messages that are relevant to
a unique node in a cluster.
:zeek:id:`Cluster::nodes`: :zeek:type:`table` :zeek:attr:`&redef` The cluster layout definition.
:zeek:id:`Cluster::proxy_topic`: :zeek:type:`string` :zeek:attr:`&redef` The topic name used for exchanging messages that are relevant to
proxy nodes in a cluster.
:zeek:id:`Cluster::retry_interval`: :zeek:type:`interval` :zeek:attr:`&redef` Interval for retrying failed connections between cluster nodes.
:zeek:id:`Cluster::worker_topic`: :zeek:type:`string` :zeek:attr:`&redef` The topic name used for exchanging messages that are relevant to
worker nodes in a cluster.
==================================================================================================== ===============================================================================
Constants
#########
====================================================== ==================================================================
:zeek:id:`Cluster::broadcast_topics`: :zeek:type:`set` A set of topic names to be used for broadcasting messages that are
relevant to all nodes in a cluster.
====================================================== ==================================================================
State Variables
###############
================================================================================================ ======================================================================
:zeek:id:`Cluster::stores`: :zeek:type:`table` :zeek:attr:`&default` = *...* :zeek:attr:`&redef` A table of cluster-enabled data stores that have been created, indexed
by their name.
================================================================================================ ======================================================================
Types
#####
================================================================= ==========================================================================
:zeek:type:`Cluster::EndpointInfo`: :zeek:type:`record` Information about a WebSocket endpoint.
:zeek:type:`Cluster::Event`: :zeek:type:`record` An event instance for cluster pub/sub.
:zeek:type:`Cluster::Info`: :zeek:type:`record` :zeek:attr:`&log` The record type which contains the column fields of the cluster log.
:zeek:type:`Cluster::NamedNode`: :zeek:type:`record` Record to represent a cluster node including its name.
:zeek:type:`Cluster::NetworkInfo`: :zeek:type:`record` Network information of an endpoint.
:zeek:type:`Cluster::Node`: :zeek:type:`record` Record type to indicate a node in a cluster.
:zeek:type:`Cluster::NodeType`: :zeek:type:`enum` Types of nodes that are allowed to participate in the cluster
configuration.
:zeek:type:`Cluster::StoreInfo`: :zeek:type:`record` Information regarding a cluster-enabled data store.
:zeek:type:`Cluster::WebSocketServerOptions`: :zeek:type:`record` WebSocket server options to pass to :zeek:see:`Cluster::listen_websocket`.
:zeek:type:`Cluster::WebSocketTLSOptions`: :zeek:type:`record` The TLS options for a WebSocket server.
:zeek:type:`Cluster::BackendTag`: :zeek:type:`enum`
:zeek:type:`Cluster::EventSerializerTag`: :zeek:type:`enum`
:zeek:type:`Cluster::LogSerializerTag`: :zeek:type:`enum`
================================================================= ==========================================================================
Redefinitions
#############
======================================= ======================================
:zeek:type:`Log::ID`: :zeek:type:`enum` The cluster logging stream identifier.
* :zeek:enum:`Cluster::LOG`
======================================= ======================================
Events
######
================================================= =======================================================================
:zeek:id:`Cluster::hello`: :zeek:type:`event` When using broker-enabled cluster framework, nodes broadcast this event
to exchange their user-defined name along with a string that uniquely
identifies it for the duration of its lifetime.
:zeek:id:`Cluster::node_down`: :zeek:type:`event` When using broker-enabled cluster framework, this event will be emitted
locally whenever a connected cluster node becomes disconnected.
:zeek:id:`Cluster::node_up`: :zeek:type:`event` When using broker-enabled cluster framework, this event will be emitted
locally whenever a cluster node connects or reconnects.
================================================= =======================================================================
Hooks
#####
============================================================ =============================================================
:zeek:id:`Cluster::log_policy`: :zeek:type:`Log::PolicyHook` A default logging policy hook for the stream.
:zeek:id:`Cluster::on_subscribe`: :zeek:type:`hook` A hook invoked for every :zeek:see:`Cluster::subscribe` call.
:zeek:id:`Cluster::on_unsubscribe`: :zeek:type:`hook` A hook invoked for every :zeek:see:`Cluster::subscribe` call.
============================================================ =============================================================
Functions
#########
=========================================================================== =====================================================================
:zeek:id:`Cluster::create_store`: :zeek:type:`function` Sets up a cluster-enabled data store.
:zeek:id:`Cluster::get_active_node_count`: :zeek:type:`function` Returns the number of nodes per type, the calling node is currently
connected to.
:zeek:id:`Cluster::get_node_count`: :zeek:type:`function` Returns the number of nodes defined in the cluster layout for a given
node type.
:zeek:id:`Cluster::init`: :zeek:type:`function` Initialize the cluster backend.
:zeek:id:`Cluster::is_enabled`: :zeek:type:`function` This function can be called at any time to determine if the cluster
framework is being enabled for this run.
:zeek:id:`Cluster::listen_websocket`: :zeek:type:`function` Start listening on a WebSocket address.
:zeek:id:`Cluster::local_node_metrics_port`: :zeek:type:`function` This function can be called at any time to determine the configured
metrics port for Prometheus being used by current Zeek instance.
:zeek:id:`Cluster::local_node_type`: :zeek:type:`function` This function can be called at any time to determine what type of
cluster node the current Zeek instance is going to be acting as.
:zeek:id:`Cluster::log`: :zeek:type:`function` Write a message to the cluster logging stream.
:zeek:id:`Cluster::node_id`: :zeek:type:`function` :zeek:attr:`&redef` Function returning this node's identifier.
:zeek:id:`Cluster::node_topic`: :zeek:type:`function` :zeek:attr:`&redef` Retrieve the topic associated with a specific node in the cluster.
:zeek:id:`Cluster::nodeid_to_node`: :zeek:type:`function` Retrieve the cluster-level naming of a node based on its node ID,
a backend-specific identifier.
:zeek:id:`Cluster::nodeid_topic`: :zeek:type:`function` :zeek:attr:`&redef` Retrieve the topic associated with a specific node in the cluster.
:zeek:id:`Cluster::subscribe`: :zeek:type:`function` Subscribe to the given topic.
:zeek:id:`Cluster::unsubscribe`: :zeek:type:`function` Unsubscribe from the given topic.
=========================================================================== =====================================================================
Detailed Interface
~~~~~~~~~~~~~~~~~~
Redefinable Options
###################
.. zeek:id:: Cluster::default_backend
:source-code: base/frameworks/cluster/main.zeek 70 70
:Type: :zeek:type:`Broker::BackendType`
:Attributes: :zeek:attr:`&redef`
:Default: ``Broker::MEMORY``
The type of data store backend that will be used for all data stores if
no other has already been specified by the user in :zeek:see:`Cluster::stores`.
.. zeek:id:: Cluster::default_master_node
:source-code: base/frameworks/cluster/main.zeek 66 66
:Type: :zeek:type:`string`
:Attributes: :zeek:attr:`&redef`
:Default: ``""``
Name of the node on which master data stores will be created if no other
has already been specified by the user in :zeek:see:`Cluster::stores`.
An empty value means "use whatever name corresponds to the manager
node".
.. zeek:id:: Cluster::default_persistent_backend
:source-code: base/frameworks/cluster/main.zeek 76 76
:Type: :zeek:type:`Broker::BackendType`
:Attributes: :zeek:attr:`&redef`
:Default: ``Broker::SQLITE``
The type of persistent data store backend that will be used for all data
stores if no other has already been specified by the user in
:zeek:see:`Cluster::stores`. This will be used when script authors call
:zeek:see:`Cluster::create_store` with the *persistent* argument set true.
.. zeek:id:: Cluster::default_store_dir
:source-code: base/frameworks/cluster/main.zeek 95 95
:Type: :zeek:type:`string`
:Attributes: :zeek:attr:`&redef`
:Default: ``""``
Setting a default dir will, for persistent backends that have not
been given an explicit file path via :zeek:see:`Cluster::stores`,
automatically create a path within this dir that is based on the name of
the data store.
.. zeek:id:: Cluster::default_websocket_max_event_queue_size
:source-code: base/frameworks/cluster/main.zeek 86 86
:Type: :zeek:type:`count`
:Attributes: :zeek:attr:`&redef`
:Default: ``32``
The default maximum queue size for WebSocket event dispatcher instances.
If the maximum queue size is reached, events from external WebSocket
clients will be stalled and processed once the queue has been drained.
An internal metric named ``cluster_onloop_queue_stalls`` and
labeled with a ``WebSocketEventDispatcher:<host>:<port>`` tag
is incremented when the maximum queue size is reached.
.. zeek:id:: Cluster::default_websocket_ping_interval
:source-code: base/frameworks/cluster/main.zeek 89 89
:Type: :zeek:type:`interval`
:Attributes: :zeek:attr:`&redef`
:Default: ``5.0 secs``
The default ping interval for WebSocket clients.
.. zeek:id:: Cluster::enable_round_robin_logging
:source-code: base/frameworks/cluster/main.zeek 25 25
:Type: :zeek:type:`bool`
:Attributes: :zeek:attr:`&redef`
:Default: ``T``
Whether to distribute log messages among available logging nodes.
.. zeek:id:: Cluster::logger_topic
:source-code: base/frameworks/cluster/main.zeek 29 29
:Type: :zeek:type:`string`
:Attributes: :zeek:attr:`&redef`
:Default: ``"zeek/cluster/logger"``
:Redefinition: from :doc:`/scripts/policy/frameworks/cluster/backend/zeromq/main.zeek`
``=``::
zeek.cluster.logger
The topic name used for exchanging messages that are relevant to
logger nodes in a cluster. Used with broker-enabled cluster communication.
.. zeek:id:: Cluster::manager_is_logger
:source-code: base/frameworks/cluster/main.zeek 252 252
:Type: :zeek:type:`bool`
:Attributes: :zeek:attr:`&redef`
:Default: ``T``
Indicates whether or not the manager will act as the logger and receive
logs. This value should be set in the cluster-layout.zeek script (the
value should be true only if no logger is specified in Cluster::nodes).
Note that ZeekControl handles this automatically.
.. zeek:id:: Cluster::manager_topic
:source-code: base/frameworks/cluster/main.zeek 33 33
:Type: :zeek:type:`string`
:Attributes: :zeek:attr:`&redef`
:Default: ``"zeek/cluster/manager"``
:Redefinition: from :doc:`/scripts/policy/frameworks/cluster/backend/zeromq/main.zeek`
``=``::
zeek.cluster.manager
The topic name used for exchanging messages that are relevant to
manager nodes in a cluster. Used with broker-enabled cluster communication.
.. zeek:id:: Cluster::node
:source-code: base/frameworks/cluster/main.zeek 256 256
:Type: :zeek:type:`string`
:Attributes: :zeek:attr:`&redef`
:Default: ``""``
This is usually supplied on the command line for each instance
of the cluster that is started up.
.. zeek:id:: Cluster::node_topic_prefix
:source-code: base/frameworks/cluster/main.zeek 56 56
:Type: :zeek:type:`string`
:Attributes: :zeek:attr:`&redef`
:Default: ``"zeek/cluster/node/"``
The topic prefix used for exchanging messages that are relevant to
a named node in a cluster. Used with broker-enabled cluster communication.
.. zeek:id:: Cluster::nodeid_topic_prefix
:source-code: base/frameworks/cluster/main.zeek 60 60
:Type: :zeek:type:`string`
:Attributes: :zeek:attr:`&redef`
:Default: ``"zeek/cluster/nodeid/"``
The topic prefix used for exchanging messages that are relevant to
a unique node in a cluster. Used with broker-enabled cluster communication.
.. zeek:id:: Cluster::nodes
:source-code: base/frameworks/cluster/main.zeek 237 237
:Type: :zeek:type:`table` [:zeek:type:`string`] of :zeek:type:`Cluster::Node`
:Attributes: :zeek:attr:`&redef`
:Default: ``{}``
The cluster layout definition. This should be placed into a filter
named cluster-layout.zeek somewhere in the ZEEKPATH. It will be
automatically loaded if the CLUSTER_NODE environment variable is set.
Note that ZeekControl handles all of this automatically.
The table is typically indexed by node names/labels (e.g. "manager"
or "worker-1").
.. zeek:id:: Cluster::proxy_topic
:source-code: base/frameworks/cluster/main.zeek 37 37
:Type: :zeek:type:`string`
:Attributes: :zeek:attr:`&redef`
:Default: ``"zeek/cluster/proxy"``
:Redefinition: from :doc:`/scripts/policy/frameworks/cluster/backend/zeromq/main.zeek`
``=``::
zeek.cluster.proxy
The topic name used for exchanging messages that are relevant to
proxy nodes in a cluster. Used with broker-enabled cluster communication.
.. zeek:id:: Cluster::retry_interval
:source-code: base/frameworks/cluster/main.zeek 268 268
:Type: :zeek:type:`interval`
:Attributes: :zeek:attr:`&redef`
:Default: ``1.0 sec``
Interval for retrying failed connections between cluster nodes.
If set, the ZEEK_DEFAULT_CONNECT_RETRY (given in number of seconds)
environment variable overrides this option.
.. zeek:id:: Cluster::worker_topic
:source-code: base/frameworks/cluster/main.zeek 41 41
:Type: :zeek:type:`string`
:Attributes: :zeek:attr:`&redef`
:Default: ``"zeek/cluster/worker"``
:Redefinition: from :doc:`/scripts/policy/frameworks/cluster/backend/zeromq/main.zeek`
``=``::
zeek.cluster.worker
The topic name used for exchanging messages that are relevant to
worker nodes in a cluster. Used with broker-enabled cluster communication.
Constants
#########
.. zeek:id:: Cluster::broadcast_topics
:source-code: base/frameworks/cluster/main.zeek 47 47
:Type: :zeek:type:`set` [:zeek:type:`string`]
:Default:
::
{
"zeek/cluster/manager",
"zeek/cluster/logger",
"zeek/cluster/proxy",
"zeek/cluster/worker"
}
A set of topic names to be used for broadcasting messages that are
relevant to all nodes in a cluster. Currently, there is not a common
topic to broadcast to, because enabling implicit Broker forwarding would
cause a routing loop for this topic.
State Variables
###############
.. zeek:id:: Cluster::stores
:source-code: base/frameworks/cluster/main.zeek 130 130
:Type: :zeek:type:`table` [:zeek:type:`string`] of :zeek:type:`Cluster::StoreInfo`
:Attributes: :zeek:attr:`&default` = *[name=<uninitialized>, store=<uninitialized>, master_node=, master=F, backend=Broker::MEMORY, options=[sqlite=[path=, synchronous=<uninitialized>, journal_mode=<uninitialized>, failure_mode=Broker::SQLITE_FAILURE_MODE_FAIL, integrity_check=F]], clone_resync_interval=10.0 secs, clone_stale_interval=5.0 mins, clone_mutation_buffer_interval=2.0 mins]* :zeek:attr:`&redef`
:Default: ``{}``
A table of cluster-enabled data stores that have been created, indexed
by their name. This table will be populated automatically by
:zeek:see:`Cluster::create_store`, but if you need to customize
the options related to a particular data store, you may redef this
table. Calls to :zeek:see:`Cluster::create_store` will first check
the table for an entry of the same name and, if found, will use the
predefined options there when setting up the store.
Types
#####
.. zeek:type:: Cluster::EndpointInfo
:source-code: base/frameworks/cluster/main.zeek 396 401
:Type: :zeek:type:`record`
.. zeek:field:: id :zeek:type:`string`
.. zeek:field:: network :zeek:type:`Cluster::NetworkInfo`
.. zeek:field:: application_name :zeek:type:`string` :zeek:attr:`&optional`
The value of the X-Application-Name HTTP header, if any.
Information about a WebSocket endpoint.
.. zeek:type:: Cluster::Event
:source-code: base/frameworks/cluster/main.zeek 337 342
:Type: :zeek:type:`record`
.. zeek:field:: ev :zeek:type:`any`
The event handler to be invoked on the remote node.
.. zeek:field:: args :zeek:type:`vector` of :zeek:type:`any`
The arguments for the event.
An event instance for cluster pub/sub.
See :zeek:see:`Cluster::publish` and :zeek:see:`Cluster::make_event`.
.. zeek:type:: Cluster::Info
:source-code: base/frameworks/cluster/main.zeek 151 158
:Type: :zeek:type:`record`
.. zeek:field:: ts :zeek:type:`time` :zeek:attr:`&log`
The time at which a cluster message was generated.
.. zeek:field:: node :zeek:type:`string` :zeek:attr:`&log`
The name of the node that is creating the log record.
.. zeek:field:: message :zeek:type:`string` :zeek:attr:`&log`
A message indicating information about the cluster's operation.
:Attributes: :zeek:attr:`&log`
The record type which contains the column fields of the cluster log.
.. zeek:type:: Cluster::NamedNode
:source-code: base/frameworks/cluster/main.zeek 204 207
:Type: :zeek:type:`record`
.. zeek:field:: name :zeek:type:`string`
.. zeek:field:: node :zeek:type:`Cluster::Node`
Record to represent a cluster node including its name.
.. zeek:type:: Cluster::NetworkInfo
:source-code: base/frameworks/cluster/main.zeek 388 393
:Type: :zeek:type:`record`
.. zeek:field:: address :zeek:type:`string`
The IP address or hostname where the endpoint listens.
.. zeek:field:: bound_port :zeek:type:`port`
The port where the endpoint is bound to.
Network information of an endpoint.
.. zeek:type:: Cluster::Node
:source-code: base/frameworks/cluster/main.zeek 181 201
:Type: :zeek:type:`record`
.. zeek:field:: node_type :zeek:type:`Cluster::NodeType`
Identifies the type of cluster node in this node's configuration.
.. zeek:field:: ip :zeek:type:`addr`
The IP address of the cluster node.
.. zeek:field:: zone_id :zeek:type:`string` :zeek:attr:`&default` = ``""`` :zeek:attr:`&optional`
If the *ip* field is a non-global IPv6 address, this field
can specify a particular :rfc:`4007` ``zone_id``.
.. zeek:field:: p :zeek:type:`port` :zeek:attr:`&default` = ``0/unknown`` :zeek:attr:`&optional`
The port that this node will listen on for peer connections.
A value of ``0/unknown`` means the node is not pre-configured to listen.
.. zeek:field:: manager :zeek:type:`string` :zeek:attr:`&optional`
Name of the manager node this node uses. For workers and proxies.
.. zeek:field:: id :zeek:type:`string` :zeek:attr:`&optional`
A unique identifier assigned to the node by the broker framework.
This field is only set while a node is connected.
.. zeek:field:: metrics_port :zeek:type:`port` :zeek:attr:`&optional`
The port used to expose metrics to Prometheus. Setting this in a cluster
configuration will override the setting for Telemetry::metrics_port for
the node.
Record type to indicate a node in a cluster.
.. zeek:type:: Cluster::NodeType
:source-code: base/frameworks/cluster/main.zeek 162 179
:Type: :zeek:type:`enum`
.. zeek:enum:: Cluster::NONE Cluster::NodeType
A dummy node type indicating the local node is not operating
within a cluster.
.. zeek:enum:: Cluster::CONTROL Cluster::NodeType
A node type which is allowed to view/manipulate the configuration
of other nodes in the cluster.
.. zeek:enum:: Cluster::LOGGER Cluster::NodeType
A node type responsible for log management.
.. zeek:enum:: Cluster::MANAGER Cluster::NodeType
A node type responsible for policy management.
.. zeek:enum:: Cluster::PROXY Cluster::NodeType
A node type for relaying worker node communication and synchronizing
worker node state.
.. zeek:enum:: Cluster::WORKER Cluster::NodeType
The node type doing all the actual traffic analysis.
Types of nodes that are allowed to participate in the cluster
configuration.
.. zeek:type:: Cluster::StoreInfo
:source-code: base/frameworks/cluster/main.zeek 98 121
:Type: :zeek:type:`record`
.. zeek:field:: name :zeek:type:`string` :zeek:attr:`&optional`
The name of the data store.
.. zeek:field:: store :zeek:type:`opaque` of Broker::Store :zeek:attr:`&optional`
The store handle.
.. zeek:field:: master_node :zeek:type:`string` :zeek:attr:`&default` = :zeek:see:`Cluster::default_master_node` :zeek:attr:`&optional`
The name of the cluster node on which the master version of the data
store resides.
.. zeek:field:: master :zeek:type:`bool` :zeek:attr:`&default` = ``F`` :zeek:attr:`&optional`
Whether the data store is the master version or a clone.
.. zeek:field:: backend :zeek:type:`Broker::BackendType` :zeek:attr:`&default` = :zeek:see:`Cluster::default_backend` :zeek:attr:`&optional`
The type of backend used for storing data.
.. zeek:field:: options :zeek:type:`Broker::BackendOptions` :zeek:attr:`&default` = *...* :zeek:attr:`&optional`
Parameters used for configuring the backend.
.. zeek:field:: clone_resync_interval :zeek:type:`interval` :zeek:attr:`&default` = :zeek:see:`Broker::default_clone_resync_interval` :zeek:attr:`&optional`
A resync/reconnect interval to pass through to
:zeek:see:`Broker::create_clone`.
.. zeek:field:: clone_stale_interval :zeek:type:`interval` :zeek:attr:`&default` = :zeek:see:`Broker::default_clone_stale_interval` :zeek:attr:`&optional`
A staleness duration to pass through to
:zeek:see:`Broker::create_clone`.
.. zeek:field:: clone_mutation_buffer_interval :zeek:type:`interval` :zeek:attr:`&default` = :zeek:see:`Broker::default_clone_mutation_buffer_interval` :zeek:attr:`&optional`
A mutation buffer interval to pass through to
:zeek:see:`Broker::create_clone`.
Information regarding a cluster-enabled data store.
.. zeek:type:: Cluster::WebSocketServerOptions
:source-code: base/frameworks/cluster/main.zeek 364 378
:Type: :zeek:type:`record`
.. zeek:field:: listen_addr :zeek:type:`addr` :zeek:attr:`&optional`
The address to listen on, cannot be used together with ``listen_host``.
.. zeek:field:: listen_port :zeek:type:`port`
The port the WebSocket server is supposed to listen on.
.. zeek:field:: max_event_queue_size :zeek:type:`count` :zeek:attr:`&default` = :zeek:see:`Cluster::default_websocket_max_event_queue_size` :zeek:attr:`&optional`
The maximum event queue size for this server.
.. zeek:field:: ping_interval :zeek:type:`interval` :zeek:attr:`&default` = :zeek:see:`Cluster::default_websocket_ping_interval` :zeek:attr:`&optional`
Ping interval to use. A WebSocket client not responding to
the pings will be disconnected. Set to a negative value to
disable pings. Subsecond intervals are currently not supported.
.. zeek:field:: tls_options :zeek:type:`Cluster::WebSocketTLSOptions` :zeek:attr:`&default` = *...* :zeek:attr:`&optional`
The TLS options used for this WebSocket server. By default,
TLS is disabled. See also :zeek:see:`Cluster::WebSocketTLSOptions`.
WebSocket server options to pass to :zeek:see:`Cluster::listen_websocket`.
.. zeek:type:: Cluster::WebSocketTLSOptions
:source-code: base/frameworks/cluster/main.zeek 348 361
:Type: :zeek:type:`record`
.. zeek:field:: cert_file :zeek:type:`string` :zeek:attr:`&optional`
The cert file to use.
.. zeek:field:: key_file :zeek:type:`string` :zeek:attr:`&optional`
The key file to use.
.. zeek:field:: enable_peer_verification :zeek:type:`bool` :zeek:attr:`&default` = ``F`` :zeek:attr:`&optional`
Expect peers to send client certificates.
.. zeek:field:: ca_file :zeek:type:`string` :zeek:attr:`&default` = ``""`` :zeek:attr:`&optional`
The CA certificate or CA bundle used for peer verification.
Empty will use the implementations's default when
``enable_peer_verification`` is T.
.. zeek:field:: ciphers :zeek:type:`string` :zeek:attr:`&default` = ``""`` :zeek:attr:`&optional`
The ciphers to use. Empty will use the implementation's defaults.
The TLS options for a WebSocket server.
If cert_file and key_file are set, TLS is enabled. If both
are unset, TLS is disabled. Any other combination is an error.
.. zeek:type:: Cluster::BackendTag
:Type: :zeek:type:`enum`
.. zeek:enum:: Cluster::CLUSTER_BACKEND_BROKER Cluster::BackendTag
.. zeek:enum:: Cluster::CLUSTER_BACKEND_BROKER_WEBSOCKET_SHIM Cluster::BackendTag
.. zeek:enum:: Cluster::CLUSTER_BACKEND_ZEROMQ Cluster::BackendTag
.. zeek:type:: Cluster::EventSerializerTag
:Type: :zeek:type:`enum`
.. zeek:enum:: Cluster::EVENT_SERIALIZER_BROKER_BIN_V1 Cluster::EventSerializerTag
.. zeek:enum:: Cluster::EVENT_SERIALIZER_BROKER_JSON_V1 Cluster::EventSerializerTag
.. zeek:type:: Cluster::LogSerializerTag
:Type: :zeek:type:`enum`
.. zeek:enum:: Cluster::LOG_SERIALIZER_ZEEK_BIN_V1 Cluster::LogSerializerTag
Events
######
.. zeek:id:: Cluster::hello
:source-code: base/frameworks/cluster/main.zeek 510 535
:Type: :zeek:type:`event` (name: :zeek:type:`string`, id: :zeek:type:`string`)
When using broker-enabled cluster framework, nodes broadcast this event
to exchange their user-defined name along with a string that uniquely
identifies it for the duration of its lifetime. This string may change
if the node dies and has to reconnect later.
.. zeek:id:: Cluster::node_down
:source-code: base/frameworks/cluster/main.zeek 282 282
:Type: :zeek:type:`event` (name: :zeek:type:`string`, id: :zeek:type:`string`)
When using broker-enabled cluster framework, this event will be emitted
locally whenever a connected cluster node becomes disconnected.
.. zeek:id:: Cluster::node_up
:source-code: base/frameworks/cluster/main.zeek 278 278
:Type: :zeek:type:`event` (name: :zeek:type:`string`, id: :zeek:type:`string`)
When using broker-enabled cluster framework, this event will be emitted
locally whenever a cluster node connects or reconnects.
Hooks
#####
.. zeek:id:: Cluster::log_policy
:source-code: base/frameworks/cluster/main.zeek 148 148
:Type: :zeek:type:`Log::PolicyHook`
A default logging policy hook for the stream.
.. zeek:id:: Cluster::on_subscribe
:source-code: base/frameworks/cluster/main.zeek 408 408
:Type: :zeek:type:`hook` (topic: :zeek:type:`string`) : :zeek:type:`bool`
A hook invoked for every :zeek:see:`Cluster::subscribe` call.
Breaking from this hook has no effect.
:param topic: The topic string as given to :zeek:see:`Cluster::subscribe`.
.. zeek:id:: Cluster::on_unsubscribe
:source-code: base/frameworks/cluster/main.zeek 415 415
:Type: :zeek:type:`hook` (topic: :zeek:type:`string`) : :zeek:type:`bool`
A hook invoked for every :zeek:see:`Cluster::subscribe` call.
Breaking from this hook has no effect.
:param topic: The topic string as given to :zeek:see:`Cluster::subscribe`.
Functions
#########
.. zeek:id:: Cluster::create_store
:source-code: base/frameworks/cluster/main.zeek 590 665
:Type: :zeek:type:`function` (name: :zeek:type:`string`, persistent: :zeek:type:`bool` :zeek:attr:`&default` = ``F`` :zeek:attr:`&optional`) : :zeek:type:`Cluster::StoreInfo`
Sets up a cluster-enabled data store. They will also still properly
function for uses that are not operating a cluster.
:param name: the name of the data store to create.
:param persistent: whether the data store must be persistent.
:returns: the store's information. For master stores, the store will be
ready to use immediately. For clones, the store field will not
be set until the node containing the master store has connected.
.. zeek:id:: Cluster::get_active_node_count
:source-code: base/frameworks/cluster/main.zeek 454 457
:Type: :zeek:type:`function` (node_type: :zeek:type:`Cluster::NodeType`) : :zeek:type:`count`
Returns the number of nodes per type, the calling node is currently
connected to. This is primarily intended for use by the manager to find
out how many nodes should be responding to requests.
.. zeek:id:: Cluster::get_node_count
:source-code: base/frameworks/cluster/main.zeek 441 452
:Type: :zeek:type:`function` (node_type: :zeek:type:`Cluster::NodeType`) : :zeek:type:`count`
Returns the number of nodes defined in the cluster layout for a given
node type.
.. zeek:id:: Cluster::init
:source-code: base/frameworks/cluster/main.zeek 672 675
:Type: :zeek:type:`function` () : :zeek:type:`bool`
Initialize the cluster backend.
Cluster backends usually invoke this from a :zeek:see:`zeek_init` handler.
:returns: T on success, else F.
.. zeek:id:: Cluster::is_enabled
:source-code: base/frameworks/cluster/main.zeek 459 462
:Type: :zeek:type:`function` () : :zeek:type:`bool`
This function can be called at any time to determine if the cluster
framework is being enabled for this run.
:returns: True if :zeek:id:`Cluster::node` has been set.
.. zeek:id:: Cluster::listen_websocket
:source-code: base/frameworks/cluster/main.zeek 687 690
:Type: :zeek:type:`function` (options: :zeek:type:`Cluster::WebSocketServerOptions`) : :zeek:type:`bool`
Start listening on a WebSocket address.
:param options: The server :zeek:see:`Cluster::WebSocketServerOptions` to use.
:returns: T on success, else F.
.. zeek:id:: Cluster::local_node_metrics_port
:source-code: base/frameworks/cluster/main.zeek 475 487
:Type: :zeek:type:`function` () : :zeek:type:`port`
This function can be called at any time to determine the configured
metrics port for Prometheus being used by current Zeek instance. If
:zeek:id:`Cluster::is_enabled` returns false or the node isn't found,
``0/unknown`` is returned.
:returns: The metrics port used by the calling node.
.. zeek:id:: Cluster::local_node_type
:source-code: base/frameworks/cluster/main.zeek 464 473
:Type: :zeek:type:`function` () : :zeek:type:`Cluster::NodeType`
This function can be called at any time to determine what type of
cluster node the current Zeek instance is going to be acting as.
If :zeek:id:`Cluster::is_enabled` returns false, then
:zeek:enum:`Cluster::NONE` is returned.
:returns: The :zeek:type:`Cluster::NodeType` the calling node acts as.
.. zeek:id:: Cluster::log
:source-code: base/frameworks/cluster/main.zeek 667 670
:Type: :zeek:type:`function` (msg: :zeek:type:`string`) : :zeek:type:`void`
Write a message to the cluster logging stream.
.. zeek:id:: Cluster::node_id
:source-code: policy/frameworks/cluster/backend/zeromq/main.zeek 355 357
:Type: :zeek:type:`function` () : :zeek:type:`string`
:Attributes: :zeek:attr:`&redef`
Function returning this node's identifier.
By default this is :zeek:see:`Broker::node_id`, but can be
redefined by other cluster backends. This identifier should be
a short lived identifier that resets when a node is restarted.
.. zeek:id:: Cluster::node_topic
:source-code: policy/frameworks/cluster/backend/zeromq/main.zeek 340 342
:Type: :zeek:type:`function` (name: :zeek:type:`string`) : :zeek:type:`string`
:Attributes: :zeek:attr:`&redef`
Retrieve the topic associated with a specific node in the cluster.
:param name: the name of the cluster node (e.g. "manager").
:returns: a topic string that may used to send a message exclusively to
a given cluster node.
.. zeek:id:: Cluster::nodeid_to_node
:source-code: base/frameworks/cluster/main.zeek 499 508
:Type: :zeek:type:`function` (id: :zeek:type:`string`) : :zeek:type:`Cluster::NamedNode`
Retrieve the cluster-level naming of a node based on its node ID,
a backend-specific identifier.
:param id: the node ID of a peer.
:returns: the :zeek:see:`Cluster::NamedNode` for the requested node, if
known, otherwise a "null" instance with an empty name field.
.. zeek:id:: Cluster::nodeid_topic
:source-code: policy/frameworks/cluster/backend/zeromq/main.zeek 344 346
:Type: :zeek:type:`function` (id: :zeek:type:`string`) : :zeek:type:`string`
:Attributes: :zeek:attr:`&redef`
Retrieve the topic associated with a specific node in the cluster.
:param id: the id of the cluster node (from :zeek:see:`Broker::EndpointInfo`
or :zeek:see:`Broker::node_id`.
:returns: a topic string that may used to send a message exclusively to
a given cluster node.
.. zeek:id:: Cluster::subscribe
:source-code: base/frameworks/cluster/main.zeek 677 680
:Type: :zeek:type:`function` (topic: :zeek:type:`string`) : :zeek:type:`bool`
Subscribe to the given topic.
:param topic: The topic to subscribe to.
:returns: T on success, else F.
.. zeek:id:: Cluster::unsubscribe
:source-code: base/frameworks/cluster/main.zeek 682 685
:Type: :zeek:type:`function` (topic: :zeek:type:`string`) : :zeek:type:`bool`
Unsubscribe from the given topic.
:param topic: The topic to unsubscribe from.
:returns: T on success, else F.