Hello everyone,
I’m wearing my NSM hat, not my Corelight hat. 
In my experience and definitions (1998-, first book content in 2002) NSM involves four types of data derived from the network:
- alerts
- transaction data
- full content
- extracted content
Traditionally, operators have achieved collection using a stack like this:
- alerts: Snort or Suricata
- transaction data: Zeek, or in a pinch Argus or custom code
- full content: Daemonlogger or some other pcap writer; even Tcpdump in a ring buffer mode works
- extracted content: Zeek or custom code
I strongly disagree that “running both Suricata & Zeek is unnecessary, inefficient, and less effective. Running Suricata along side the Zeek engine is completely unnecessary given that Suricata can extract all the same network data that Zeek can. And external correlation between the Zeek logs and Suricata alerts does not work for all use cases and requires separate processing, placing a massive drain on resources.”
Suricata “cannot extract all the same network data that Zeek can.”
I have never seen a “massive drain on resources” in any implementation that I have designed and run, at whatever scale, if you mean analyst resources. If you mean technical limitations of the code, then that is one of the reasons commercial vendors have an opportunity to help customers. Running all this code at high bandwidth is a challenge.
I, my colleagues, former students, and customers get a TON of value running Suricata and Zeek together. Suricata is the default rules language for alerts, never mind its other capabilities.
Ultimately it’s up to the analyst to decide what SORTS of transaction data you want. Some may just need what Suricata can log. Others might need different data.
Also, as IDSTowever mentioned, Zeek provides a network-oriented language that devs use to write their own packages. This greatly extends what Zeek can do and is again a nice complement to Suricata.
I have always seen this as an AND situation, never an OR situation.
Sincerely,
Richard