Q1: 既然filebeat可以直接把数据发送到es,为什么还要经过logstash呢?
- 是因为filebeat没有filter,它是一个轻量级搬运工
Q2: 既然logstash也可以从文件收集数据,为什么还要使用filebeat呢?
- filebeat是一个ELK官方推出的轻量级日志收集工具,用go语言编写,相比logstash占用资源更少,安装也更方便,可以通过包管理直接安装。缺点是不具备logstash的filter。8线程8GB内存下,logstash常驻内存660M(JAVA),filebeat常驻内存不到30M(GO),还不到logstash的零头。考虑logstash可能对生产应用存在影响,常采用filebeat替换logstash在服务器本地进行日志采集,然后输出到ELK端的logstash,filter由ELK端logstash完成。
logstash和filebeat简单对比
安装logstash
搭建elasticSearch
下载
安装
tar -xf filebeat-7.0.0-linux-x86_64.tar.gz
mv filebeat-7.0.0-linux-x86_64 /usr/local/filebeat
配置filebeat
注意,filebeat6.x以后不允许有多个output了,所以配置文件中的output只能选择一个
vi /usr/local/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
直连kibana
setup.kibana:
host: "172.17.2.89:5601"
直连es
output.elasticsearch:
hosts: ["172.17.2.89:9200"]
连接logstash 5044是logstash配置文件中input.beats.port的配置值
output.logstash:
hosts: ["172.17.2.89:5044"]
安装httpd用于测试
每次访问localhost,都会在 /var/log/httpd/access_log文件中追加一条日志
yum install httpd
echo "hello world" > /var/www/html/index.html
systemctl start httpd 启动httpd
systemctl enable httpd 设置开机自启动
检查
后台启动filebeat
./usr/local/filebeat/filebeat -c filebeat.yml &
每次执行以上命令,都会向 /var/log/httpd/access_log文件中追加一条日志
curl localhost
该日志将被filebeat收集到elasticsearch或logstash
到kibana创建一个filebeat*的index pattern
即可在discover中看到access_log中的每条日志