前文我们了解了logstash的工作流程以及基本的收集日志相关配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13761906.html;今天我们来了解下logstash的常用input插件和filter插件的相关配置;
先说filter插件吧,继续上一篇博客的环境,我们配置logstash收集httpd的访问日志;
示例:配置logstash收集日志的时间戳为日志生成时的时间戳
未配置date过滤器规则时,输出的文档信息是
提示:未配置date过滤器规则时,生成的文档中的时间戳信息是不一样的;@timestamp是指收集日志时的时间,timestamp是日志生成时的时间;
配置date过滤器规则,让生成日志的时间替换收集日志时的时间
提示:以上红框中的配置表示把timestamp字段的时间替换@timestamp字段的时间,时间格式为标准的格林威治时间;
验证:启动logstash,看看输出的日志中的@timestamp字段的时间是否还是收集日志的时间呢?
提示:现在收集日志的时间就变成了日志生成时的时间了;只不过一个是格林威治标准时间,一个是东八区时间,两个时间相差8小时;这样配置以后,对于timestamp这个字段就显得多余,我们可以使用remove_field去删除timestamp字段即可;如下
示例:配置logstash收集httpd访问日志,基于clientip做地理位置分析
下载GeoLite2-City数据库到本地,这个数据库可以去maxmind官方去下载即可,我这里已经提前下载好了,直接传到服务器上即可;
提示:以上主要把GeoLite2-City包上传到指定目录,然后解压,把GeoLite2-City.mmdb数据库文件在指定目录做了一个软连接;这样做的原因是日后方便更新数据库;
配置logstash过滤规则,让其能够基于httpd的访问日志中的clientip做地理位置分析
提示:以上配置表示使用geoip过滤器插件,其中source表示以那个字段的值作为ip地址分析,target表示分析后的结果保存在那个字段上,database表示用那个数据库文件;
验证:启动logstash,看看现在输出的文档是否有geoip字段?里面是否记录了clientip的ip地址信息呢?
提示:可以看到配置了geoip过滤器插件以后,对应的文档中的geoip字段就把对应的clientip的位置信息分析后,加入到文档中了;这样经过logstash分析以后,我们就可以在kibana中配置区域地图来查看访问我们网站的客户端分布在世界地图的那些位置;
示例:修改字段名称
提示:mutate这个过滤器插件,主要对字段做操作,支持对字段进行增删查改;比如对字段重命名,如上配置;
验证:启动logstash,看看现在输出的文档中的geoip是否更改为clientipInfo了?
提示:可以看到原来的geoip字段名称已经修改成clientipInfo了;对于这个插件的用法还有其他操作和配置,可以去参考官方文档中的说明进行配置;
示例:将logstash收集的数据日志数据存入redis中
准备redis服务器,然后配置redis登录认证
[root@node04 ~]# yum install redis -y Loaded plugins: fastestmirror base | 3.6 kB 00:00:00 epel | 4.7 kB 00:00:00 extras | 2.9 kB 00:00:00 updates | 2.9 kB 00:00:00 (1/2): epel/x86_64/updateinfo | 1.0 MB 00:00:00 (2/2): epel/x86_64/primary_db | 6.9 MB 00:00:01 Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com Resolving Dependencies --> Running transaction check ---> Package redis.x86_64 0:3.2.12-2.el7 will be installed --> Processing Dependency: libjemalloc.so.1()(64bit) for package: redis-3.2.12-2.el7.x86_64 --> Running transaction check ---> Package jemalloc.x86_64 0:3.6.0-1.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ===================================================================================================================== Package Arch Version Repository Size ===================================================================================================================== Installing: redis x86_64 3.2.12-2.el7 epel 544 k Installing for dependencies: jemalloc x86_64 3.6.0-1.el7 epel 105 k Transaction Summary ===================================================================================================================== Install 1 Package (+1 Dependent package) Total download size: 648 k Installed size: 1.7 M Downloading packages: (1/2): jemalloc-3.6.0-1.el7.x86_64.rpm | 105 kB 00:00:00 (2/2): redis-3.2.12-2.el7.x86_64.rpm | 544 kB 00:00:00 --------------------------------------------------------------------------------------------------------------------- Total 1.3 MB/s | 648 kB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : jemalloc-3.6.0-1.el7.x86_64 1/2 Installing : redis-3.2.12-2.el7.x86_64 2/2 Verifying : redis-3.2.12-2.el7.x86_64 1/2 Verifying : jemalloc-3.6.0-1.el7.x86_64 2/2 Installed: redis.x86_64 0:3.2.12-2.el7 Dependency Installed: jemalloc.x86_64 0:3.6.0-1.el7 Complete! [root@node04 ~]#
配置redis监听在本机所有地址的6379端口,并给redis设置认证口令
启动redis
提示:可以看到redis使用我们设置的密码是可以正常登录到redis服务器,到此redis就准备好了;
配置logstash将收集的日志输出到redis的5号库中
提示:将logstash收集的日志输出到redis,需要用到输出插件redis,其中我们必须指定redis的主机地址,端口,密码,数据库,以及key和data_type;data_type是指定存放到redis是一那种数据结构存储,list表示存储为列表;我们知道列表有一个属性就是从列表取出数据以后,列表里对应的数据就会消失,这样一来当有多个logstash在redis中取数据时不会取到重复数据;
验证配置文件语法
启动logstash,然后去redis中验证,看看5号库中是否有我们定义key生成,对应key中是否有日志数据?
去redis上查看5号库的情况
提示:在redis的5号库中可以看到logstash上配置的key的名称,对应key里有数据;
示例:配置logstash从redis中读数据
redis环境还是上面的环境,我们重新开一个服务器,把logstash安装上,logstash的安装请参考上一篇博客https://www.cnblogs.com/qiuhom-1874/p/13761906.html;
提示:以上配置我们需要在input里配置,用redis输入插件,并明确指定redis的主机,端口,密码,数据库,key,以及数据类型;上面在node05上配置logstash将从redis的5号库采集数据,然后将数据输出到/root/目录下的test.log中;
验证配置文件语法
启动logstash,然后去node05上看对应目录下的文件是否有数据产生?redis对应库里的数据是否有减少?
提示:可以看到启动logstash,它启动了一个线程去redis中读数据,然后有启动了一个线程把数据写到/root/test.log中;
验证:在node05上查看/root目录下是否有test.log生成?对应文件中是否有内容?
提示:可以看到node05的/root目录下有test.log生成,并且里面也有数据,数据也是从redis里拿的日志数据;
验证:到node04上的redis中查看对应库中的数据是否在减少?
提示:在redis的5号库可以看到logstash在取数据,对应列表的数据在依次减少,最后当logstash把对应列表数据取完以后,对应的列表也就随之删除;
示例:配置logstash收集haproxy发送给rsyslog的日志
安装haproxy
[root@node03 ~]# yum install haproxy Loaded plugins: fastestmirror base | 3.6 kB 00:00:00 epel | 4.7 kB 00:00:00 extras | 2.9 kB 00:00:00 updates | 2.9 kB 00:00:00 Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com Resolving Dependencies --> Running transaction check ---> Package haproxy.x86_64 0:1.5.18-9.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ===================================================================================================================== Package Arch Version Repository Size ===================================================================================================================== Installing: haproxy x86_64 1.5.18-9.el7 base 834 k Transaction Summary ===================================================================================================================== Install 1 Package Total download size: 834 k Installed size: 2.6 M Is this ok [y/d/N]: y Downloading packages: haproxy-1.5.18-9.el7.x86_64.rpm | 834 kB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : haproxy-1.5.18-9.el7.x86_64 1/1 Verifying : haproxy-1.5.18-9.el7.x86_64 1/1 Installed: haproxy.x86_64 0:1.5.18-9.el7 Complete! [root@node03 ~]#
配置haproxy将日志发送给rsyslog
配置rsyslog把local2的日志发送给node05的517端口(这个端口是一个任意端口,只要在node05上不冲突就好)
重启rsylog和haproxy
配置node05上的logstash,使用输入插件rsyslog监听517端口
验证配置文件语法
启动logstash
提示:可以看到logstash启动了两个线程监听了udp的517端口和tcp517端口
访问haproxy
看看对应的标准输出中是否会打印haproxy的日志呢?
提示:可以看到在node05的标准输出上能够看到访问haproxy的日志打印;
示例:配置logstash收集tcp某个端口的数据
验证配置文件语法,没有问题就直接启动logstash
验证:在其他主机上利用nc向node05的52113发送数据,看看node05上是否会打印我们发送到信息内容?
提示:如果没有nc命令,直接使用yum install nc 即可;
提示:在node05上是能够看到从node01发送过来的消息;
好了,以上是logstash的常用插件的配置,当然还有很多很多,用到那个不会可以去官方文档查找相关插件文档说明进行配置即可;官方文档https://www.elastic.co/guide/en/logstash-versioned-plugins/current/index.html;