Filebeat,Redis和ELK6.x集中式日志解决方案

简介

           ELK 不是一款软件,而是 Elasticsearch、Logstash 和 Kibana 三种软件产品的首字母缩写。这三者都是开源软件,通常配合使用,而且又先后归于 Elastic.co 公司名下,所以被简称为 ELK Stack。而redis作为一款性能优良的消息队列。更是适合用在此场景中。

         下面是针对每个技术我的博客详解。

          1.Elasticsearch6.x介绍

          2.Logstash6.x介绍

           3.Kibana6.x 介绍

          4.redis基础介绍

  filebeat就在这里介绍了。

        Filebeat是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并且转发这些信息到elasticsearch或者logstarsh中存放。所以说filebeat就是logstash-agent端的取代产品。且性能优良。


基本架构

 下图是经典的日志收集流程,只不过我们这次要在filebeat与Logstash之间加上一个消息队列redis,Logstash服务端只需要从redis中获取想要的数据。而所有的客户端直接将数据发往redis。Filebeat,Redis和ELK6.x集中式日志解决方案_第1张图片

 准备环境。

 Centos7 3台,Elasticsearch6.1,logstash6.1,kibana6.1,filebeat安装包。epel的yum源

1.首先配置 filebeat。

  安装filebeat。只需 yum -y install filebeat 。安装完成后,修改配置文件 /etc/filebeat/filebeat.yml

内容如下:

filebeat.prospectors:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/*.log
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
setup.template.settings:
  index.number_of_shards: 3
setup.kibana:
output.redis:
   hosts: ["192.168.40.133"]
   port: 6379
   key: "nginx-log"

这样的配置是 从 /var/log/nginx下读取所有以.log结尾的文件。且发送到redis。且redis中以list方式存储。键名为 nginx-log

配置完成后。启动redis。再启动filebeat。

systemctl start redis

systemctl start filebeat

接下来应该让logstash从redis中间键中读取数据。那么配置logstash。配置文件为 /etc/logstash/conf.d/nginx.conf

input {
  redis {
    port => "6379"
    host => "192.168.40.133"
    data_type => "list"
    type => "log"
    key => "nginx-log"
  }
}
filter {
  grok {
    match => {
      "message" => '%{IPORHOST:remote_ip} - %{DATA:user_name} \[%{HTTPDATE:time}\] "%{WORD:request_action} %{DATA:request} HTTP/%{NUMBER:http_version}" %{NUMBER:response} %{NUMBER:bytes} "%{DATA:referrer}" "%{DATA:agent}"'
    }
  }
  date {
    match => [ "time", "dd/MMM/YYYY:HH:mm:ss Z" ]
    locale => en
  }
  geoip {
    source => "remote_ip"
    target => "geoip"
  }
  useragent {
    source => "agent"
    target => "user_agent"
  }
}
output {
  elasticsearch {
     hosts => "192.168.40.133:9200"
     index => "logstash-%{+YYYY.MM.dd}"
  }
}

配置完成后,启动logstash。 logstash -f  /etc/logstash/conf.d/nginx.conf。或systemctl start logstash

这里logstash从redis中读取数据。而将数据过滤后再发送至Elasticsearch。过滤时用到了grok将数据格式化。user_agent,geoip等等插件。

再启动Elasticsearch和kibana。

在浏览器访问kibana所在主机的5601端口。选择Management。创建index parttern。

Filebeat,Redis和ELK6.x集中式日志解决方案_第2张图片

创建 logstash-*

好了,大功告成!




你可能感兴趣的:(运维)