ELK(四)

前几节我们都是使用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的值

内容中有输出的消息与filelds设置的值

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

内容中有输出的消息与filelds设置的值

三、配置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中创建索引查看消息

*.log验证
tomcat验证

总结

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