添加Logstash过滤器以改进集中式日志记录

来自菜鸟教程
跳转至:导航、​搜索

介绍

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 服务器上运行以下命令来创建 patterns 目录:

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

客户端服务器假设

  • 您已在每个应用程序服务器上配置了 Filebeat,以将 syslog/auth.log 发送到您的 Logstash 服务器(如先决条件教程的 Set Up Filebeat 部分 中所述)

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

关于格洛克

Grok 通过解析文本模式、使用正则表达式并将它们分配给标识符来工作。

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

要了解有关 grok 的更多信息,请访问 Logstash grok 页面Logstash 默认模式列表

如何使用本指南

其后的每个主要部分都将包括收集和过滤给定应用程序日志所需的其他配置详细信息。 对于要记录和过滤的每个应用程序,您必须在客户端服务器 (Filebeat) 和 Logstash 服务器上进行一些配置更改。

Logstash 模式小节

如果有 Logstash Patterns 小节,它将包含可以添加到 Logstash 服务器上 /opt/logstash/patterns 中的新文件的 grok 模式。 这将允许您在 Logstash 过滤器中使用新模式。

Logstash 过滤器小节

Logstash 过滤器小节将包含一个过滤器,该过滤器可以添加到 Logstash 服务器上的 /etc/logstash/conf.d 中的输入和输出配置文件之间的新文件中。 过滤器决定了 Logstash 服务器如何解析相关的日志文件。 请记住在添加新过滤器后重新启动 Logstash 服务,以加载您的更改。

Filebeat Prospector 小节

Filebeat Prospectors 用于指定将哪些日志发送到 Logstash。 额外的探矿者配置应直接添加到 /etc/filebeat/filebeat.yml 文件中 prospectors 部分中现有探矿者之后:

探矿者示例

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/ 中的所有 .log 文件发送到具有 app-access 类型的 Logstash。 进行任何更改后,必须重新加载 Filebeat 以使任何更改生效。

既然您知道如何使用本指南,本指南的其余部分将向您展示如何收集和过滤应用程序日志!

应用:Nginx

Logstash 模式:Nginx

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

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

sudo vi /opt/logstash/patterns/nginx

然后插入以下行:

Nginx Grok 模式

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 模式解析数据,并将数据分配给各种标识符(例如 clientipidentauth 等)。

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

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

Logstash 过滤器:Nginx

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

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

然后添加以下过滤器:

Nginx 过滤器

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

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

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

sudo service logstash restart

Filebeat Prospector:Nginx

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

sudo vi /etc/filebeat/filebeat.yml

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

Nginx 探矿者

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

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

sudo service filebeat restart

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

应用程序:Apache HTTP Web 服务器

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

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


Logstash 过滤器:Apache

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

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

然后添加以下过滤器:

阿帕奇过滤器

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

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

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

sudo service logstash restart

Filebeat Prospector:阿帕奇

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

sudo vi /etc/filebeat/filebeat.yml

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

阿帕奇探矿者

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

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

sudo service filebeat restart

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

结论

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

随意使用您想看到的过滤器或您自己的模式发表评论!

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