Logging Zeek 输出至 Kafka 技术文档
以下是一份详细的技术文档,介绍了如何安装、使用以及配置Logging Zeek Output to Kafka项目。本文档涵盖以下部分:
- 安装指南
- 项目使用说明
- 项目API使用文档
- 项目安装方式
1. 安装指南
zkg
安装方式
zkg
是推荐的安装机制,因为它将动态检索、构建、测试并加载插件。请注意,在安装后,您仍需要激活和配置插件。
-
安装librdkafka,Kafka的原生客户端库。本插件经过对librdkafka v1.4.2版本的测试。
如果要在Kerberized Kafka环境中使用此插件,还需要安装
libsasl2
,并在configure
脚本中传递--enable-sasl
参数。$ curl -L https://github.com/edenhill/librdkafka/archive/v1.4.2.tar.gz | tar xvz $ cd librdkafka-1.4.2/ $ ./configure --enable-sasl $ make $ sudo make install
-
按照此处的快速入门指南配置
zkg
。 -
使用
zkg install
命令安装插件。$ zkg install apache/metron-bro-plugin-kafka --version master
-
运行以下命令以确保插件安装成功。
$ zeek -N Apache::Kafka
手动安装方式
只有在安装和配置zkg
不合理的情况下,才应手动安装插件。如果您运行的zeek环境没有Internet连接,请研究bundles或创建内部包源。
以下说明如果对您将此作为包(如deb或rpm)分发也可能有所帮助。
-
安装librdkafka,Kafka的原生客户端库。本插件经过对librdkafka v1.4.2版本的测试。
如果要在Kerberized Kafka环境中使用此插件,还需要安装
libsasl2
,并在configure
脚本中传递--enable-sasl
参数。$ curl -L https://github.com/edenhill/librdkafka/archive/v1.4.2.tar.gz | tar xvz $ cd librdkafka-1.4.2/ $ ./configure --enable-sasl $ make $ sudo make install
-
使用以下命令构建插件。
$ ./configure --with-librdkafka=$librdkafka_root $ make $ sudo make install
-
运行以下命令以确保插件安装成功。
$ zeek -N Apache::Kafka
2. 项目使用说明
以下示例展示了使用该插件的不同方式。只需将以下zeek脚本语言添加到您的local.zeek
文件中,以演示示例。
在运行Zeek集群时,强烈建议利用一个或多个Zeek日志记录器,如此处所示,以将日志活动与manager线程分离。
示例1 - 将日志列表发送到Kafka
此示例的目标是将所有HTTP和DNS记录发送到名为zeek
的Kafka主题。
@load packages/metron-bro-plugin-kafka/Apache/Kafka
redef Kafka::logs_to_send = set(HTTP::LOG, DNS::LOG);
redef Kafka::kafka_conf = table(
["metadata.broker.list"] = "server1.example.com:9092,server2.example.com:9092"
);
示例2 - 发送所有活动日志
此插件具有将所有活动日志发送到“zeek”Kafka主题的功能。
@load packages/metron-bro-plugin-kafka/Apache/Kafka
redef Kafka::send_all_active_logs = T;
redef Kafka::kafka_conf = table(
["metadata.broker.list"] = "localhost:9092"
);
示例3 - 发送所有活动日志与排除列表
您还可以指定一个黑名单,以确保某些日志不会被发送到Kafka,无论Kafka::send_all_active_logs
和Kafka::logs_to_send
配置如何。在此示例中,我们将发送除Conn日志之外的所有启用日志。
@load packages/metron-bro-plugin-kafka/Apache/Kafka
redef Kafka::send_all_active_logs = T;
redef Kafka::logs_to_exclude = set(Conn::LOG);
redef Kafka::topic_name = "zeek";
redef Kafka::kafka_conf = table(
["metadata.broker.list"] = "localhost:9092"
);
示例4 - 每个日志流发送到唯一主题
也可以将每个日志流发送到唯一命名的主题。在此示例中,将所有HTTP记录发送到名为http
的Kafka主题,将所有DNS记录发送到名为dns
的单独Kafka主题。
@load packages/metron-bro-plugin-kafka/Apache/Kafka
redef Kafka::topic_name = "";
redef Kafka::tag_json = T;
event zeek_init() &priority=-10
{
# 处理HTTP
local http_filter: Log::Filter = [
$name = "kafka-http",
$writer = Log::WRITER_KAFKAWRITER,
$config = table(
["metadata.broker.list"] = "localhost:9092"
),
$path = "http"
];
Log::add_filter(HTTP::LOG, http_filter);
# 处理DNS
local dns_filter: Log::Filter = [
$name = "kafka-dns",
$writer = Log::WRITER_KAFKAWRITER,
$config = table(
["metadata.broker.list"] = "localhost:9092"
),
$path = "dns"
];
Log::add_filter(DNS::LOG, dns_filter);
}
示例5 - Zeek日志过滤
您可能需要配置zeek以过滤掉具有特定特征的日志消息,使其不被发送到kafka主题。例如,Apache Metron目前不支持默认增强中的IPv6源或目标IP地址,因此从Kafka中过滤这些日志消息可能会有所帮助(尽管有多种方法可以解决这个问题)。在此示例中,我们将执行此操作,并假设以下标准zeek kafka插件配置:
- 所有zeek日志都发送到默认的
zeek
主题。 - 每个JSON消息都标记有相应的日志类型(例如
http
、dns
或conn
),通过将Kafka::tag_json
设置为true。 - 如果日志消息包含128字节长的源或目标IP地址,则该日志不会被发送到Kafka。
@load packages/metron-bro-plugin-kafka/Apache/Kafka
redef Kafka::tag_json = T;
event zeek_init() &priority=-10
{
# 处理HTTP
Log::add_filter(HTTP::LOG, [
$name = "kafka-http",
$writer = Log::WRITER_KAFKAWRITER,
$pred(rec: HTTP::Info) = { return ! (( |rec$id$orig_h| == 128 || |rec$id$resp_h| == 128 )); },
$config = table(
["metadata.broker.list"] = "localhost:9092"
)
]);
# 处理DNS
Log::add_filter(DNS::LOG, [
$name = "kafka-dns",
$writer = Log::WRITER_KAFKAWRITER,
$pred(rec: DNS::Info) = { return ! (( |rec$id$orig_h| == 128 || |rec$id$resp_h| == 128 )); },
$config = table(
["metadata.broker.list"] = "localhost:9092"
)
]);
# 处理Conn
Log::add_filter(Conn::LOG, [
$name = "kafka-conn",
$writer = Log::WRITER_KAFKAWRITER,
$pred(rec: Conn::Info) = { return ! (( |rec$id$orig_h| == 128 || |rec$id$resp_h| == 128 )); },
$config = table(
["metadata.broker.list"] = "localhost:9092"
)
]);
}
注意
logs_to_send
与$pred
互斥,因此对于每个要设置$pred
的日志,您必须单独设置Log::add_filter
,并避免将该日志包括在logs_to_send
中。- 可以使用
is_v6_addr()
函数在您的$pred
中识别IP地址是否为IPv6。 - 或者,如果您使用Apache Metron来拉取数据,您可以采取其他方法。
3. 项目API使用文档
本项目的API使用文档目前尚未提供。有关如何使用和配置项目的详细信息,请参考上述安装指南和项目使用说明。
4. 项目安装方式
项目的安装方式已在“安装指南”部分详细说明。您可以选择使用zkg
安装方式或手动安装方式。请根据您的环境和需求选择合适的安装方法。
- DDeepSeek-V3.1-BaseDeepSeek-V3.1 是一款支持思考模式与非思考模式的混合模型Python00
- QQwen-Image-Edit基于200亿参数Qwen-Image构建,Qwen-Image-Edit实现精准文本渲染与图像编辑,融合语义与外观控制能力Jinja00
GitCode-文心大模型-智源研究院AI应用开发大赛
GitCode&文心大模型&智源研究院强强联合,发起的AI应用开发大赛;总奖池8W,单人最高可得价值3W奖励。快来参加吧~042CommonUtilLibrary
快速开发工具类收集,史上最全的开发工具类,欢迎Follow、Fork、StarJava03GitCode百大开源项目
GitCode百大计划旨在表彰GitCode平台上积极推动项目社区化,拥有广泛影响力的G-Star项目,入选项目不仅代表了GitCode开源生态的蓬勃发展,也反映了当下开源行业的发展趋势。06GOT-OCR-2.0-hf
阶跃星辰StepFun推出的GOT-OCR-2.0-hf是一款强大的多语言OCR开源模型,支持从普通文档到复杂场景的文字识别。它能精准处理表格、图表、数学公式、几何图形甚至乐谱等特殊内容,输出结果可通过第三方工具渲染成多种格式。模型支持1024×1024高分辨率输入,具备多页批量处理、动态分块识别和交互式区域选择等创新功能,用户可通过坐标或颜色指定识别区域。基于Apache 2.0协议开源,提供Hugging Face演示和完整代码,适用于学术研究到工业应用的广泛场景,为OCR领域带来突破性解决方案。00openHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!C0295- WWan2.2-S2V-14B【Wan2.2 全新发布|更强画质,更快生成】新一代视频生成模型 Wan2.2,创新采用MoE架构,实现电影级美学与复杂运动控制,支持720P高清文本/图像生成视频,消费级显卡即可流畅运行,性能达业界领先水平Python00
- GGLM-4.5-AirGLM-4.5 系列模型是专为智能体设计的基础模型。GLM-4.5拥有 3550 亿总参数量,其中 320 亿活跃参数;GLM-4.5-Air采用更紧凑的设计,拥有 1060 亿总参数量,其中 120 亿活跃参数。GLM-4.5模型统一了推理、编码和智能体能力,以满足智能体应用的复杂需求Jinja00
Yi-Coder
Yi Coder 编程模型,小而强大的编程助手HTML013
热门内容推荐
最新内容推荐
项目优选









