添加Logstash Filter以改进集中化日志记录机制

来源:互联网 发布:实时人口迁徙大数据 编辑:程序博客网 时间:2024/05/21 22:40

提供: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 PatternNGUSERNAME [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 Filterfilter {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 Filterfilter {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

0 0
原创粉丝点击