我们与 ELK 和 Exchange 是朋友。 第1部分

我们与 ELK 和 Exchange 是朋友。 第1部分

我正在开始撰写一系列文章,希望分享我连接 Exchange 和 ELK 的经验。 该堆栈将帮助我们处理大量日志,而不必担心常用的日志记录工具会拒绝帮助我们。 让我们来认识一下新的日志战斗机。

Exchange 有一个相当广泛的日志系统。 最流行的日志是跟踪日志,它跟踪邮政组织内特定信件的逐步通过情况; Web 服务器日志,跟踪系统中的每个新用户会话,以及具有不同程度的会话详细信息的特定 Web 应用程序的日志。 Exchange 还可以存储 smtp、imap 和 pop3 协议的原始日志。

我们可以使用哪些工具来处理日志:

  • 标准cmdlet Get-MessageTrackingLog:方便地处理跟踪日志;
  • logparser 实用程序:用于日志记录,使用伪 SQL 搜索语言并且工作速度相当快;
  • 外部 SQL 服务器:适用于非常特殊的情况(例如,长时间分析数据)。

当我们有几台服务器并且处理的日志量达到数十或数百千兆字节时,所有这些都很有效。 但是,如果服务器数量达到数十台,并且日志大小超过 XNUMX TB,该怎么办? 这个计划很可能开始崩溃。

发生的情况是这样的:Get-MessageTrackingLog 开始超时,logparser 达到了 32 位架构的上限,上传到 SQL Server 在最不合时宜的时刻崩溃了,而没有消化来自服务的多行异常。

这里出现了一个新的参与者 - ELK 堆栈,它是专门为在合理的时间内和可容忍的资源消耗下处理大量日志而设计的。

在第一部分我会详细告诉你, 如何连接属于ELK堆栈一部分的filebeat — 负责读取和发送简单的文本文件,不同的应用程序将其日志写入其中。 在接下来的文章中,我们将仔细研究 Logstash 和 Kibana 组件。

安装

所以,filebeat代理归档文件 可以从这个网站下载.

我们只需提取 zip 文件的内容即可完成安装。 例如,在 c:Program Filesfilebeat。 然后你需要运行PowerShell脚本 install-service-filebeat.ps1,该套件附带,用于安装 filebeat 服务。

现在我们准备开始设置配置文件。

容错

Filebeat 保证将日志传送到日志收集系统。 这是通过维护日志文件中的条目寄存器来实现的。 注册表存储有关从日志文件读取的记录的信息,并标记能够传送到目标的特定记录。

如果一条记录无法传送,filebeat将尝试重新发送它,直到收到接收系统的传送确认或原始日志文件在轮换过程中被删除。

当服务重新启动时,filebeat将从注册表中读取有关上次读取和传递的记录的信息,并根据注册表中的信息读取日志文件中的记录。

这使您可以最大程度地减少在意外故障和服务器维护操作期间丢失需要发送到 elasticlogstash 服务器的日志信息的风险。

你可以了解更多这方面的知识 阅读段落中的文档:Filebeat 如何保持文件状态以及 Filebeat 如何确保至少一次传送?

调整

所有配置都在格式配置文件中完成 yml,分为几个部分。 让我们看一下从 Exchange 服务器收集日志的过程中涉及的一些内容。

日志处理块

日志处理块以以下字段开始:

filebeat.inputs:

我们将使用一个常见的日志收集工具:

- type: log

接下来,指示状态(已启用)和包含日志的文件夹的路径。 例如,对于 IIS 日志,设置可以如下:

    enabled: true
    paths:
	- C:inetpublogsLogFilesW3SVC1*.log
	- C:inetpublogsLogFilesW3SVC2*.log

