学习目标:
掌握logstash
学习内容:
Logstash概述
logstash就是一根具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端;与此同时这根管道还可以让你根据自己的需求在中间加上滤网,Logstash提供里很多功能强大的滤网以满足你的各种应用场景。
备注:logstash常用于日志系统中做日志采集设备,最常用于ELK中作为日志收集器使用
安装Logstash
#curl -LO https://artifacts.elastic.co/downloads/logstash/logstash-7.13.2-linux-x86_64.tar.gz
#tar -zxvf logstash-7.13.2-linux-x86_64.tar.gz -C /usr/local
#mv /usr/local/logstash-7.13.2-linux-x86_64.tar.gz /usr/local/logstash
测试运行
运行最基本的logstash管道来测试logstash安装
Logstash管道具有两个必需元素 input 和 output ,以及一个可选元素 filter。 输入插件使用来自源的数据,过滤器插件根据你的指定修改数据,输出插件将数据写入目标
进入Logstash的安装目录下执行:
#bin/logstash -e ''
-e 选项用于设置Logstash处理数据的输入和输出
-e '' 等同于 -e input { stdin { type => stdin }} output { stdout {codec => rubydebug }}
input { stdin { type => stdin }} #表示Logstash需要处理的数据来源于标准输入设备
output { stdout {codec => rubydebug }} #表示logstash吧处理好的数据输出到标准输出设备
message字段对应的值是Logstash接收到的一行完整的数据
@version 是版本信息,可以用于建立索引使用
@timestamp 处理此数据的时间戳,可以用来建立索引和搜索
type 就是之前input中设置的值,这个值可以任意修改,但是type是内置的变量,不能修改,用于建立索引和条件判断等
hosts 表示从那个主机过来的数据
配置输入和输出
生产中,Logstash管道要复杂一些:它通常具有一个或多个输入,过滤器和输出插件
配置文件语法测试, -f 用于指定管道配置文件
#bin/logstash -f config/pipeline.conf --config.test_and_exit
运行如下命令启动logstash
#bin/logstash -f config/pipeline.conf
使用Grok过滤器插件解析web日志
使用grok过滤器插件,可以将非结构化的日志数据解析为结构化可查询的内容
grok会根据你感兴趣的内容分配字段名称,并把这些内容和对应的字段名称进行绑定
它是通过自己预定义的模式来识别感兴趣的字段,这个可以通过给其配置不同的模式来实现,这里使用的模式是 %{HTTPD_COMMONLOG}
{HTTPD_COMMONLOG}使用如下模式从apache日志中构造行:
样例
grok对web日志进行过滤处理,输出结构化数据,在message字段对应的值中查询匹配上HTTPD_COMMON
你会发现原来非结构数据变为结构化的数据了。
可以发现messages字段仍然存在,如果不需要它,可以使用grok中提供的常用选项之一:remove_field来移除这个字段。
remove_field可以移除任意的字段,它可以接受的值是一个数组
rename可以重新命名字段
修改管道配置文件如下:
使用Geoip过滤器插件增强数据编辑
除解析日志数据以进行更好的搜索外,刷选器插件还可以从现有数据中获取补充信息,例如,geoip插件可以通过查找ip地址,并从自己自带的数据库中找到对应的地理位置信息,然后将该位置信息添加到日志中,该geoip插件配置要求制定包含ip地址来查找源字段的名称,在此示例中,该clientip字段包含ip地址
配置接受beats的输入
启动filebeat和logstash后可以发现收集到日志