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

简介

Logstash是一个用于集中和分析日志的强大工具,它可以帮助提供和概述您的环境,并识别您的服务器的问题。提高ELK Stack(Elasticearch、Logstash和Kibana)设置效率的一种方法是收集重要的应用程序日志,并通过使用筛选器来组织日志数据,以便可以轻松地分析和查询数据。我们将围绕grok模式构建过滤器,这些模式将把日志中的数据解析为有用的信息。

本指南是如何在Ubuntu 14.04上安装Elasticearch、Logstash和Kibana4》教程的续篇,主要关注为各种常见的应用程序日志添加Logstash过滤器。

预约

要学习本教程,您必须有一个工作正常的Logstash服务器,该服务器正在接收来自FileBeat等发货人的日志。如果您还没有设置Logstash来接收日志,下面的教程将帮助您入门:如何在Ubuntu 14.04.上安装Elasticsearch、Logstash和Kibana4

_

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

您可能需要在Logstash Server上运行以下命令来创建patterns目录:

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

客户端服务器分配

  • 您已在每个应用程序服务器上配置了FileBeat,以将syslog/auth.log发送到您的Logstash服务器(如必备教程的设置FileBeat section]中所述)

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

关于Grok

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

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

要了解有关Grok的更多信息,请访问Logstash Grok page,和Logstash Default Patterns listing.

使用指南

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

Logstash模式小节

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

Logstash Filter小节

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

FileBeat Prospector小节

FileBeat Prospectors用于指定要发送到Logstash的日志。在prospectors部分中,需要将其他prospector配置添加到/etc/fileeat/filebeat.yml文件中,紧跟在现有prospectors之后:

 1[label Prospector Examples]
 2filebeat:
 3  # List of prospectors to fetch data.
 4  prospectors:
 5    -
 6      - /var/log/secure
 7      - /var/log/messages
 8      document_type: syslog
 9    -
10      paths:
11        - /var/log/app/*.log
12      document_type: app-access
13...

在上面的示例中,红色高亮显示的线表示将/var/log/app/中的所有.log文件发送到app-acces类型的Logstash的Prospector。进行任何更改后,必须重新加载FileBeat才能使任何更改生效。

现在您已经了解了如何使用本指南,本指南的其余部分将向您展示如何收集和过滤应用程序日志!

应用:nginx

Logstash模式:nginx

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

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

1sudo vi /opt/logstash/patterns/nginx

然后插入以下几行:

1[label Nginx Grok Pattern]
2NGUSERNAME [a-zA-Z\.\@\-\+_%]+
3NGUSER %{NGUSERNAME}
4NGINXACCESS %{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

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

Logstash过滤器:nginx

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

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

然后添加以下筛选器:

1[label Nginx Filter]
2filter {
3  if [type] == "nginx-access" {
4    grok {
5      match => { "message" => "%{NGINXACCESS}" }
6    }
7  }
8}

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

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

1sudo service logstash restart

FileBeat探索者:Nginx

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

1sudo vi /etc/filebeat/filebeat.yml

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

1[label Nginx Prospector]
2    -
3      paths:
4        - /var/log/nginx/access.log
5      document_type: nginx-access

保存并退出。要使更改生效,请重新加载FileBeat:

1sudo service filebeat restart

现在我们将收集并过滤您的Nginx日志!

应用:APACHE HTTP Web服务器

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

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

Logstash过滤器:apache

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

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

然后添加以下筛选器:

1[label Apache Filter]
2filter {
3  if [type] == "apache-access" {
4    grok {
5      match => { "message" => "%{COMBINEDAPACHELOG}" }
6    }
7  }
8}

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

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

1sudo service logstash restart

探矿者:阿帕奇

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

1sudo vi /etc/filebeat/filebeat.yml

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

1[label Apache Prospector]
2    -
3      paths:
4        - /var/log/apache2/access.log
5      document_type: apache-access

保存并退出。要使更改生效,请重新加载FileBeat:

1sudo service filebeat restart

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

结论

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

欢迎使用您想要查看的过滤器或您自己的模式进行评论!

如果您不熟悉Kibana的使用,请查看此教程:如何使用Kibana可视化和Dashboards.

Published At
Categories with 技术
comments powered by Disqus