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

    xiaoxiao2021-03-25  98

    提供: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/logstashLogstash配置文件位于/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

    转载请注明原文地址: https://ju.6miu.com/read-9150.html

    最新回复(0)