介绍
Logstash是用于集中和分析日志的强大工具,可以帮助提供和概述您的环境,并确定您的服务器的问题。 提高ELK(Elasticsearch,Logstash和Kibana)设置的有效性的一种方法是收集重要的应用程序日志,并通过使用过滤器来构建日志数据,因此数据可以轻松地分析和查询。 我们将围绕“grok”模式构建过滤器,它将日志中的数据解析为有用的信息位。
本指南是一个续集如何在Ubuntu上安装Elasticsearch,Logstash和Kibana 4 14.04教程,并主要集中在增加Logstash过滤各种常见的应用程序日志。
先决条件
要遵循本教程,您必须具有正在从托运人(如Filebeat)接收日志的可用Logstash服务器。 如果没有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
您可能需要创建patterns
运行的Logstash服务器上运行此命令目录:
sudo mkdir -p /opt/logstash/patterns
sudo chown logstash: /opt/logstash/patterns
客户端服务器假设
- 你已经Filebeat配置,每个应用程序服务器上,到syslog / auth.log发送到您的Logstash服务器(如设立Filebeat部分的前提教程)
如果您的设置不同,只需调整本指南以符合您的环境。
关于Grok
Grok通过解析文本模式,使用正则表达式,并将它们分配给标识符来工作。
对于神交模式的语法是%{ PATTERN : IDENTIFIER }
。 Logstash过滤器包括将各种日志消息匹配并分配给各种标识符的grok模式序列,这是日志是如何给出结构的。
要了解更多关于神交,请访问Logstash神交页面 ,并且Logstash默认模式上市 。
如何使用本指南
下面的每个主要部分将包括收集和过滤给定应用程序的日志所需的附加配置详细信息。 对于要记录和过滤的每个应用程序,您将必须在客户端服务器(Filebeat)和Logstash服务器上进行一些配置更改。
Logstash模式小节
如果有一个Logstash模式款时,它将包含可以添加到一个新的文件神交型态/opt/logstash/patterns
的Logstash服务器上。 这将允许您在Logstash过滤器中使用新模式。
Logstash过滤器子节
所述Logstash过滤小节将包括可以可添加到一个新的文件,该输入和输出配置文件之间,在一个滤波/etc/logstash/conf.d
的Logstash服务器上。 过滤器确定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
...
在上面的例子中,红色高亮线条代表发送所有的探矿.log
文件/var/log/app/
与以Logstash app-access
类型。 进行任何更改后,必须重新加载Filebeat以使任何更改生效。
现在你知道如何使用本指南,本指南的其余部分将告诉你如何收集和过滤应用程序日志!
应用:Nginx
Logstash模式:Nginx
Nginx日志模式不包括在Logstash的默认模式中,因此我们将手动添加Nginx模式。
在您的ELK服务器上 ,创建一个新的特征码文件名为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: /opt/logstash/patterns/nginx
Logstash过滤器:Nginx
在您的ELK服务器上 ,创建一个新的过滤器配置文件名为11-nginx-filter.conf
:
sudo vi /etc/logstash/conf.d/11-nginx-filter.conf
然后添加以下过滤器:
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
部分Nginx的访问日志类型发送nginx-access
到你的服务器Logstash:
-
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
在你的Apache服务器 ,打开filebeat.yml
编辑配置文件:
sudo vi /etc/filebeat/filebeat.yml
添加以下勘探者在filebeat
节进行到Apache日志类型发送apache-access
到你的服务器Logstash:
-
paths:
- /var/log/apache2/access.log
document_type: apache-access
保存并退出。 重新加载Filebeat以使更改生效:
sudo service filebeat restart
现在您的Apache日志将被收集和过滤!
结论
它可以收集和解析几乎任何类型的日志。 尝试并为其他日志文件编写自己的过滤器和模式。
随意评论过滤器,你想看到,或与自己的模式!
如果您不熟悉使用Kibana,看看这个教程: 如何使用Kibana可视化和仪表板 。