注意: 本教程是针对旧版本的 ELK 堆栈设置,使用 Logstash 转发器而不是 Filebeat。 本教程的最新版本可以在添加 Logstash 过滤器来改进集中日志记录。

引言

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

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

先决条件

要遵循本教程,您必须有一个可以工作的 Logstash 服务器,以及一种将您的日志发送到 Logstash 的方法。 如果你没有设置 Logstash,这里有另外一个教程可以帮助你开始: 如何在 Ubuntu 14.04上安装 Elasticsearch 1.7,Logstash 1.5和 Kibana 4.1(ELK Stack)。

服务器假设:

  • Logstash 安装在 / opt / Logstash 中
  • 你们在5000号港口收到来自 Logstash Forwarder 的日志
  • 您的 Logstash 配置文件位于 / etc / Logstash / conf. d
  • 您有一个名为01-lumberjack-input. conf 的输入文件
  • 您有一个名为30-lumberjack-output. conf 的输出文件

运输代理假设:

  • 在每个应用程序服务器上都配置了 Logstash 转发器以发送 syslog / auth。 登录到您的 Logstash 服务器(如上一个教程的设置 Logstash 转发器部分)

如果您的设置与我们假设的不同,只需调整本指南以匹配您的环境。

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

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

关于 Grok

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

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

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

如何使用本指南

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

分段 Logstash 转发器

Logstash 转发器子部分与发送其日志的应用服务器有关。 应该将其他文件配置添加到 / etc / logstash-forder 中。 文件直接放在下面几行之后:

  "files": [
    {
      "paths": [
        "/var/log/syslog",
        "/var/log/auth.log"
       ],
      "fields": { "type": "syslog" }
    }

确保附加的配置在关闭“ files”部分的]之前。 这将包括适当的日志文件发送到 Logstash,并标记为特定类型(这将由 Logstash 过滤器使用)。 必须重新加载 Logstash 转发器以使任何更改生效。

分段 Logstash 模式

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

过滤器分段

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

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

申请: Nginx

货运代理: Nginx

在 Nginx 服务器上,打开 logstash-forwarder. conf 配置文件进行编辑:

sudo vi /etc/logstash-forwarder.conf

在“ files”部分添加以下内容,将 Nginx 访问日志作为“ Nginx-access”类型发送到您的 Logstash 服务器:

,
    {
      "paths": [
        "/var/log/nginx/access.log"
       ],
      "fields": { "type": "nginx-access" }
    }

保存并退出。重新装入 Logstash 转发器配置,使更改生效:

sudo service logstash-forwarder restart

模式: Nginx

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

在你的 Logstash 服务器上,创建一个叫做 nginx 的新模式文件:

sudo vi /opt/logstash/patterns/nginx

然后插入以下行:

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:logstash /opt/logstash/patterns/nginx

过滤器: Nginx

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

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

然后添加以下过滤器:

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

保存并退出。 注意,这个过滤器将尝试将“ nginx-access”类型的消息与上面定义的 NGINXACCESS 模式匹配。

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

sudo service logstash restart

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

应用程序: Apache HTTP Web Server

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

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

Logstash 货运代理

在 Apache 服务器上,打开 logstash-forwarder. conf 配置文件进行编辑:

sudo vi /etc/logstash-forwarder.conf

在“ files”部分添加以下内容,将 Apache 访问日志以“ Apache-access”类型发送到您的 Logstash 服务器:

,
    {
      "paths": [
        "/var/log/apache2/access.log"
       ],
      "fields": { "type": "apache-access" }
    }

保存并退出。重新装入 Logstash 转发器配置,使更改生效:

sudo service logstash-forwarder restart

过滤器: Apache

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

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

然后添加以下过滤器:

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

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

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

sudo service logstash restart

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

总结

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

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

如果您不熟悉 Kibana 的使用,请参阅本系列的第三个教程: 如何使用 Kibana 可视化和仪表板。