目录
一、logstash文件输出
- logstash在采集数据完成后
会把进度保存到sincedb文件
中,假如我们选择将数据输出到elastic中,这时如果在elastic中将数据删除,然后用logstash采集同样的数据,这时候只会采集最新更改的信息,而之前重复的信息将不会被采集,这时候就可能造成数据的缺失 - 因此我们需要采集同样的信息并且把最新的数据也包含进去的话
需要先删除对应的sincedb文件
,然后再用logstash采集 logstash保存进度到sincedb中是为了防止在重启logstash进行采集信息后,造成采集信息冗余
sincedb文件一共6个字段:
- inode编号
- 文件系统的主要设备号
- 文件系统的次要设备号
- 文件中的当前字节偏移量
- 最后一个活动时间戳(浮点数)
- 与此记录匹配的最后一个已知路径
扩展:
- 考虑这样一种情况,一个分区中
有很多空闲空间并且有很多文件
,可以更新文件但是无法创建文件,这是什么原因导致的呢? - 这时候很可能是正在运行的应用创建了很多空文件导致该分区中的inode号被消耗光了,在一个存储区域中,每个文件必须要有自己对应的inode号,并且一个分区中的inode号数量是有限的,如果inode号被消耗殆尽,则无法创建新的文件。
- 打个比喻:就像是一个教室中,还有很多空位子,但是每个位子上都放了一本书,小明来教室准备找座位学习,但是有人告诉它,这些位子都已经有人了,小明很无奈,这些明明都是空的,但是没办法,还是只能去别的教室了。这里,教室就相当于分区,书本就相当于文件的inode号,而每个学生相当于真实的文件。
日志打包机制
:系统为了避免产生的日志文件过大会每隔一段时间重新打包一个日志文件
二、logstash伪装成日志服务器
- 我们利用
Syslog输入插件
,可以将logstash伪装成日志服务器,直接接受远程日志
1.Syslog输入插件的使用
vim /etc/logstash/conf.d/demo.conf
input {
syslog {
type => "rsyslog" %过滤调件,可以根据这个条件来对输入进行过滤,只保存想要的信息
port => 514 %日志收集端口(默认的,可以不用添加)
}
}
output {
stdout { }
}
2.远程日志同步
- 将server2、server3上的日志远程同步到server1的logstash中
server2,server3:
vim /etc/rsyslog.conf %配置文件做相关更改
systemctl restart rsyslog.service
注意:做上面这步的时候要保证server1上的logstash是开启状态
- server3上做同样的配置即可
三、多行过滤插件
- 多行过滤可以把多行日志记录合并为一行事件
1.示例
vim /etc/logstash/conf.d/test.conf:
input {
stdin {
codec => multiline { %多行录入
pattern => "^EOF" %以EOF开头
negate => true %是否匹配到,true表示匹配到了
what => previous %匹配到了之后要做的事情:previous表示向上合并
}
}
}
output {
stdout {}
}
2.作用
- 在特殊场景下,
有些完整信息的输出是多行展示
,这时候如果不设置这种向上匹配并合并输出的机制,则会导致采集的信息不完整
这里之所以使用my-es.log作为采集信息示例是因为这个文件中刚好有信息输出是多行的
改进:
- 首先查看目标文件信息,总结规律
- 指定匹配规则
四、grok过滤插件
- 使用grok插件我们可以对采集的数据做预处理,过滤我们想要的信息
1.内核参数优化
[root@server1 vm]# cat swappiness
30
[root@server1 vm]# echo 10 > swappiness %减少swap的利用率,尽可能的使用物理内存,提高运行速度
[root@server1 vm]# cat swappiness
10
[root@server1 vm]# pwd
/proc/sys/vm
2.grok过滤示例
vim /etc/logstash/conf.d/test.conf %编辑配置文件
input {
stdin {}
}
filter {
grok {
match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
}
}
output {
stdout {}
}
3.详细示例
1.安装httpd,编辑测试页面
2.做负载,产生日志
3.编辑apache.conf文件,并进行logstash日志采集试验
[root@server1 conf.d]# cat apache.conf
input {
file {
path => "/var/log/httpd/access_log"
start_position => "beginning"
}
}
filter{
grok {
match => { "message" => "%{HTTPD_COMBINEDLOG}" } %注意HTTPD_COMBINEDLOG前后不能有空格
}
}
output {
stdout {}
elasticsearch {
hosts => "172.25.0.1:9200"
index => "apachelog-%{+YYYY.MM.dd}"
}
}