ELFK集群布置(Filebeat+ELK)
ELFK= ES + logstash + filebeat + kibana
Filebeat
- 轻量级的开源日志文件数据搜集器。通常在需求搜集数据的客户端装置 Filebeat,并指定目录与日志格式,Filebeat 就能快速搜集数据,并发送给 logstash 进行解析,或是直接发给 Elasticsearch 存储,性能上比较运行于 JVM 上的 logstash 优势明显,是对它的代替。
- 常应用于 EFLK 架构当中。(如果要运用过滤功能的话,Filebeat不能完全代替logstash,Filebeat没有过滤功能,搜集数据后需求发送给 logstash 进行处理)
filebeat 结合 logstash 带来优点:
- 经过 Logstash 具有根据磁盘的自适应缓冲体系,该体系将吸收传入的吞吐量,从而减轻 Elasticsearch 继续写入数据的压力。
- 从其他数据源(例如数据库,S3对象存储或消息传递行列)中提取。
- 将数据发送到多个目的地,例如S3,HDFS(Hadoop分布式文件体系)或写入文件。
- 运用条件数据流逻辑组成更复杂的处理管道。
实验环境
- node01节点:192.168.44.20(ES,2核4G)
- node02节点:192.168.44.30(ES,2核4G)
- Apache节点:192.168.44.40(Logstash、Kibana、Apache、filebeat,2核4G)
留意:ELFK各装置包的版本要共同,或附近。
操作过程
布置ELK集群
ELK集群的布置在前一篇文章中ELK 企业级日志剖析体系 – ()有详细介绍,可参考前一篇文章。
ELFK集群环境下,Logstash 组件地点节点的/etc/logstash/conf.d目录下,不需求创立system.conf配置文件,即Logstash不需求搜集体系日志,由于体系日志将由filebeat搜集后发送给Logstash。
(装置filebeat后,Logstash会创立filebeat.conf配置文件获取filebeat传来的数据)
装置 Filebeat(在apache节点操作)
-
上传软件包 filebeat-6.2.4-linux-x86_64.tar.gz 到/usr/local/目录
-
替换目录名称为filebeat
设置 filebeat 的主配置文件
-
备份配置文件
-
修正配置文件filebeat.yml
-
发动 filebeat
在 Logstash 组件地点节点上新建一个 Logstash 配置文件
由于logstash和filebeat在同一台主机上,所以再开一个终端进行操作
-
修正文件filebeat.conf
-
发动 logstash
- 接受日志数据
- 接受日志数据
浏览器拜访
-
浏览器拜访http://192.168.44.20:9100/ 。
-
浏览器拜访 http://192.168.44.40:5601 。登录 Kibana,单击“Create Index Pattern”按钮增加索引“httpd-*”,单击 “create” 按钮创立,单击 “Discover” 按钮可查看图表信息及日志信息。
Logstash的过滤模块
- input {} 表明从数据源搜集数据,常见的数据源如Kafka、日志文件等
- 指定输入流,经过file、beats、kafka、redis中获取数据
- filter {} 表明数据处理层,包括对数据进行格式化处理、数据类型转换、数据过滤等,支持正则表达式
- 常用插件:
- grok:对若干个大文本字段进行再分割,分割成一些小字段 (?<字段名>正则表达式) 字段名:正则表明匹配到的内容
- date:对数据中的时刻进行统一格式化
- mutate:对一些无用的字段进行除掉,或增加字段
- mutiline:对多行数据进行统一编列,多行合并和拆分
- 常用插件:
- ourput {} 表明将Logstash搜集的数据经由过滤器处理之后输出到Elasticsearch
- elasticsearch stdout
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 #发动