[Zeek-Dev] Zeek Table Cluster distribution using broker ready for testing

Johanna Amann johanna at corelight.com
Thu Jul 9 13:21:44 PDT 2020


Hello everyone,

If you followed last year’s Zeek Week, you might be aware that we have 
been working on a new way to more easily distribute Zeek Table content 
in a cluster setup. We now have a working prototype - and I would be 
happy for feedback if someone wants to start playing with it.

We tried to make this feature as easy to use as possible. In the case 
that you just want to distribute a table over an entire Zeek-cluster, 
you only have to add &backend=Broker::MEMORY to the table definition.

So - for example:

global table_to_share: table[string] of count &backend=Broker::MEMORY;

This will automatically synchronized the table over the entire cluster. 
In the background, a Broker store (in this case a memory-backed store) 
is created and used for the actual data synchronization. Changes to the 
table are automatically sent to the broker store and distributed over 
the cluster.

We also support persistent broker stores. At the moment you need to 
specify the path in which the database should be stored for this 
feature. Example:

redef Broker::auto_store_db_directory = "[path]";
global table_to_share: table[string] of count &backend=Broker::SQLITE;

Data that is stored in the table will be persistent across restarts of 
Zeek.

Current limitations:
  * there is no conflict resolution. Simultaneous inserts for the same 
key will probably lead to a divergent state over the cluster. This is by 
design - if you need to be absolutely sure that you do not loose any 
data, or if you want conflict resolution for multiple inserts, you will 
still have to roll your own script-level logic using events.
  * tables only can have a single index, multi-indexed tables (like 
table[string, count] of X) are not yet supported
  * tables only can have simple values. Tables that store records, 
tables, sets, vectors are not supported. The reason for this is that we 
cannot track table-changes in these cases.
  * &expire_func cannot be used simultaneously. Normal expiry should 
work correctly.
  * documentation is basically still completely missing - I will write 
it over the next days.

If you want to try this you have to compile the 
topic/johanna/table-changes branch of the Zeek repository. To check out 
this branch into a new directory, use something like:

git clone https://github.com/zeek/zeek --branch 
topic/johanna/table-changes --recursive [target-directory]

Please let me know if you have any feedback/questions/problems :)

Johanna


More information about the Zeek-Dev mailing list