另一个重要的设置是 filebeat 如何读取多行记录。 默认情况下,filebeat 将日志文件的一行视为一个条目。 在我们开始在日志中收到与服务错误操作相关的异常之前,这种方法效果很好。 在这种情况下,异常可能由多行组成。 因此,如果下一行以日期开头,则 filebeat 必须将多行条目计为一个条目。 Exchange 中记录日志的格式如下:日志文件中的每个新条目均以日期开头。 在配置中,此条件如下所示:

multiline:
	pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
	negate: true
	match: after

在您发送的帖子中添加标签是有意义的,例如:

  tags: ['IIS', 'ex-srv1']

并且不要忘记从处理行中排除以哈希字符开头的行:

  exclude_lines: ['^#']

因此,日志读取块将如下所示:

filebeat.inputs:
- type: log
  enabled: true
  paths:
	- C:inetpublogsLogFilesW3SVC1*.log
	- C:inetpublogsLogFilesW3SVC2*.log
  multiline:
	pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
	negate: true
	match: after
  tags: ['IIS', 'ex-srv1']
  exclude_lines: ['^#']

日志发送块

Filebeat 将日志文件中的各个条目作为 json 对象发送,其中日志中的特定条目包含在单个消息字段中。 如果我们想以某种方式处理这些信息,我们需要首先将此字段解析为单独的字段。 例如,这可以在 Logstash 中完成。 他将成为 filebeat 记录的接收者。 filebeat 配置文件中的内容如下:

output.logstash:
  hosts: ["logstash1.domain.com:5044"]

如果有多个服务器,那么您可以为它们启用平衡:那么 filebeat 不会将日志发送到列表中的第一个可用服务器,而是将发送的日志分布在多个服务器之间:

hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
  loadbalance: true 

Filebeat在将日志处理成发送的json时,除了message字段中包含的日志条目外,还添加了一定量的元数据,这些元数据会影响最终在elastic中的文档的大小。 可以有选择地从提交中删除此元数据。 这是使用处理器在处理器块中完成的 drop_fields。 例如,您可以排除以下字段:

processors:
- drop_fields:
	fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]

您应该仔细选择排除的字段,因为其中一些字段可以在弹性方面用于构建索引。

因此,日志发送块将如下所示:

output.logstash:
  hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
  loadbalance: true
 
processors:
- drop_fields:
	fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]

filebeat 日志记录设置

设置以下日志记录设置是有意义的:

  • 记录级别信息;
  • 我们将日志写入默认位置的文件(logs 目录,位于 filebeat 安装目录中);
  • 日志文件名-filebeat;
  • 存储最近10个日志文件;
  • 当大小达到 1MB 时开始旋转。

最终的日志配置块将如下所示:

logging.level: info
logging.to_files: true
logging.files:
  name: filebeat
  keepfiles: 10
  rotateeverybytes: 1048576

最终配置

我们已经组装了配置,现在看起来像这样:

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - C:inetpublogsLogFilesW3SVC1*.log
    - C:inetpublogsLogFilesW3SVC2*.log
  multiline:
    pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
    negate: true
    match: after
  tags: ['IIS', 'ex-srv1']
  exclude_lines: ['^#']
 
output.logstash:
  hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
  loadbalance: true
 
processors:
- drop_fields:
    fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]
 
logging.level: info
logging.to_files: true
logging.files:
  name: filebeat
  keepfiles: 10
  rotateeverybytes: 1048576

重要的是要了解配置文件格式是 yml。 因此,正确放置空格和减号非常重要。

Filebeat可以检查配置文件,如果语法包含错误,它会指出哪一行以及该行中的哪个位置语法不正确。 检查按如下方式进行:

.filebeat.exe test config

Filebeat还可以检查日志接收器的网络可用性。 检查运行如下:

.filebeat.exe test output

在下面的部分中我将谈论 Exchange 与 Logstash 和 Kibana 组件的联系和友谊。

有用的链接

来源: habr.com

为具有 DDoS 保护、VPS VDS 服务器的站点购买可靠的主机 🔥 购买具备 DDoS 防护的可靠网站托管服务,包括 VPS 和 VDS 服务器 | ProHoster