filebeat收集tomcat和nginx日志

一、介绍

beats是ELK体系中新增的一个工具,它属于一个轻量的日志采集器,以上我们使用的日志采集工具是logstash,但是logstash占用的资源比较大,没有beats轻量,所以官方也推荐使用beats来作为日志采集工具。而且beats可扩展,支持自定义构建

官方介绍:https://www.elastic.co/cn/products/beats

二、架构

在这里插入图片描述
从下往上看,filebeat作为收集日志的client端非常合适,因为他够轻量,然后将日志数据传给redis集群中,logstash再从redis中抽取日志进行过滤和筛选后存入elasticsearch集群中,最后kibana从es集群中把数据展示出来,很简单对吧

三、安装

还记的之前下载的rpm包么,轮到他出场了

yum install -y filebeat-7.3.2-x86_64.rpm

四、配置

直接删了原配置,替换上新的

rm -rf /etc/filebeat/filebeat.yml
vim /etc/filebeat/filebeat.yml

以下为配置内容

#=========================== Filebeat inputs =============================
#部分旧系统版本不认input,要用prospectors
#filebeat.prospectors:
#centos7用inputs
filebeat.inputs:

# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.

  
#=========== nginx error日志 ==============

- document_type: "172.17.19.137‐nginx‐error‐log"
  enabled: true
  paths:
    - /opt/server/nginx/logs/error.log
  encoding: utf-8
  scan_frequency: 10s
  tail_files: true
  tags: "nginx-error-qudao-searching"
#=========== searching日志 ==============

- document_type: "172.17.19.137‐searching‐log"
  enabled: true
  paths:
    - /opt/server/tomcat_searching/logs/catalina.out
  encoding: utf-8
  scan_frequency: 10s
  include_lines: ['ERROR', 'WARN']
  multiline.pattern: ^\d{
    
    4}-\d{
    
    2}-\d{
    
    2}
  multiline.negate: true
  multiline.match: after
  tail_files: true
  tags: "searching"

#=========== qudao日志 ==============

- document_type: "172.17.19.137‐qudao‐log"
  enabled: true
  paths:
    - /opt/server/tomcat_qudao/logs/catalina.out
  encoding: utf-8
  scan_frequency: 10s
  include_lines: ['ERROR', 'WARN']
  multiline.pattern: ^\d{
    
    4}-\d{
    
    2}-\d{
    
    2}
  multiline.negate: true
  multiline.match: after
  tail_files: true
  tags: "qudao"
  
#=========== redis output  ===============================

output.redis:
   hosts: ["172.17.19.149:7227"]   #输出到redis的机器
   password: "redis配置的密码"
   key: "filebeat_19.137"   #redis中日志数据的key值ֵ
   db: 0
   timeout: 5

#============================= Filebeat modules ===============================

