前几节我们都是使用logstash来采集主机中的日志,如果大规模的收集使用logstash会比较浪费一些资源,比如一个logstash最少要占用一二百M内存,最多要五六百M,还需要部署java环境,如果一些主机不需要java环境还要单独的为logstash安装,如果一台主机消耗500M内存,拿么一百台需要多消耗内存资源50G。
elk官方退出一款filebeat轻量级采集日志,比logstash占用资源更少,一个filebeat只需要几十M的内存资源,而且filebeat不需要类似于java的基础运行环境,收集日志日志性能更强,不过功能相对于logstash来说比较少。
下面我们更换一下结构,我们把主机端的logstash更换为filebeat来收集主机日志,架构为:主机端filebeat采集->redis服务->logstash->es。
一、安装配置filebeat
注意!!
es+logstash+filebeat版本最好统一,避免不兼容问题
安装filebeat
dpkg -i filebeat-7.12.1-amd64.deb
修改配置文件
root@web3:/usr/local/tomcat/logs# grep -v "#" /etc/filebeat/filebeat.yml |grep -v ^$
filebeat.inputs:
- type: log #采集类型
enabled: true #开启采集
paths:
- /var/log/*.log #收集目标
fields:
type: filebeat-syslog #在日志上打上标签,用于logstash进行过滤分类
- type: log
enabled: true
paths:
- /usr/local/tomcat/logs/localhost_access_log.*
fields:
type: filebeat-tomcat-accesslog
- type: filestream
enabled: false
paths:
- /var/log/*.log
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 1
setup.kibana:
processors:
- add_host_metadata:
when.not.contains.tags: forwarded
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~
output.redis: #输出类型redis
hosts: ["10.0.0.124:6379"] #主机ip
key: "redis-filebeat-syslog" #redis的key名称
db: "2" #输出到redis 2中
timeout: 3 #连接redis超时时间
password: "123456" #redis密码
重启filebeat服务
systemctl restart filebeat.service
二、测试数据是否写入redis服务中
手动写入数据
root@web3:/etc/filebeat# echo "22222222222" >> /var/log/dpkg.log
root@web3:/etc/filebeat# echo "22222222222" >> /var/log/dpkg.log
root@web3:/etc/filebeat# echo "22222222222" >> /var/log/dpkg.log
root@web2:~# curl http://10.0.0.192:8080/myapp/
10.0.0.192
root@web2:~# curl http://10.0.0.192:8080/myapp/
登录redis查看是否有key
127.0.0.1:6379[2]> keys *
1) "redis-filebeat-tomcat-accesslog"
redis中查看到dpkp.log的内容,注意查看fields的值

redis中查看到tomcat访问日志,也是要注意查看fieds的值

三、配置logstash
root@logstash1:/etc/logstash/conf.d# grep -v "#" logstashtoredis.conf |grep -v ^$
input {
redis{
host => ["10.0.0.124"]
data_type => "list"
port => "6379"
password => "123456"
key => "redis-filebeat-tomcat-accesslog"
db => "2"
}
}
output {
if [fields][type] == "filebeat-syslog" { #根据fields的值来判断要写入索引的内容
elasticsearch{
hosts => ["10.0.0.121:9200"]
index => "filebeat-syslog-%{+YYYY.MM.dd}"
}}
if [fields][type] == "filebeat-tomcat-accesslog" {
elasticsearch{
hosts => ["10.0.0.121:9200"]
index => "filebeat-tomcat-accesslog-%{+YYYY.MM.dd}"
}}
}
启动logstash服务
systemctl restart logstash.service
四、查看索引是否生成

五、在kibana中创建索引查看消息


总结
1、filebeat配置文件采集多个目录,需要根据fileds添加值来区分收集的日志类型
2、配置文件验证是否有问题本人目前还是通过redis是否有写入数据来查看
3、待补充