ELK日志分析系统(2)--logstash文件输出、日志服务器伪装、多行过滤插件、grok过滤插件

一、logstash文件输出

  • logstash在采集数据完成后会把进度保存到sincedb文件中,假如我们选择将数据输出到elastic中,这时如果在elastic中将数据删除,然后用logstash采集同样的数据,这时候只会采集最新更改的信息,而之前重复的信息将不会被采集,这时候就可能造成数据的缺失
  • 因此我们需要采集同样的信息并且把最新的数据也包含进去的话需要先删除对应的sincedb文件,然后再用logstash采集
  • logstash保存进度到sincedb中是为了防止在重启logstash进行采集信息后,造成采集信息冗余

sincedb文件一共6个字段:

  1. inode编号
  2. 文件系统的主要设备号
  3. 文件系统的次要设备号
  4. 文件中的当前字节偏移量
  5. 最后一个活动时间戳(浮点数)
  6. 与此记录匹配的最后一个已知路径
[root@server1 logstash]# cd conf.d/
[root@server1 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/demo.conf

[root@server1 conf.d]# cd /usr/share/logstash/data/plugins/inputs/file/
[root@server1 file]# l.
.  ..  .sincedb_452905a167cf4509fd08acb964fdb20c
[root@server1 file]# cat .sincedb_452905a167cf4509fd08acb964fdb20c
13398509 0 64768 287553 1622188993.191149 /var/log/messages
[root@server1 file]# cd /var/log/
[root@server1 log]# ls -i messages
13398509 messages

注意第一次采集的数据大小
在这里插入图片描述
未删除sincedb文件进行采集
在这里插入图片描述
数据大小很明显变小,采集信息有缺失。
在这里插入图片描述
在这里插入图片描述
在日志文件中添加信息
在这里插入图片描述
logstash可以同步采集,因为定义logstash采集的是系统的日志信息。
在这里插入图片描述

在这里插入图片描述
logstash新采集的保存在elasticsearch中的信息。
在这里插入图片描述

二、logstash伪装成日志服务器

利用Syslog输入插件,将logstash伪装成日志服务器,直接接受远程日志.

1. Syslog输入插件的使用
[root@server1 file]# cd /etc/logstash/conf.d/
[root@server1 conf.d]# ls
demo.conf
[root@server1 conf.d]# vim demo.conf 
input {
        syslog {
                port => 514		        #日志收集端口(默认的,可以不用添加)
        }
}

[root@server1 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/demo.conf
[root@server1 ~]# netstat -antlp | grep :514
tcp6       0      0 :::514                  :::*                    LISTEN      4674/java   
[root@server1 ~]# netstat -antulp | grep :514
tcp6       0      0 :::514                  :::*                    LISTEN      4674/java           
udp        0      0 0.0.0.0:514             0.0.0.0:*                           4674/java  

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.远程日志同步

将server2、server3上的日志远程同步到server1的logstash中

# server2 3 做同样操作
[root@server2 ~]# vim /etc/rsyslog.conf 
[root@server2 ~]# systemctl restart rsyslog

在这里插入图片描述
在这里插入图片描述
日志上传到指定远程主机
在这里插入图片描述
保证server1上的logstash是开启状态
在这里插入图片描述

[root@server2 ~]# logger server2 ##server2上添加新日志信息

在这里插入图片描述
server3上做同样的配置即可
在这里插入图片描述

三、多行过滤插件

多行过滤可以把多行日志记录合并为一行事件

1.示例
[root@server1 conf.d]# pwd
/etc/logstash/conf.d
[root@server1 conf.d]# vim test.conf
input {
	stdin {
	codec => multiline {            #多行录入
		pattern => "^EOF"           #以EOF开头
		negate => true              #是否匹配到,true表示匹配到了
		what => previous            #匹配到了之后要做的事情:previous表示向上合并
		}
	}
}

output {
	stdout {}
}
[root@server1 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test.conf ##以指定文件启动logstash

在这里插入图片描述
在这里插入图片描述
符合条件向上合并,将输入合并成一行
在这里插入图片描述
在这里插入图片描述

2.采集完整日志信息

在特殊场景下,有些完整信息的输出是多行展示,这时候如果不设置这种向上匹配并合并输出的机制,则会导致采集的信息不完整

my-es.log作为采集信息示,因为这个文件中信息输出是多行的。

[root@server1 conf.d]# ll /var/log/elasticsearch/my-es.log 
-rw-r--r-- 1 elasticsearch elasticsearch 89907 May 28 12:45 /var/log/elasticsearch/my-es.log
[root@server1 conf.d]# vim es.con
input {
       file {
                path => "/var/log/elasticsearch/my-es.log"
                start_position => "beginning"
        }
}
output {

        stdout { }
        elasticsearch {
                hosts => ["192.168.0.1:9200"]
                index => "eslog-%{+YYYY.MM.dd}"    
        }
}
[root@server1 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/es.conf 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查看采集到的信息,发现信息是不完整的
在这里插入图片描述

查看目标文件信息
[root@server1 ~]# cd /var/log/elasticsearch/
[root@server1 elasticsearch]# less my-es.log 

在这里插入图片描述
在这里插入图片描述

指定匹配规则
[root@server1 conf.d]# vim es.conf 
                codec => multiline {
                pattern => "^\["
                negate => true
                what => previous
                }
[root@server1 conf.d]# cd /usr/share/logstash/data/plugins/
[root@server1 plugins]# ls
inputs
[root@server1 plugins]# cd inputs/file/
[root@server1 file]# ls
[root@server1 file]# l.
.  ..  .sincedb_452905a167cf4509fd08acb964fdb20c  .sincedb_d5a86a03368aaadc80f9eeaddba3a9f5
[root@server1 file]# cat .sincedb_d5a86a03368aaadc80f9eeaddba3a9f5
5032853 0 64768 89907 1622194801.158707 /var/log/elasticsearch/my-es.log
[root@server1 file]# rm -fr .sincedb_d5a86a03368aaadc80f9eeaddba3a9f5
[root@server1 file]# l.
.  ..  .sincedb_452905a167cf4509fd08acb964fdb20c
[root@server1 file]# cat .sincedb_452905a167cf4509fd08acb964fdb20c
13398509 0 64768 287759 1622190845.260607 /var/log/messages

[root@server1 file]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/es.conf

在这里插入图片描述
采集前需要将之前的数据删除,并删除sincedb进度文件,以为能够采集到全部的数据。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
采集完整信息
在这里插入图片描述

四、grok过滤插件

使用grok插件我们可以对采集的数据做预处理,过滤我们想要的信息

1.内核参数优化
[root@server1 7.6]# cd /proc/sys/vm/
[root@server1 vm]# cat swappiness 
30
[root@server1 vm]# echo 10 > swappiness  #减少swap的利用率,尽可能的使用物理内存,提高运行速度
[root@server1 vm]# cat swappiness 
10

在这里插入图片描述

2.grok过滤
安装httpd,编辑测试页面
[root@server1 elasticsearch]# yum install -y httpd
[root@server1 elasticsearch]# systemctl start httpd
[root@server1 elasticsearch]# cd /var/www/html/
[root@server1 html]# ls
[root@server1 html]# echo server1 > index.html
[root@server1 html]# cat /var/log/httpd/access_log 

在这里插入图片描述

做负载,产生日志
[root@foundation Desktop]# ab -c1 -n100 http://192.168.0.1/index.html

在这里插入图片描述

grok过滤示例
[root@server1 html]# chmod 755 /var/log/httpd/
[root@server1 html]# ll -d /var/log/httpd/
drwxr-xr-x 2 root root 41 May 28 18:49 /var/log/httpd/
[root@server1 html]# ll /var/log/httpd/access_log 
-rw-r--r-- 1 root root 10200 May 28 18:51 /var/log/httpd/access_log

[root@server1 html]# cd /etc/logstash/conf.d/
[root@server1 conf.d]# ls
demo.conf  es.conf  test.conf
[root@server1 conf.d]# vim test.conf   #编辑配置文件
input {
	stdin {}
}
filter {
	grok {
	match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
	}
}
output {
	stdout {}
}
[root@server1 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test.conf 
55.3.244.1 GET /index.html 15824 0.043

在这里插入图片描述
在这里插入图片描述
输入的信息被分段截取,相当于做了预处理
在这里插入图片描述

编辑apache.conf文件,并进行logstash日志采集试验
[root@server1 patterns]# vim httpd 
[root@server1 patterns]# pwd
/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns
[root@server1 patterns]# ll httpd 
-rw-r--r-- 1 logstash logstash 987 May 28 19:20 httpd
[root@server1 patterns]# vim /etc/httpd/conf/httpd.conf
[root@server1 patterns]# cd /etc/logstash/conf.d/
[root@server1 conf.d]# ls
apache.conf  demo.conf  es.conf  test.conf
[root@server1 conf.d]# vim apache.conf 
[root@server1 conf.d]# vim apache.conf 
input {
       file {
                path => "/var/log/httpd/access_log"
                start_position => "beginning"
        }
}

filter {
        grok {
                match => { "message" => "%{ HTTPD_COMBINEDLOG }" }
        }
}


output {

        stdout { }

        elasticsearch {
                hosts => ["192.168.0.1:9200"]
                index => "apachelog-%{+YYYY.MM.dd}"
        }
}
[root@server1 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/apache.conf 

在这里插入图片描述
在这里插入图片描述
apache日志文件默认的日志定制格式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查看采集到的信息,信息已做过预处理,字段信息全部单独被截取出来
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值