添加 Logstash 过滤器以改进集中式日志记录(Logstash 转发器)
注意:本教程适用于使用 Logstash Forwarder 而非 Filebeat 的旧版 ELK 堆栈设置。本教程的最新版本可在添加 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 服务器假设:
- Logstash 安装在
/opt/logstash
- 您正在端口 5000 上接收来自 Logstash Forwarder 的日志
- 您的 Logstash 配置文件位于
/etc/logstash/conf.d
- 您有一个名为
01-lumberjack-input.conf
- 您有一个名为的输出文件
30-lumberjack-output.conf
Logstash 转发器假设:
- 您已在每个应用程序服务器上配置了 Logstash 转发器,以将 syslog/auth.log 发送到您的 Logstash 服务器(如上一个教程中的“设置 Logstash 转发器”部分所述)
如果您的设置与我们的假设不同,只需调整本指南以匹配您的环境。
您可能需要patterns
通过在 Logstash 服务器上运行此命令来创建目录:
sudo mkdir -p /opt/logstash/patterns
sudo chown logstash:logstash /opt/logstash/patterns
关于 Grok
Grok 通过解析文本模式、使用正则表达式并将其分配给标识符来工作。
Grok 模式的语法是。Logstash 过滤器包含一系列 grok 模式,这些模式将日志消息的各个部分匹配并分配给各种标识符,这就是日志的结构。%{PATTERN:IDENTIFIER}
要了解有关 grok 的更多信息,请访问Logstash grok 页面和Logstash 默认模式列表。
如何使用本指南
此后的每个主要部分都将包含收集和过滤给定应用程序日志所需的其他配置详细信息。对于要记录和过滤的每个应用程序,您必须在应用程序服务器和 Logstash 服务器上进行一些配置更改。
Logstash 转发器子部分
Logstash Forwarder 子部分与发送其日志的应用程序服务器有关。附加文件配置应直接添加到/etc/logstash-forwarder.conf
以下几行之后的文件中:
"files": [
{
"paths": [
"/var/log/syslog",
"/var/log/auth.log"
],
"fields": { "type": "syslog" }
}
确保附加配置位于]
关闭“文件”部分的之前。这将包括要发送到 Logstash 的正确日志文件,并将它们标记为特定类型(将由 Logstash 过滤器使用)。必须重新加载 Logstash 转发器才能使任何更改生效。
Logstash 模式子部分
如果有 Logstash Patterns 子部分,它将包含可添加到/opt/logstash/patterns
Logstash Server 上的新文件中的 grok 模式。这将允许您在 Logstash 过滤器中使用新模式。
Logstash 过滤器子部分
Logstash 过滤器子部分将包含一个过滤器,该过滤器可以添加到/etc/logstash/conf.d
Logstash 服务器上输入和输出配置文件之间的新文件中。该过滤器决定 Logstash 服务器如何解析相关日志文件。请记住在添加新过滤器后重新启动 Logstash 服务器,以加载您的更改。
现在您知道如何使用本指南,本指南的其余部分将向您展示如何收集和过滤应用程序日志!
应用程序:Nginx
Logstash 转发器:Nginx
在您的Nginx服务器上,打开logstash-forwarder.conf
配置文件进行编辑:
sudo vi /etc/logstash-forwarder.conf
在“文件”部分添加以下内容,将 Nginx 访问日志以“nginx-access”类型发送到您的 Logstash 服务器:
,
{
"paths": [
"/var/log/nginx/access.log"
],
"fields": { "type": "nginx-access" }
}
保存并退出。重新加载 Logstash Forwarder 配置以使更改生效:
sudo service logstash-forwarder restart
Logstash 模式: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
Logstash 过滤器: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 服务器
Apache 的日志模式包含在默认的 Logstash 模式中,因此为其设置过滤器相当容易。
注意:如果您使用的是 RedHat 版本(例如 CentOS),则日志位于,/var/log/httpd
而不是/var/log/apache2
,示例中使用的是 。
Logstash 转发器
在Apache服务器上,打开logstash-forwarder.conf
配置文件进行编辑:
sudo vi /etc/logstash-forwarder.conf
在“文件”部分添加以下内容,将 Apache 访问日志以“apache-access”类型发送到您的 Logstash 服务器:
,
{
"paths": [
"/var/log/apache2/access.log"
],
"fields": { "type": "apache-access" }
}
保存并退出。重新加载 Logstash Forwarder 配置以使更改生效:
sudo service logstash-forwarder restart
Logstash 过滤器: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”类型的消息与 COMBINEDAPACHELOG 模式(默认 Logstash 模式之一)进行匹配。
现在重新启动 Logstash 以重新加载配置:
sudo service logstash restart
现在您的 Apache 日志将被收集和过滤!
结论
可以收集和解析几乎任何类型的日志。尝试为其他日志文件编写自己的过滤器和模式。
请随意评论您想看到的过滤器,或者您自己的模式!
如果您不熟悉使用 Kibana,请查看本系列的第三篇教程:如何使用 Kibana 可视化和仪表板。