提供:ZStack云计算
系列教程
本教程为在Ubuntu 14.04上利用ELK堆栈(Elasticsearch、Logstash与Kibana)实现集中化日志记录系列五篇中的第三篇。
本教程为在CentOS 7上利用Logstash与Kibana实现集中化日志记录系列五篇中的第三篇。
内容简介
Logstash是一款强大的日志集中与分析工具,其能够帮助我们对环境拥有更为明确的宏观把握能力。要进一步提升ELK堆栈的实际效果,我们可以收集重要应用日志并利用filter实现日志数据结构化,从而确保数据内容的可读性与可查询性。我们将利用“grok”模式构建filter,并将日志内的数据解析为可用信息。
本教程为如何在Ubuntu 14.04上安装Elasticsearch、Logstash及Kibana 4的后续文章,主要讨论如何添加Logstash filter以处理多种常见应用日志。
先决条件
要完成今天的教程,大家请参阅如何在Ubuntu 14.04上安装Elasticsearch、Logstash与Kibana 4一文并完成相关安装及配置工作。
ELK服务器配置
- Logstash安装于/opt/logstash
- Logstash配置文件位于/etc/logstash/conf.d
- 已经创建名为02-beats-input.conf的input文件
- 已经创建名为30-elasticsearch-output.conf的output文件
大家还需要在Logstash服务器上创建模式目录,具体命令如下:
- sudo mkdir -p /opt/logstash/patterns
- sudo chown logstash: /opt/logstash/patterns
客户服务器配置
- 按照上篇教程中[设置Filebeat部分](https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-ubuntu-14-04#set-up-filebeat-(add-client-servers)的引导完成操作。
如果大家的设置有所不同,也可调查本教程的具体细节以配合自己的实际环境。
关于Grok
Grok负责解析文本模式,使用正则表达式并将其分配至标识符。
Grok模式的语法结构为%{PATTERN:IDENTIFIER}。每个Logstash filter包含多种能够与日志信息相匹配并将其分配给不同标识符的grok模式,而这也正是让日志内容转化为结构化信息的关键所在。
要了解更多与grok相关的细节,请参阅Logstash grok页面以及Logstash默认模式列表。
如何使用本教程
以下各主要部分都将包含大量配置细节,其亦是对特定应用进行日志收集与过滤的关键。对于每款目标应用,大家都需要对客户服务器(Filebeat)及Logstash服务器者配置变更。
Logstash Patterns部分
如果存在Logstash Patterns部分,其将包含能够被添加至Logstash服务器上/opt/logstash/patterns处新文件内的grok模式。通过这种方式,大家即可在Logstash filter中使用新的模式。
Logstash Filter部分
Logstash Filter部分将包含可被添加至新文件中的filter,其与input与output配置文件共同存在于Logstash服务器的/etc/logstash/conf.d当中。该filter负责会检测Logstash服务器如何解析相关日志文件。请记得在添加新filter后重启Logstash服务以应用变更。
Filebeat Prospector部分
Filebeat Prospectors用于指定哪些日志信息将被发送至Logstash。更多prospector配置信息可直接添加至/etc/filebeat/filebeat.yml文件内的prospectors部分之后:
Prospector示例
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
...
在以上示例中,红色高亮部分代表一个prosepctor,其将/var/log/app/内的所有app-access类型.log文件发送至Logstash。在做出变更后,必须重启Filebeat以应用变更。
现在大家已经了解如何使用这篇教程了,接下来的部分将说明如何收集并过滤应用日志!
应用: Nginx
Logstash Patterns: Nginx
Nginx日志模式并非Logstash的默认模式之一,因此我们需要手动添加Nginx模式。
在ELK服务器上创建一个名为nginx的新模式文件:
- sudo vi /opt/logstash/patterns/nginx
而后插入以下行:
Nginx Grok Pattern
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 Filter: Nginx
在ELK服务器上创建一个新的filter配置文件,名为11-nginx-filter.conf:
- sudo vi /etc/logstash/conf.d/11-nginx-filter.conf
而后添加以下filter:
Nginx Filter
filter {
if [type] == "nginx-access" {
grok {
match => { "message" => "%{NGINXACCESS}" }
}
}
}
保存并退出。请注意,此filter将试图利用NGINXACCESS模式匹配nginx-access类信息。
现在重启Logstash以重载此配置:
- sudo service logstash restart
Filebeat Prospector: Nginx
在Nginx服务器上打开filebeat.yml配置文件:
- sudo vi /etc/filebeat/filebeat.yml
在filebeat部分添加以下Prospector以将nginx-access类Nginx访问日志发送至Logstash服务器:
Nginx Prospector
-
paths:
- /var/log/nginx/access.log
document_type: nginx-access
保存并退出。重载Filebeat以应用变更:
- sudo service filebeat restart
现在我们的Nginx日志已经能够正确进行收集与过滤了!
应用: Apache HTTP Web服务器
Apache的日志模式属于Logstash默认模式之一,因此我们可以轻松为其设置filter。
请注意:如果大家使用红帽Linux版本,例如CentOS,那么日志将位于/var/log/httpd而非/var/log/apache2。
Logstash Filter: Apache
在ELK服务器上创建名为12-apache.conf的新filter配置文件:
- sudo vi /etc/logstash/conf.d/12-apache.conf
而后添加以下filter:
Apache Filter
filter {
if [type] == "apache-access" {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}
}
保存并退出。请注意,此filter将尝试利用COMBINEDAPACHELOG模式(Logstash默认模式之一)匹配apache-access类信息。
现在重启Logstash以重载配置:
- sudo service logstash restart
Filebeat Prospector: Apache
在Apache服务器上打开filebeat.yml配置文件:
- sudo vi /etc/filebeat/filebeat.yml
在filebeat部分添加以下Prospector,从而将Apache日志作为apache-access类型发送至Logstash服务器:
Apache Prospector
-
paths:
- /var/log/apache2/access.log
document_type: apache-access
保存并退出。重载Filebeat以应用变更:
- sudo service filebeat restart
现在我们的Apache日志将得到收集与过滤!
总结
大家可以对各种类型的日志者收集与解析,各位不妨针对其它日志文件编写自己的filter与pattern。
如果大家还不太清楚如何使用Kibana,请参阅如何使用Kibana可视化机制与仪表板一文。
本文来源自DigitalOcean Community。英文原文:Adding Logstash Filters To Improve Centralized Logging By Mitchell Anicas
翻译:diradw