引言

Logstash 是集中和分析日志的强大工具,它可以帮助提供和概述您的环境,并识别服务器的问题。 提高 ELK 堆栈(Elasticsearch,Logstash 和 Kibana)设置有效性的一个方法是收集重要的应用程序日志,并通过使用过滤器构造日志数据,这样数据就可以很容易地进行分析和查询。 我们将围绕“ grok”模式构建过滤器,这将把日志中的数据解析为有用的信息位。

本指南是 Ubuntu 14.04教程 Elasticsearch、 Logstash 和 Kibana 4的续篇,主要关注于为各种常见的应用程序日志添加 Logstash 过滤器。

先决条件

要遵循本教程,您必须有一个正在工作的 Logstash 服务器,该服务器正在接收来自诸如 Filebeat 之类的托运商的日志。 如果你没有设置 Logstash 来接收日志,这里有一个教程可以帮助你开始: 如何在 Ubuntu 14.04上安装 Elasticsearch、 Logstash 和 Kibana 4。

Elk 服务器假设

  • Logstash 安装在 / opt / Logstash 中
  • 您的 Logstash 配置文件位于 / etc / Logstash / conf. d
  • 您有一个名为02-beats-input. conf 的输入文件
  • 您有一个名为30-elasticsearch-output. conf 的输出文件

你可能需要在 Logstash Server 上运行这个命令来创建 patterns 目录:

  • sudo mkdir -p /opt/logstash/patterns
  • sudo chown logstash: /opt/logstash/patterns

客户端 / 服务器假设

  • 在每个应用服务器上都配置了 Filebeat 来发送 syslog / auth。 登录到您的 Logstash 服务器(如同先决条件教程的 setupfilebeat 部分)

如果您的设置不同,只需调整此指南以匹配您的环境。

关于 Grok

Grok 的工作方式是解析文本模式,使用正则表达式,并将它们分配给一个标识符。

Grok 模式的语法是% { PATTERN: IDENTIFIER }。 Logstash 过滤器包括一系列 grok 模式,这些模式匹配并分配日志消息的各个片段给各个标识符,这就是给定日志结构的方式。

要了解更多关于 grok 的信息,请访问 Logstash grok 页面和 Logstash Default Patterns 列表。

如何使用本指南

接下来的每个主要部分将包括收集和筛选给定应用程序的日志所必需的附加配置细节。 对于要记录和过滤的每个应用程序,您必须对客户机服务器(Filebeat)和 Logstash 服务器进行一些配置更改。

分段 Logstash 模式

如果存在 Logstash Patterns 子部分,那么它将包含 grok 模式,这些模式可以添加到 Logstash Server 上的 / opt / Logstash / Patterns 中的新文件中。 这将允许你在 Logstash 过滤器中使用新的模式。

过滤器分段

Logstash Filter 子部分将包括一个过滤器,可以添加到 / etc / Logstash / conf 中的输入和输出配置文件之间的新文件中。 在 Logstash 服务器上。 过滤器决定 Logstash 服务器如何解析相关的日志文件。 记住在添加新的过滤器之后重新启动 Logstash 服务,以加载您的更改。

文件拍摄探矿者分段

Filebeat Prospectors 用于指定将哪些日志发送到 Logstash。 在 / etc / filebeat / filebeat 中应该增加更多的探矿者配置。 Yml 文件直接后现有的探矿者在探矿者部分:

