ELK:LogStash从远程Samba映射的networking驱动器读取日志文件

我是新来的ELK,我想build立一个解决scheme,索引微软的IIS和ES应用程序的.NET日志。

我知道不同的方法:

1) [应用程序服务器:日志文件➔Logstash]➔[收集服务器:Redis➔Logstash]➔[ES群集:ES➔Kibana]

这种方法的核心是在每个产生日志的Windows服务器上安装,configuration和维护一个logstash实例

2) [app servers:日志文件➔Filebeat]➔[收集服务器:Logstash➔Redis➔Logstash]➔[ES cluster:ES➔Kibana]

这种方法的con是目前filebeat不支持多行日志条目,我的.NET应用程序产生多行exception。 我不知道如何configuration中间logstash + redis + logstash来处理这个问题。

所以我想,也许给了Logstash能够收集日志数据没有filebeat或任何其他转发自己(请纠正我,如果我错了),我可能会尝试以下操作:

[应用程序服务器:日志文件]➔[收集服务器:Samba映射networking驱动器➔Logstash➔Redis➔Logstash]➔[ES cluster:ES➔Kibana]

在这个假设中,我不需要在每个应用程序服务器上安装一个Logstash实例。 中央logstash实例(或多个实例)将获取文件(使用Samba映射的networking驱动器),并在将日志条目推送到Redis之前应用多线编解码器。

这在技术上是可行的吗? 这是一个健全的build筑select?

运行Logstash时,如果在CIFS共享上使用fileinput来对付您的日志,那么我认为它不会奏效。 我没有直接使用Logstash,但是,根据我的经验,使用Logstash-Forwarder通过SSHFS挂载来查看日志文件,它不能很好的处理文件轮换或重新启动任何一端。

至于不知道如何处理你的多行exception与Filebeat,我不认为你需要担心它。 FileBeat只需从您要发布的文件中取出一行,然后通过networking触发它们。 它增加了一些字段,但是并不影响FileBeat作为一个非常基本的日志托运人的整体概念。

这意味着您可以在收集服务器上的Logstash中运行多行筛选器,就像直接在应用服务器上运行Logstash一样。

现在,根据您的日志量,您可能会发现您需要增加LS的工作人员数量来有效地处理您的数据。

我做什么来处理这样的事情是非常相似的选项2,而不是只有两个LS实例(“经纪人”和“parsing器”),我有3。

  +-------------------+ +-------------------+| +-------------------+|| | App Servers 

| +———-+ ||+ | | FileBeat | |+ +—-+———-+—+ / / / +—————-/—————————————-+ | / Collecting Server | | +———-/-+ +———————+ +————+ | | | Logstash | | Logstash | | Logstash | | | | Broker | |Multi-line Pre-Parser| | Parser | | | +————+ +—^—————–+ +—–^—V–+ | | | | | | | | | | | Redis | | | | | V +———————V——+ | | | | +——-> DB0 | DB1 + —>+ | | | +—————————-+ / | +————————————————-/——-+ / / / +——————-+ / +——————-+|/ +——————-+|| | ElasticSearch ||+ | Cluster |+ +——————-+

所有Pre-Parser实例所做的就是将多行日志条目转换为单行,以便Parser可以正确地执行它。 即使如此,我正在检查types和标签,看看是否有线路可能是多线路的,所以开销很小。

我很容易就能通过它每秒推送1000个事件(几乎不能达到20%的CPU)。 而且,这个系统是一个ELK堆叠盒,所以对于LS和ES都有专用的节点,应该很容易。

为什么不把分析器实例的workers搞乱呢? 那么,这是因为LS中的multiline 筛选器不支持多个worker。


此筛选器将多行消息从单个来源折叠为一个Logstash事件。

这个filter的最初目标是允许将文件中的多行消息合并成单个事件。 例如 – 将javaexception和堆栈跟踪消息连接成单个事件。

注意:此filter不能在Logstash命令行中的多个工作线程-w 2上工作。