添加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 转发器的日志
- 您的 Logstash 配置文件位于
/etc/logstash/conf.d
- 您有一个名为
01-lumberjack-input.conf
的输入文件 - 您有一个名为
30-lumberjack-output.conf
的输出文件
Logstash 转发器假设:
- 您已在每个应用程序服务器上配置了 Logstash 转发器,以将 syslog/auth.log 发送到您的 Logstash 服务器(如上一教程的 设置 Logstash 转发器 部分)
如果您的设置与我们假设的不同,只需调整本指南以匹配您的环境。
您可能需要通过在 Logstash 服务器上运行以下命令来创建 patterns
目录:
sudo mkdir -p /opt/logstash/patterns sudo chown logstash:logstash /opt/logstash/patterns
关于格洛克
Grok 通过解析文本模式、使用正则表达式并将它们分配给标识符来工作。
grok 模式的语法是 %{PATTERN:IDENTIFIER}
。 Logstash 过滤器包括一系列 grok 模式,这些模式匹配并将日志消息的各个部分分配给各种标识符,这就是给定日志结构的方式。
要了解有关 grok 的更多信息,请访问 Logstash grok 页面 和 Logstash 默认模式列表 。
如何使用本指南
其后的每个主要部分都将包括收集和过滤给定应用程序日志所需的其他配置详细信息。 对于要记录和过滤的每个应用程序,您必须在应用程序服务器和 Logstash 服务器上进行一些配置更改。
Logstash 转发器小节
Logstash Forwarder 小节与发送其日志的应用程序服务器有关。 附加的 files 配置应直接添加到 /etc/logstash-forwarder.conf
文件的以下行之后:
"files": [ { "paths": [ "/var/log/syslog", "/var/log/auth.log" ], "fields": { "type": "syslog" } }
确保附加配置在关闭“文件”部分的 ]
之前。 这将包括要发送到 Logstash 的正确日志文件,并将它们标记为特定类型(将由 Logstash 过滤器使用)。 必须重新加载 Logstash 转发器才能使任何更改生效。
Logstash 模式小节
如果有 Logstash Patterns 小节,它将包含可以添加到 Logstash 服务器上 /opt/logstash/patterns
中的新文件的 grok 模式。 这将允许您在 Logstash 过滤器中使用新模式。
Logstash 过滤器小节
Logstash 过滤器小节将包含一个过滤器,该过滤器可以添加到 Logstash 服务器上的 /etc/logstash/conf.d
中的输入和输出配置文件之间的新文件中。 过滤器决定了 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 可视化和仪表板。