Prospector Examples
filebeat:
  # List of prospectors to fetch data.
  prospectors:
    -
      - /var/log/secure
      - /var/log/messages
      document_type: syslog
    -
      paths:
        - /var/log/app/*.log
      document_type: app-access
...

在上面的例子中,红色高亮的线代表一个 Prospector 发送所有的。 将 / var / log / app / 中的日志文件以 app-access 类型记录到 Logstash。 在进行任何更改之后,必须重新加载 Filebeat 以使任何更改生效。

现在您已经知道了如何使用这个指南,接下来的指南将向您展示如何收集和过滤应用程序日志!

申请: Nginx

模式: Nginx

Nginx 日志模式不包含在 Logstash 的默认模式中,因此我们将手动添加 Nginx 模式。

在 ELK 服务器上,创建一个名为 nginx 的新模式文件:

  • sudo vi /opt/logstash/patterns/nginx

然后插入以下行:

Nginx Grok Pattern
NGUSERNAME [a-zA-Z\.\@\-\+_%]+
NGUSER %{NGUSERNAME}
NGINXACCESS %{IPORHOST:clientip} %{NGUSER:ident} %{NGUSER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response} (?:%{NUMBER:bytes}|-) (?:"(?:%{URI:referrer}|-)"|%{QS:referrer}) %{QS:agent}

保存并退出。 Nginxaccess 模式解析数据,并将数据分配给各种标识符(例如 clientip、 ident、 auth 等)。

接下来,将模式文件的所有权更改为 logstash:

  • sudo chown logstash: /opt/logstash/patterns/nginx

过滤器: Nginx

在 ELK 服务器上,创建一个名为11-nginx-filter. conf 的新过滤器配置文件:

  • sudo vi /etc/logstash/conf.d/11-nginx-filter.conf

然后添加以下过滤器:

Nginx Filter
filter {
  if [type] == "nginx-access" {
    grok {
      match => { "message" => "%{NGINXACCESS}" }
    }
  }
}

保存并退出。 请注意,此筛选器将尝试将 nginx-access 类型的消息与上面定义的 NGINXACCESS 模式匹配。

现在重新启动 Logstash 重新加载配置:

  • sudo service logstash restart

拍摄者: Nginx

在 Nginx 服务器上,打开 filebeat.yml 配置文件进行编辑:

  • sudo vi /etc/filebeat/filebeat.yml

在 filebeat 部分添加以下 Prospector,将 Nginx 访问日志以 Nginx-access 类型发送到您的 Logstash 服务器:

Nginx Prospector
    -
      paths:
        - /var/log/nginx/access.log
      document_type: nginx-access

保存并退出. 重新加载 Filebeat 以使更改生效:

  • sudo service filebeat restart

现在您的 Nginx 日志将被收集和过滤!

应用程序: Apache HTTP Web Server

Apache 的日志模式包含在默认的 Logstash 模式中,因此很容易为它设置一个过滤器。

注意: 如果您使用的是 RedHat 变体,比如 CentOS,那么日志位于 / var / log / httpd,而不是示例中使用的 / var / log / apache2。

过滤器: Apache

在 ELK 服务器上,创建一个名为12-apache. conf 的新过滤器配置文件:

  • sudo vi /etc/logstash/conf.d/12-apache.conf

然后添加以下过滤器:

Apache Filter
filter {
  if [type] == "apache-access" {
    grok {
      match => { "message" => "%{COMBINEDAPACHELOG}" }
    }
  }
}

保存并退出。 注意,这个过滤器将尝试将 apache-access 类型的消息与默认的 Logstash 模式 combinedachilog 模式匹配。

现在重新启动 Logstash 重新加载配置:

  • sudo service logstash restart

文件拍摄者: Apache

在 Apache 服务器上,打开 filebeat.yml 配置文件进行编辑:

  • sudo vi /etc/filebeat/filebeat.yml

在 filebeat 部分添加以下 Prospector,将 Apache 日志以 Apache-access 类型发送到您的 Logstash 服务器:

Apache Prospector
    -
      paths:
        - /var/log/apache2/access.log
      document_type: apache-access

保存并退出. 重新加载 Filebeat 以使更改生效:

  • sudo service filebeat restart

现在您的 Apache 日志将被收集和过滤!

总结

几乎可以收集和解析任何类型的日志。 尝试为其他日志文件编写自己的过滤器和模式。

请随意评论你想看到的过滤器,或者你自己的模式!

如果您不熟悉 Kibana 的使用,请查看本教程: 如何使用 Kibana 可视化和仪表板。