ELFK集群部署与Logstash的过滤模块
- ELFK集群部署与Logstash的过滤模块
- 一、ELFK集群部署(Filebeat+ELK)
- Filebeat
- filebeat 结合 logstash 带来好处:
- 1.1 部署ELK集群
- 1.2 安装Filebeat(Apache节点)
- 1.3 设置 filebeat 的主配置文件
- 1.4 在 Logstash 组件所在节点上新建一个 Logstash 配置文件
- 1.5 浏览器访问
- 二、Logstash的过滤模块
- 2.1 Filter(过滤模块)中的插件
- grok插件(通过grok插件实现对字段的分割,使用通配符)
ELFK集群部署与Logstash的过滤模块
一、ELFK集群部署(Filebeat+ELK)
Filebeat
- 轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装 Filebeat,并指定目录与日志格式,Filebeat 就能快速收集数据,并发送给 logstash 进行解析,或是直接发给 Elasticsearch 存储,性能上相比运行于 JVM 上的 logstash 优势明显,是对它的替代。
- 常应用于 EFLK 架构当中。(如果要使用过滤功能的话,Filebeat不能完全替代logstash,Filebeat没有过滤功能,收集数据后需要发送给 logstash 进行处理)
filebeat 结合 logstash 带来好处:
- 通过 Logstash 具有基于磁盘的自适应缓冲系统,该系统将吸收传入的吞吐量,从而减轻 Elasticsearch 持续写入数据的压力。
- 从其他数据源(例如数据库,S3对象存储或消息传递队列)中提取。
- 将数据发送到多个目的地,例如S3,HDFS(Hadoop分布式文件系统)或写入文件。
- 使用条件数据流逻辑组成更复杂的处理管道。
部署环境:
node1节点(2C/4G):192.168.44.20 (Elasticsearch)
Node2节点(2C/4G):192.168.44.30 (Elasticsearch)
Apache节点:192.168.44.40 (Logstash Kibana Apache)
Filebeat节点:192.168.44.40 (Filebeat)
1.1 部署ELK集群
ELFK集群环境下,Logstash 组件所在节点的/etc/logstash/conf.d目录下,不需要创建system.conf配置文件,即Logstash不需要收集系统日志,因为系统日志将由filebeat收集后发送给Logstash。(安装filebeat后,Logstash会创建filebeat.conf配置文件获取filebeat传来的数据)
1.2 安装Filebeat(Apache节点)
#上传软件包 filebeat-6.2.4-linux-x86_64.tar.gz 到/opt目录
tar zxvf filebeat-6.2.4-linux-x86_64.tar.gz
#更换目录名称为filebeat
mv filebeat-6.2.4-linux-x86_64/ /usr/local/filebeat
1.3 设置 filebeat 的主配置文件
cd /usr/local/filebeat
cp filebeat.yml{,.bak}
vim filebeat.yml
filebeat.prospectors:
- type: log #指定 log 类型,从日志文件中读取消息
enabled: true #修改为true
paths:
- /var/log/messages #指定监控的日志文件
- /var/log/*.log
tags: ["fulebeat"] #设置索引标签
fields: #可以使用 fields 配置选项设置一些参数字段添加到 output 中
service_name: httpd
log_type: access #日志类型
from: 192.168.44.40 #源地址
output.logstash:
hosts: ["192.168.44.40:5044"] #指定 logstash 的 IP 和端口
#启动 filebeat
nohup ./filebeat -e -c filebeat.yml > filebeat.out & #nohup放入后台启动,并且不会因为终端退出而结束进程
#-e:输出到标准输出,禁用syslog/文件输出
#-c:指定配置文件
#nohup:在系统后台不挂断地运行命令,退出终端不会影响程序的运行
1.4 在 Logstash 组件所在节点上新建一个 Logstash 配置文件
cd /etc/logstash/conf.d
cp system.conf filebeat.conf
#复制出一个新的配置文件,对新的配置文件进行修改
#修改文件filebeat。conf
vim filebeat.conf
input {
beats {
port => "5044" #原本是使用文件读取数据,现改为用filebeat读取
}
}
output {
elasticsearch {
hosts => ["192.168.44.20:9200","192.168.44.30:9200"]
index => "%{[fields][service_name]}-%{+YYYY.MM.dd}" #用过filebeat.yml配置文件定义的字段获取名字
}
stdout {
codec => rubydebug #设置为能输出到屏幕上
}
}
#启动 logstash
logstash -f filebeat.conf
1.5 浏览器访问
浏览器访问http://192.168.44.20:9100/ 。
浏览器访问 http://192.168.44.40:5601 登录 Kibana,单击“Create Index Pattern”按钮添加索引“filebeat-*”,单击 “create” 按钮创建,单击 “Discover” 按钮可查看图表信息及日志信息。
二、Logstash的过滤模块
1、input {}
- 指定输入流,通过file、beats、kafka、redis中获取数据
2、filter {}
常用插件:
- grok:对若干个大文本字段进行再分割,分割成一些小字段 (?<字段名>正则表达式) 字段名:正则表示匹配到的内容
- date:对数据中的时间进行统一格式化
- mutate:对一些无用的字段进行剔除,或增加字段
- mutiline:对多行数据进行统一编排,多行合并和拆分
3、ourput {}
- elasticsearch stdout
2.1 Filter(过滤模块)中的插件
而对于 Logstash 的 Filter,这个才是 Logstash 最强大的地方。Filter 插件也非常多,我们常用到的 grok、date、mutate、mutiline 四个插件。
对于 filter 的各个插件执行流程,可以看图:
grok插件(通过grok插件实现对字段的分割,使用通配符)
这里就要用到 logstash 的 filter 中的 grok 插件。filebeat 发送给 logstash 的日志内容会放到message 字段里面,logstash 匹配这个 message 字段就可以了。
格式:
匹配格式:(?<字段名>正则表达式) #字段名:正则表达式匹配到的内容
实例1:
(?<remote_addr>%{IPV6}|%{IPV4} )(?<other_info>.+)
#对数据进行分割ip字段名为remote_addr, 其他字段名为other_info
实例2:
(?<remote_addr>%{IPV6}|%{IPV4} )[\s-]+[(?<log_time>.+)](?<other_info>.+)
#添加匹配时间字段
实例3:
#分割多个字段
(?<remote_addr>%{IPV6}|%{IPV4})[\s-]+[(?<log_time>.+)]\s+"(?<http_method>\S+)\s+(?<url-path>.+)"\s+(?<rev_code>\d+)(?<other_info>.+)
实例4:
cd /etc/logstash/conf.d/
cp filebeat.conf filter.conf
vim filter.conf
input {
beats {
port => "5044"
}
}
filter {
grok {
match =>["message","(?<remote_addr>%{IPV6}|%{IPV4} )[\s-]+[(?<log_time>.+)]\s+"(?<http_method>\S+)\s+(?<url-path>.+)"\s+(?<rev_code>\d+)(?<other_info>.+)"]
}
}
output {
elasticsearch {
hosts => ["192.168.44.20:9200","192.168.44.30:9200"]
index => "{[filter][service_name]}-%{+YYYY.MM.dd}"
}
stdout {
codec => rubydebug
}
}
logstash -f filter.conf #启动