filebeat.config.modules:
  # Glob pattern for configuration loading
  path: ${path.config}/modules.d/*.yml

配置说明,filebeat的配置分为两部分,input和output部分,filebeat作为client端会以10秒为间隔(注意配置文件中的scan_frequency即是扫描间隔)持续扫描日志文件,然后output是上行路径,这个配置中用的redis集群做中转,也有用kafka的,这个比较随意。

**filebeat.inputs:**这个部分比较讨厌,需要注意一下。不然filebeat是无法启动的
部分旧系统版本不认input,要用prospectors,即:
filebeat.prospectors:
centos7用inputs,即:
filebeat.inputs:

document_type:这个是关键点,每个日志要以这个标签来识别,可以说是一个标题或段落起点,在早期版本中是type,现在都是document_type了。

include_lines: [‘ERROR’, ‘WARN’]
multiline.pattern: ^\d{4}-\d{2}-\d{2}
multiline.negate: true
multiline.match: after

这些是关键字和正则对日志的匹配,适用于tomcat日志,可以直接抄,filebeat从6.0版本开始也自带了过滤截取功能,并且我亲自实践后得知,如果连info这种级别的日志都收集的话redis集群会直接被干爆,logstash的处理速度远不及redis被存入的速度,所以此步骤是必须的。从这个配置里能看出,nginx error日志我是没加任何过滤条件的,原汁原味的存过来。

**tags:**这个是给logstash筛选用的,后边logstash的配置中会用到

后边output部分需要说的也就只有key和db还有的一说
key:就是存进redis中的表,logstash会将这些表抽出进行分析处理
db:redis总共有12个库,0就是0号库,不同编号的库里key可重复

好了配置就这些,很简单,接下来先不急着启动服务。首先务必确认redis是正常运行的,不然filebeat的日志里会直接告诉你连接失败。再者尽量在logstash启动之后启filebeat,省的光有存储,没抽取,日志量直接把redis干爆,filebeat的日志输出在/var/log/message里看

#centos7
systemctl start filebeat
#centos6
service filebeat start

启动服务后就可以去redis中看是否有key传过来了,当然打开之后如果毛都没有也正常,毕竟咱只过滤出warn和error,实验时可以把这个过滤条件去掉试下连通情况就行了。

进入redis集群中查看是否有key的方法是:

redis-cli -p 端口 -a 密码
127.0.0.1:6379> keys *
1) "filebeat_19.137"
2) "filebeat_19.138"


可以看到有好几个key已经过来了,接下来是配置logstash的配置文件,这个配置文件肯定会有若干个不同处理方式的,所以建议放在conf.d目录下以项目名分别存放。

vim /etc/logstash/conf.d/项目名.conf
input {
    
    
    redis {
    
    
        data_type => "list"
        key => "filebeat_19.137"
        host => "127.0.0.1"
        port => "redis端口"
        password => "redis密码"
        db => "0"
        #codec => json
        }
    redis {
    
    
        data_type => "list"
        key => "filebeat_19.138"
        host => "127.0.0.1"
        port => "redis端口"
        password => "redis密码"
        db => "0"
        #codec => json
        }
}

#filter {
    
    
#    
#    if "sfa-web" in [tags]{
    
    
#        grok {
    
    
#            match => ["message", "%{TIMESTAMP_ISO8601:time}\s* \s*%{NOTSPACE:thread-id}\s* \s*%{LOGLEVEL:level}\s* \s*%{JAVACLASS:class}\s* \- \s*%{JAVALOGMESSAGE:logmessage}\s*"]
#        }
#        
#    }
#    mutate {
    
    
#        remove_field => "log"
#        remove_field => "beat"
#        remove_field => "meta"
#        remove_field => "prospector"
#        remove_field => "[host][os]"
#    }
#}


output {
    
    
    if "nginx-error" in [tags]{
    
    
        elasticsearch {
    
    
            hosts => ["127.0.0.1:9200"]      
            index => "qudao-nginx-error-%{+yyyy.MM.dd}"      
	    user => "elastic"
	    password => "es的ACL密码"
        }
    }
    if "qudao" in [tags]{
    
    
        elasticsearch {
    
    
            hosts => ["127.0.0.1:9200"]      
            index => "qudao-%{+yyyy.MM.dd}"      
	    user => "elastic"
	    password => "es的ACL密码"
        }
    }
    if "searching" in [tags]{
    
    
        elasticsearch {
    
    
            hosts => ["127.0.0.1:9200"]      
            index => "searching-%{+yyyy.MM.dd}"      
	    user => "elastic"
	    password => "es的ACL密码"
        }
    }
}

解释下配置文件,logstash配置文件分3个部分,input部分是抽取部分,filter是过滤部分,output是存放部分。
input的抽取部分不用多说,从本地redis集群将key抽出来进行分析
fileter部分这里我把logstash的过滤条件注释掉了,根据需要自行打开和修改。
output部分会根据从redis抽出来的表进行filter过滤后的处理方式,配置中我根据之前filebeat打上的tags标签进行分类分出,将符合nginx-error,qudao,searching标签的存放在不同的es索引中,此举操作可将负载均衡后的不同后端服务器的日志汇总在同一项目索引里进行集中处理。

接下来就是见证奇迹的时刻了,logstash启动!

systemctl start logstash

启动完后可以看到redis中的key逐渐被消费掉

127.0.0.1:6379> keys *
(empty list or set)

到es服务器上查看索引,可以看到新增nginx-error-日期,qudao-日期,searching的索引,没看到是好事儿,毕竟筛选的都是报错信息,这就代表filesbeat和es能够正常通信了:

curl 'elastic:es的acl密码@127.0.0.1:9200/_cat/indices?v' 
yellow open   searching-2021.03.26                                          tavRmrvmR5CgeCpNgmjy8w   1   1        115            0     95.4kb         95.4kb
yellow open   qudao-2021.03.26                                              L3RSZ5zpRTaTFknRGoZx8A   1   1       1088            0    674.7kb        674.7kb

kibana中也可以在索引中看到,并配置索引了
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_35855396/article/details/115318209